46
7. 유유유유 (Utilities) 유유 유유유유 !

7. 유틸리티( Utilities)

Embed Size (px)

DESCRIPTION

7. 유틸리티( Utilities). 돈이 시간이다!. 7.1 소개. 구분. Utilities. 구분. Utilities. grep, fgrep, egrep uniq (3 장 참조). compress, crypt, sed, uncompress, tr, ul. 화일 변환. 화일 여과. 화일 정렬. sort. 전자우편 검사. biff. cmp, diff. 화일 비교. 순수화일 내용보기. od. 화일 보관. tar, cpio, dump. 화일시스템 마운팅. mount, umount. - PowerPoint PPT Presentation

Citation preview

Page 1: 7. 유틸리티( Utilities)

7. 유틸리티 (Utilities)

돈이 시간이다 !

Page 2: 7. 유틸리티( Utilities)

Unix 시스템 2

7.1 소개

구분 Utilities

화일 여과 grep, fgrep, egrep uniq (3 장 참조 )

화일 변환 compress, crypt, sed,uncompress, tr, ul

화일 정렬 sort 전자우편 검사 biff

화일 비교 cmp, diff 순수화일 내용보기 od

화일 보관 tar, cpio, dump 화일시스템 마운팅 mount, umount

화일 보관 find 사용자 대치 su

명령어 스케줄 at, cron, crontab 셀 확인 whoami

텍스트 처리 awk (3 장 참조 ) 문서 준비 nroff,spell,style,troff

하드 및 소프트링크

구분 Utilities

ln

Page 3: 7. 유틸리티( Utilities)

Unix 시스템 3

7.2 파일 여과

패턴여과 : egrep/fgrep/grep 명시된 패턴 (pattern) 이 없는 줄만을 여과 그레이브 악센트 부호 (`) 로 둘러싸인 명령어는 표준 출력으로 대치

$ echo there are `who | wc -l` users on the system$ vi `grep -l debug *.c` # debug 패턴을 포함하며 .c 로 끝나는 모든 화일들을 vi 편집

화일 여과 utility [ 교재 p287 참조 ] : egrep, fgrep, grep, uniq① grep, fgrep, egrep: 명시된 패턴이 있는 / 없는 줄만을 여과 grep/frep/egrep - hilnvw pattern {fileName}* -n ( 줄번호 표시 ) -i( 대소문자 무시 ) -l( 화일목록 ) -v ( 일치하지않은 줄 ) -w( 단어 단위로 탐색 ) 명시된 화일이 없으면 표준 입력을 탐색한다 . pattern : grep( 정규식 ) fgrep( 일정한 문자열만 ) egrep( 확장된 정규식 )( 예) $ grep the inputfile( 예) $ grep -nw the inputfile 정규식의 예 [ 교재 p289, p709 참조 ] : 반드시 단일 따옴표 안에 !

• 정규 표현식 : . [] * ^ $ \

( 예 ) .nd ^.nd sw.*ng [A-D] \. a. a.$ im*ing • 확장 정규 표현식 : (+ ? | ()

( 예 ) sw.+ng off|will im?ing

Page 4: 7. 유틸리티( Utilities)

Unix 시스템 4

7.2 파일 여과

반복 줄 제거 : uniq 인접한 , 반복줄을 여과② uniq: 동일한 내용이 인접 반복된 줄들을 한 줄만 남기고 여과

uniq -c -number [ inputfile [outputfile] ]

-c ( 해당 줄이 반복된 횟수를 보여줌 )

-number (number 번째 항목을 무시하고 패턴 탐색 )

(예) $ uniq inputfile [p290 참조 ]

(예) $ uniq -c inputfile

(예) $ uniq -1 inputfile

Page 5: 7. 유틸리티( Utilities)

Unix 시스템 5

7.3 화일 정렬 : SORT

sort [ -tc -r ] {sortField -b -f -M -n}* {fileName}*-tc 정렬을 위한 비교 항목들을 구분하는

문자를 c 로 새로이 설정 (default: 이 옵션이 생략되어있으면 , blank 나 tab 으로 구분한다 )-r 내림차순으로 정렬 (default: ASCII 표에 의한 오름차순 )-b 줄의 앞부분에 있는 공백을 무시 (default: blank 도 정렬시 비교대상임 )

-f 대소문자를 무시하고 정렬

-M 월 (month) 순으로 정렬 ( 단 , % setenv LANG en_US)

-n 숫자의 크기 순으로 정렬sortField 특정항목을 기준으로 정렬하도록 지정

( 다수 항목 지정 가능 ) “+number1 -number2" 의 형태

number1 은 시작 항목 번호를 , number2 는 정지 항목번호를 나타냄 시작 항목 번호는 0 부터 시작 ( 즉 , -0 은 첫 번째 항목을 가리킴 )

정지 항목 번호는 정렬 대상 에서 제외되며 생략시 모든 항목이 포함

Page 6: 7. 유틸리티( Utilities)

Unix 시스템 6

7.3 화일 정렬 : SORT

( 예 ) $ sort -r sortfile→ 역순으로 정렬$ sort +0 -1 sortfile [ 교재 p293]→ 첫 번째 항목만을 기준으로 정렬$ sort +0b -1 sortfile→ 첫 번째 항목만을 기준으로 정렬하되 , 줄의 앞부분에 나오는 공백을

무시하여 첫 번째 항목을 잡는다 .$ sort +0bM -1 +4 -n sortfile→ 공백을 무시하면서 첫 번째 항목을 기준으로 월별로 정렬한 후 , 그 후에

다섯 번째 항목이하를 숫자 크기로 추가로 정렬$ sort -t: +0bM -1 +2 -n sortfile2 → 항목 구분을 ':' 로 한다 . 공백을 무시하여 첫 번째 항목을 월별로 정렬한 후 ,

세 번째 항목 이하를 숫자 크기로 추가 정렬 필드 안의 글자 지정

% sort +1.1 –2.2 sortfile sort 의 다수 항목 지정하는 두 가지 방법

% sort +0bM -1 +4 -n sortfile% sort -k 1,1bM -k 5,5n sortfile (-k field_start[type][,field_end[type], field 는 1 부터 시작 , type 은 bdfiMnr )

Page 7: 7. 유틸리티( Utilities)

Unix 시스템 7

7.4 파일 비교

cmp 두 화일의 동일성을 검사하여 , 차이가 생기는 첫 번째 바이트를 보여

줌 diff

두 화일을 비교하여 한 파일을 다른 화일로 전환하는 편집 변경을 행할 때에 필요한 동작 목록을 보여 줌

(3 종류의 편집변경이 제공됨 )

Page 8: 7. 유틸리티( Utilities)

Unix 시스템 8

7.4 화일 비교

cmp [-l -s] fileName1 fileName2 [offset1 offset2] 내용이 동일하면 , 종료값은 0 으로서 , 출력으로는 아무 것도 보여주지

않슴 다르면 , 종료값은 1 으로서 , 출력으로는 일치하지않은 첫 번째

바이트의 옵셋 (offset: 문자의 순서값 ) 과 위치한 줄 번호을 보여줌 만일 어느 한 쪽 화일이 짧으면 , 짧은 쪽 화일 이름 앞에 EOF 메시지를

붙임 -l 일치하지않는 모든 바이트들에 대한 옵션과 각각의 문자값을 보여줌 -s 모든 출력을 금지한다 (sillent)

offset1 fileName1 의 비교 시작 위치에 대한 옵셋 offset2 fileName2 의 비교 시작 위치에 대한 옵셋

( 예 ) $ cmp lady1 lady2

$ cmp lady3 lad

$ cmp -l lady1 lady2

Page 9: 7. 유틸리티( Utilities)

Unix 시스템 9

7.4 화일 비교 diff [ -i -Dflag ] fileName1 fileName2

-i 대소문자의 구분을 무시한다 (ignore)-Dflag C preprocessor 를 위한 출력을 생성 출력 형태 1: 첨가 (addition)

firstStart a secondStart, secondStop> 두 번째 화일에서 첫 번째 파일로 첨가 되어야 할 부분

출력 형태 2: 삭제 (deletion)

firstStart, firstStop d lineCount < 첫 번째 화일에서 제거되어야할 줄들

출력 형태 3: 변경 (change)firstStart firstStop c secondStart, secondStop

< 첫 번째 화일에서 치환되어야할 줄 ---

> 치환을 위하여 사용되어야할 두 번째 파일의 줄 firstStart 와 firstStop 는 첫 번째 화일의 줄번호를 의미하고 secondStart 와 secondStop 는

두 번째 화일의 줄번호를 의미( 예 ) $ diff lady1 lady2 → 3c3

$ diff lady2 lasy3 → 3a4,6 $ diff lady3 lady4 → 2,4d1 $ diff -Dflag lady3 lady4 → #ifndef flag …… #endif flag 를 이용하여 전처리기 대상 생성

Page 10: 7. 유틸리티( Utilities)

Unix 시스템 10

7.5 화일 보관

화일을 보관하는 이유 ① backup( 정기적 , 보관용 )

② 네트워크 연결이 안된 컴퓨터로의 데이터 전송

cpio : 화일 복사용 . 오직 하나의 backup volume 으로 저장한다 . 소규모 백업에 적당

tar : tape 에 화일을 보관함 . 추가 저장시 항상 뒷 부분에 저장됨 . 오직 하나의 backup volume 으로 저장 . 소규모 백업에 적당

dump/restore : 시스템 관리자가 전체 시스템을 백업하고 추출 하는데 사용 . 개개의 화일을 다루는 데는 불편 하지만 , 정기적 시스템 백업에 유용

Page 11: 7. 유틸리티( Utilities)

Unix 시스템 11

7.5 화일 보관

cpio -ov > backupFile-o 표준 입력으로부터 복사 ( 백업 ) 할 화일명

의 목록을 받아 복사 (ouput)

-v 화일을 복사하는 동안 각 화일의 이름을 보여 줌 (verbose)

cpio -idtu patterns < backupFile-i 표준 입력으로부터 cpio 형식 파일 ( 이전에 cpio 로 저장된 화일 ) 을 읽어서 , 명시된 pattern 에 일치하는 화일들 모두를 재생 (input)

-d 필요하다면 디렉토리를 생성-t 복사 대신 목차를 보여 줌-u 무조건 복사

cpio -pl directory-p 표준 입력으로부터 복사 ( 백업 ) 할 화일명 목록을 받아서 이를 명명된

directory 로 복사 ( 하나의 서브디렉토리 복사시 cp -r 명령이 더 간단 )

-l 물리적 복사 대신에 링크 (link) 를 만듦 결국 디스크 사용이 전혀 없슴

Page 12: 7. 유틸리티( Utilities)

Unix 시스템 12

7.5 화일 보관

( 예 ) $ ls *.c | cpio -ov > backup

$ cpio -i < backup

$ find . -name \*.c -depth -print | cpio - ov >backup2

→ 패턴 *.c 인 모든 화일들을 서브디렉토리를 포함 하여 백업

$ find . -mtime -2 -print | cpio -p ..

→ 현재의 디렉토리에 있는 화일들 중에서 지난 2 일 동안 수정된 화일들을

부모 디렉토리에 복사함

$ find . -mtime -2 -print | cpio -pl ..

→ 현재의 디렉토리에 있는 화일들 중에서 지난 2 일 동안 수정된 화일들을

부모 디렉토리에 링크함

Page 13: 7. 유틸리티( Utilities)

Unix 시스템 13

7.5 화일 보관

tar -cvf tarFileName fileList-c fileList 에 대한 tar 형식의 백업 화일을 생성 (create)

-v 진행되는 상황을 설명 (verbose)

-f tar 형식의 백업 화일 이름을 지정 (default: /dev/rmt8)

tar -txru tarFileName [ fileList ]-t tar 형식의 백업 화일 안에 어떤 것들이 들어 있는지 목차만 보임 (title)

-x 백업 화일로부터 화일을 추출 복귀 (extract)

-r fileList 를 기존의 백업 화일 뒤에 무조건 덧붙임 (rear)

-u 기존의 백업 화일에 이미 포함되어있는 fileList

중 수정된 화일들만을 백업 화일의 뒤에 덧붙임 .

디렉토리가 있어도 recursive 하게 적용

Page 14: 7. 유틸리티( Utilities)

Unix 시스템 14

7.5 화일 보관

( 예 ) $ tar -cvf tarfile .

$ tar -tvf tarfile

$ tar -rvf tarfile reverse.c

$ tar -uvf tarfile reverse.c

$ tar -vxf tarfile ./tmp

$ tar -xvf tarfile `tar -tf tarfile | grep '.*\.c'` → C 프로그램 화일들만을 추출한다

$ tar -vxf ../tarfile reverse.c

Page 15: 7. 유틸리티( Utilities)

Unix 시스템 15

7.5 화일 보관

dump [level] [f dumpFile] [v] [w] fileSystem

level 덤프의 수준을 지정 . 명시된 level 보다 낮은 level 에서 최근에 덤프한 이후에 수정된 모든 화일들만을 덤프시킴 (default 값 : 9)

만일 level 을 0 으로 하면 , 항상 모든 파일들을 덤프하게 됨f 덤프될 화일 (dumpFile) 을 지정 (defautl: /dev/rmt8)

v 화일을 덤프하는 동안 각 화일의 이름을 보여 줌 (verbose)

w 백업을 수행하는 대신 , 덤프될 모든 화일의 목록을 보여준다

dump [level] [f dumpFile] [v] [w] {fileName }+ 지정된 화일들만을 덤프한다 .

( 예) $ dump 0 fv /dev/rmt0 /dev/da0

→ 화일 시스템 /dev/da0 를 테이프 드라이버 /dev/rmt0 로 level 0 덤프 수행 백업 레벨 : 0 ~ 9

Sat Sun Mon Tue Wed Thu Fri

0 5 5 5 3 5 5

Page 16: 7. 유틸리티( Utilities)

Unix 시스템 16

7.5 화일 보관

restore -irtx [ f dumpFile ] { fileName }+-i 대화형 복구 . 사용자에게 복구할지 말지를 목록을 보여주면서 진행한다 .

-r dumpFile 에 있는 모든 화일을 현재의 디렉토리로 복구-t 복구는 하지않고 그 대신에 dumpFile 내용의 목록들만을 보여준다-x 복구 (extract)

( 예) $ restore -x f /dev/rmt0 wine.c hacking.c

Page 17: 7. 유틸리티( Utilities)

Unix 시스템 17

7.6 화일 탐색 find pathList expression

pathList 화일을 탐색할 경로의 리스트 (recursive search)

expression

-name pattern 화일 이름이 pattern 과 일치하면 참 (*, [, ], ? 포함 가능 )

-perm oct permission 의 8진수 표현이 oct 와 일치하면 참-type ch 화일의 유형이 ch 이면 참 (ch: b=block, c=char)

-user userId 화일의 소유자가 userId 이면 참-group groupId 화일의 그룹이 groupId 이면 참-atime count 접근 (access) 한 날 수가 count 이내이면 참-mtime count 수정 (modify) 한 날 수가 count 이내이면 참 -ctime count 수정되고 화일의 속성이 바뀐 날수가 count 이내이면 참-exec command 수행 중인 command 의 종료값이 0 이면 참 . \; 로 끝남 command 의 argument 가 {} 이면 , 현재 화일의 이름임-print 현재 화일명을 프린트하고 참값을 반환-ls 현재 화일의 속성을 보여주고 참 값을 반환

-cpio device 현재의 화일을 cpio 형식으로 device 에 쓰고 참 값 반환

!expression expression 의 논리 부정\( expr1 [-a] expr2 \) 두 expression 의 and

\( expr1 [-o] expr2 \) 두 expression 의 or

Page 18: 7. 유틸리티( Utilities)

Unix 시스템 18

7.6 화일 탐색

( 예 ) $ find . -name '*.c' -print

→ 현재의 디렉토리나 그 서브디렉토리에서 모든 C 소스 프로그램을 찾아 그 화일명들을 프린트

$ find . -mtime 14 -ls

→ 지난 14 일 동안 수정된 화일들을 표시 $ find . -name '*.bak' -ls -exec rm {} \;

→ '.bak' 으로 끝나는 화일들을 표시한 후에 제거함 $ find . \( -name '*.o' -o -name '*.txt' \) -print

→ '.o' 로 끝나거나 '*.txt' 로 끝나는 화일들의 이름을 프린트함

Page 19: 7. 유틸리티( Utilities)

Unix 시스템 19

7.7 명령 스케쥴링

crontabcron 에 의하여 일련의 작업이 주기적으로 실행되도록 함 . cron 은 단일

프로세스로서 시스템 시작부터 종료 까지 동작하는데 , /var/spool/cron/crontabs 디렉토리에 복사 등록된 crontab 화일들을 수행함

at 지정된 시간에 작업이 실행되도록 함

Page 20: 7. 유틸리티( Utilities)

Unix 시스템 20

7.7 명령 스케쥴링

crontab crontabNamecron (daemon) 시스템에 의하여 사용되는 crontbaName 의 crontab 파일을 등록

crontab -l -e -r [ userName ]-l 등록된 crontab 화일의 내용을 보여준다 (list)

-e 등록된 crontab 화일의 내용을 편집한다 (edit)

-r 등록된 crontab 화일을 등록해제한다 (remove)

userName 사용자만 자신의 crontab 화일을 소유하도록 함

/var/cron/log 파일에 cron daemon 이 처리한 내용 기록

Page 21: 7. 유틸리티( Utilities)

Unix 시스템 21

7.7 명령 스케쥴링

crontab 화일의 형식minute (0-59)

hour (0-23)

day (1-31)

month (1-12)

weekday (1-7, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat, 7=Sun)

command unix 명령어 처음 다섯 항목에 * 가 오면 항상 일치됨을 의미 명령의 표준 출력은 자동적으로 사용자에게 mail utility 를 통하여 전송 % 다음의 문자는 임시 화일에 복사되고 , 명령의 표준 입력으로 사용됨

Page 22: 7. 유틸리티( Utilities)

Unix 시스템 22

7.7 명령 스케쥴링

( 예 ) $ cat crontab.con

0 8 * * 1 echo Happy Monday Morning

* * * * * echo One Minute Passed > /dev/tty01

30 14 1 1 * mail users % Jan Meeting At 3 pm

→ 월요일 아침 8 시에 전자 우편을 발송 매분마다 터미날 tty01 에 에코함 .

1 월 1 일 오후 2:30 에 모든 사용자에게 임박한 회의르 상기시킴 $ crontab crontab.con

$ crontab -l

$ crontab -l mysung → 사용자별로 확인하는 것은 슈퍼유저만이 사용 가능

개별 사용자가 crontab 을 사용하는 것을 허용하거나 금지하는 방법: /var/spool/cron/cron.allow 와 var/spool/cron/cron.deny ( 사용자 이름 목록 )

: 만일 두 화일이 모두 존재하지 않으면 슈퍼유저만 사용 가능함: cron.allow 가 존재하지않고 cron.deny 가 비어있으면 모든 사용자가

사용가능

Page 23: 7. 유틸리티( Utilities)

Unix 시스템 23

7.7 명령 스케쥴링

at -c -s -m time [date [, year] ] [ +increment] [script]-c 각 명령어가 C shell 로 수행됨을 의미-s 각 명령어가 Bourne shell 로 수행됨을의미-m 작업이 완료되면 전자우편을 보내도록 함script script 화일로부터 작업을 읽는다 (default: 표준 입력 )

time HH 또는 HHMM 의 형식 (am/pm 이 뒤따름 )

now ( 지금 )

date 요일 또는 달의 처음 세 글자 today ( 오늘 )

tomorrow ( 내일 )

date 생략시 , time 이 현 시각보다 뒤이면 date 는 today 로 , time 이 현 시각보다

앞이면 date 는 tomorrow 로 간주 됨increment 숫자 [ minutes | hours | days | weeks | months | years ]

Page 24: 7. 유틸리티( Utilities)

Unix 시스템 24

7.7 명령 스케쥴링

at -r { jobId }+

-r 명시된 작업을 at 큐로부터 제거

at -l { jobId }*

-l 뒤따르는 작업들의 목록을 보여 줌

( 예 ) $ at now +2 minutes < at.csh

$ at -l

$ at 17:35 < at.csh

$ at 0934am Sep 18 < at.csh

$ at 9:34 Sep 18 , 1996 < at.csh

$ at 11:00pm tomorrow < at.csh

$ at 9pm Jan 13 < at.csh

$ at 10pm Wed < at.csh

Page 25: 7. 유틸리티( Utilities)

Unix 시스템 25

7.7 명령 스케쥴링

(예) $ at 8am

at> 명령어 입력 at> ^D

$ cat at.csh

#! /bin/csh

date > /dev/pts/12 ( 자신의 가상 터미널로 )

# Reschedule Script

at now +2 minutes < at.csh

개별 사용자가 at 를 사용하는 것을 허용하거나 금지하는 방법: /var/spool/cron/at.allow 와 /var/spool/cron/at.deny ( 사용자 이름 목록 )

: 만일 두 화일이 모두 존재하지 않으면 슈퍼유저만 사용 가능함: at.allow 가 존재하지않고 at.deny 가 비어있으면 모든 사용자가 사용 가능

Page 26: 7. 유틸리티( Utilities)

Unix 시스템 26

awk : Aho, Weinberger, Kernighan

awk -Fc [-f fileName] 'program' {variable=value}* {fileName}*

-Fc 입력줄의 항목 구분자를 c 로 정함 (default:tab 이나 공백 )

-f fileName awk 프로그램을 화일로 만들었을 때 이를 지정함

'program' awk 명령어 안에 awk 프로그램을 직접 기록한 경우

{variable=value}* 프로그램을 위한 변수 치환

{fileName}* 입력 줄을 표준 입력이 아닌 지정된 파일에서 받아들임

7.8 프로그램 가능한 텍스트 처리

Page 27: 7. 유틸리티( Utilities)

Unix 시스템 27

awk 'program': 다음의 형식으로 된 하나 이상의 명령어[ condition ] [ \{ action \} ]condition: BEGIN( 첫번째 줄을 읽기 전 ), END ( 모든 줄을 읽고 난 후 ), 논리 연산자 , 관계 연산자 , 정규식을 표함 하는 조건식 cf. 만일 condition 이 생략되면 모든 줄에 대하여 수행됨

action(C-like): if ( 조건 ) 문장 [else 문장 ]while ( 조건 ) 문장for ( 연산 ; 조건 ; 연산 ) 문장break continueprint printf " 형식 "next exit변수 = 연산식 {문장들의 리스트 }- action 들은 C 언어처럼 semicolon(;) 으로 구분함cf. 만일 action 이 생략되면 해당 줄은 표준 출력됨

7.8 프로그램 가능한 텍스트 처리

Page 28: 7. 유틸리티( Utilities)

Unix 시스템 28

입력 줄의 항목 접근- $1 ( 첫 번째 항목 ) $2( 두 번째 항목 ) ……- $0 ( 줄 전체 )- 내장 변수 NF ( 현재의 입력 줄의 항목 개수 ) $NF ( 마지막 항목 )- 내장 변수 NR ( 현재의 입력 줄의 줄 번호 )- 내장 변수 FILENAME ( 입력 화일 이름 )

BEGIN 과 END$ awk '{ print NF, $0 }' inputFile$ cat awk2

BEGIN { printf "start of file:", FILENAME } { print $1 $3 $NF } END { printf "End of file" } $ awk -f awk2 inputFile cf. print 나 printf 에서 컴마 (,) 가 없으면 연속 인쇄 , 있으면 공백 인쇄$ cat awk3 #2,3 번째 줄에 대하여 항목 인쇄

NR > 1 && NR < 4 { printf NR, $1, $3, $NF } $ awk -f awk3 inputFile

7.8 프로그램 가능한 텍스트 처리

Page 29: 7. 유틸리티( Utilities)

Unix 시스템 29

연산자$ cat awk3 #2,3 번째 줄에 대하여 항목 인쇄NR > 1 && NR < 4 print NR, $1, $3, $NF $ awk -f awk3 inputFile

사용자 정의 변수의 사용- 초기값 : null string 또는 정수 0$ cat awk4 # 줄을 표준출력에 보내고 줄과 단어 수를 셈

BEGIN { print "Scanning file" } { printf "line %d: %s \n", NR, $0;

lineCount++; wordCount += NF; } END { printf "line %d, words = %d\n", lineCount, wordCount}$ awk -f awk4 inputFile

7.8 프로그램 가능한 텍스트 처리

Page 30: 7. 유틸리티( Utilities)

Unix 시스템 30

제어구조 (C-like)$ cat awk5 [ 교재 p317] # 각 줄의 항목을 역순으로 출력

{ for ( i = NF ; i >= 1; i--) printf "%s", $i;printf "\n"; }

$ awk -f awk5 inputFile 줄 일치에 확장된 정규식 사용 [1-p709]

$ cat awk6 #t 와 e 사이에 1개 이상의 단일문자가 나오는 줄

/ t.*e/ { print $0 } 조건 범위 : 콤마 (,) 로 분리되는 두 개의 조건

- 처음 조건을 만족하는 줄부터 두 번째 조건을 만족하는 줄까지의 범위$ cat awk7 #strong 포함하는 줄부터 clear 포함하는

줄까지

/ strong/ , /clear/ { print $0 } 내장함수 이용 가능

- exp(), log(), sqrt(), int(): C-like- substr(str, x, y): x 번째 문자부터 y 번째 문자까지의 str 의 substring

7.8 프로그램 가능한 텍스트 처리

Page 31: 7. 유틸리티( Utilities)

Unix 시스템 31

7.9 하드 링크와 소프트 링크 : In

하드 링크 : 동일한 화일 시스템 내에서의 링크 여러개의 레이블 생성이 가능하나 , 물리적 화일은 동일함

하드 링크가 추가될 때마다 링크 계수 항목이 증가

소프트 링크 (심볼릭 링크 ) 다른 파일 시스템들 간의 링크

링크 계수 항목이 증가하지 않고 대신에 permission 에 l--- 식으로 기록됨

ls -F 로 참조할 때 화일 이름 뒤에 @ 가 표시됨

Page 32: 7. 유틸리티( Utilities)

Unix 시스템 32

ln -f -s origial newLink-f 슈퍼유저가 디렉토리에 하드 링크를 생성할 수 있게 함-s 소프트 링크로서 화일 시스템을 확장 가능

ln -f -s { origial }+ driectory

명시된 화일 (original) 들에 대한 링크 directory 상에 실행

( 예 ) $ ln hold.3 hold

$ ln hold.* tmpdir

$ ln -s /usr/include/stdio.h stdio.h

$ ls -l stdio.h

lrwxrwxrwx 1 mjkim 20 Jan 12 17:58 stdio.h -> /usr/include/stdio.h

$ ls -F stdio.h@

7.9 하드 링크와 소프트 링크 : In

Page 33: 7. 유틸리티( Utilities)

Unix 시스템 33

7.10 사용자 대치 : su

su [-] [ userName ] : 사용자 대치 (substitute user) default: root 새로운 shell prompt; # 사용자 대치의 종료 : ^D

7.11 전자 우편 검사 : biff

유닉스 셸은 수신되는 전자우편을 주기적 으로 점검함 . 따라서 전자우편을 수신한 시간과 유닉스 셸이 전자우편 도착을 알려 주는 시간에는 다소 차이가 있음

biff [ y | n ]y 전자우편 수신 즉시 통고하도록 설정함n 전자우편 수신 즉시 통고하지 않도록 함

아무 옵션 없이 사용하면 현재의 biff 상태를 나타내 줌

Page 34: 7. 유틸리티( Utilities)

Unix 시스템 34

7.12 화일 변환

compress/uncompress 파일을 압축하고 다시 해독 복귀시킨다 .

crypt 키 암호를 받아들여 파일을 암호화하거나 해독한다

sed 스트림 편집 , 하나 이상의 화일을 스캔하여 특정 조건에 맞는 모든 줄을 편집한

다 . 단순 반복 편집에 유용하다 tr

화일 내의 문자를 한 문자 집합에서 다른 문자 집합으로 변환 (transform) ul

밑줄 그은 문자가 명시된 터미날에 올바로 표시되도록 변환 (underline)

Page 35: 7. 유틸리티( Utilities)

Unix 시스템 35

7.12 화일 변환 compress -c -v { fileName }+

-v 압축되는 상황을 보여 줌-c 압축된 화일로 원래의 파일을 덮어쓰지 않고 표준 출력으로 내보냄

(default: 원래의 화일을 지우고 압축된 파일 (.z) 로 치환 ) uncompress -c -v { fileName }+

(예) $ compress -v palindrom.c reverse.c $ uncompress -v *.z

pack 과 compress 손실 (lossy)

• 사운드 , 이미지• JPEG, MPEG

무손실 (lossless)• 문서 , 데이터베이스 , 실행 파일• pack 과 compress

pack : Huffman compression(40%).z$ unpack *

compress : Lempel-Ziv compression(61%).Z$ uncompress *

압축파일 변경 않고 해제하여 표준출력$ pcat xx.z (pack 으로 압축된 경우 )$ zcat part1.doc.Z | wc (compress 로 압축된 경우 )

Page 36: 7. 유틸리티( Utilities)

Unix 시스템 36

7.12 화일 변환

crypt [ key ] < originalFile > cryptedFile

암호화

crypt [ key ] < cryptedFile > originalFile

해독화

key 가 명시되지않으면 대화식으로 물어 봄 ( 화면에 보이지는 않음 ) crypt key 의 형태로 명령을 주었을 때 ps 로 체크 됨에 주의

( 예 ) $ crypt agatha < sample.txt > sample.crypt

$ crypt agatha < sample.scrypt > sample.txt

Page 37: 7. 유틸리티( Utilities)

Unix 시스템 37

7.12 화일 변환

sed [ -e script ] [ -f scriptfile ] { fileName }*-f scriptFile sed 편집 명령을 파일로 저장수행-e script sed 편집 명령 지정 (script = 'sed 폅집 명령’ )addressRange s/expr/str 정규식 expr 이 첫번째 발생을 문자열 str 로 대치addressRange a/expr/str/g 모든 정규식 exp 을 문자열 str 로 대치address r name address 줄 뒤에 화일 name 의 내용 덧붙이기address i\ text address 줄 뒤에 텍스트 text 삽입addressRange d addressRange 로 지정된 줄을 삭제 addressRange c\ text

Page 38: 7. 유틸리티( Utilities)

Unix 시스템 38

7.12 화일 변환

addressRange c\ text addressRange 로 명시된 텍스트를 text 로 치환addressRange a\ text addressRange 로 명시된 텍스트 뒤에 text 를 첨가• 만일 주소가 명시되어있지 않으면 모든 줄에 대하여 적용(예) $ sed 's/^/ /' arms > arms.indent

→ 화일의 들여쓰기 실행 $ sed 's/^ *//' arms.indent → 각 줄 앞에 있는 공백 제거 $ sed '/a/d' arms

→ 정규식 'a' 를 포함하는 모든 줄을 삭제 $ sed '/\<a\>/d' arms

→ 단어 'a' 를 포함하는 모든 줄을 삭제 $ sed -e 's/^/<< /' -e 's/$/ >>/' arms → '<<' 를 줄의 맨 앞에 , '>>' 를 줄의 맨 뒤에 삽입함

Page 39: 7. 유틸리티( Utilities)

Unix 시스템 39

7.12 화일 변환

tr -c -d -s string1 string2string1 문자 ( 집합 ) 을 string2 문자 ( 집합 ) 으로 변환시킴-c string1 의 보어 (complement) 를 취함 . 즉 , 지정된 문자 이외의 문자들-d string1 에 있는 문자들을 표준 출력에서 제거-s 반복 출력되는 문자를 한 번만 출력 하도록 함(C shell tr 예) $ tr ‘[a-z]’ ‘[A-Z]’ < inputFile

→ 모든 소문자를 대문자로 변환 $ tr ‘[a-c]’ ‘[A-C]’ < inputFile

→ 소문자 a, b, c 를 대문자 A, B, C 로 변환 $ tr -c a ‘[X*]’ < inputFile (?)

→ 소문자 a 가 아닌 모든 문자를 X 로 치환 $ tr -c ‘[a-z]’ ‘[\n*]’ < inputFile (?)

→ 소문자 a 부터 z 가 아닌 모든 문자를 아스키값 (012)8(new line)로 치환 $ tr -d ‘[a-c]’ < inputFile

→ 소문자 a 부터 c까지를 제거

Page 40: 7. 유틸리티( Utilities)

Unix 시스템 40

7.12 화일 변환

(Bourne shell tr 예 )

$ tr [a-z] [A-Z] < inputFile

→ 모든 소문자를 대문자로 변환 $ tr [a-c] [A-C] < inputFile

→ 소문자 a, b, c 를 대문자 A, B, C 로 변환 $ tr -c a [X*] < inputFile (?)

→ 소문자 a 가 아닌 모든 문자를 X 로 치환 $ tr -c [a-z] [‘\012’*] (또는 ‘ [\n*]’) < inputFile (?)

→ 소문자 a 부터 z 가 아닌 모든 문자를 아스키값 (012)8(new line) 로 치환 $ tr -d [a-c] < inputFile

→ 소문자 a 부터 c까지를 제거

Page 41: 7. 유틸리티( Utilities)

Unix 시스템 41

7.12 화일 변환

ul -tterminal { fileName }*-tterminal 터미날 유형 (/etc/termcap 참조 )

만일 명시되어있지 않으면 $TERM 의 값을 참조(예) $ man who | ul -tdumb > man.txt

→ 'who' 에 관한 매뉴얼을 단순 (dumb) 프린터 출력용으로 밑줄을 변환함

Page 42: 7. 유틸리티( Utilities)

Unix 시스템 42

od -abcdfhios[n]x fileName [offset [.][b]]-a 바이트를 문자로 해석하고 , 아스키로

프린트 ( 예 : 0 = null)-b 바이트를 부호없는 8진수로 해석-c 바이트를 문자로 해석하고 , C 표기로 프린트 ( 예 : 0 = \0)-d 2 바이트 쌍을 부호없는 10진수로 해석-f 4 바이트 쌍을 부동소숫점수로 해석-h 2 바이트 쌍을 부호없는 16진수로 해석-i 2 바이트 쌍을 부호있는 10진수로 해석-l 4 바이트 쌍을 부호있는 10진수로 해석-o 2 바이트 쌍을 부호없는 8진수로 해석-s 2 바이트 word(16bits) 를 signed decimal 로 해석 , -t d2 와 같음 -S 4 바이트 long word(32 bits) 를 signed decomal 로 해석 , -t d4 와 같음-t 출력 타입 (acfdoux) 을 지정-x 2 바이트 쌍을 16진수로 해석offset 리스팅이 시작되는 위치 지정 . 만일 b 로 지정되면 블록 (512 바이트 ) 수로 해석되고 , 다른 경우는 8진수 (octal) 로

해석됨 , 뒤에 .(점 ) 있으면 십진수로 해석( 예 ) $ od -c /bin/od 1000

→ 화일 /bin/od 를 1000 번지부터 C 표기 방법으로 보여줌 $ od /dev/rfd0 +1024.

→ 플로피 디스크에 저장된 정보를 십진수로 1024 바이트 지나서부터 덤프

7.13 순수 화일 내용 보기 : od (octal dump)

Page 43: 7. 유틸리티( Utilities)

Unix 시스템 43

7.14 화일 시스템 마운트 mount -ooptions [ deviceName directory ]

-ooptions 유효한 코드 (rw: 읽기쓰기 , ro: 읽기 전용 ) umount deviceName

(disk 예 ) % mount

% mount /dev/dsk/c0t3d0s5 /opt % umount /opt (또는 /dev/dsk/c0t3d0s5)

(floppy disk 예 ) % volcheck

% mount ( 현재 마운트된 장치들 목록 , /etc/mnttab 참조 ) % umount /floppy/볼륨이름 % mount -F pcfs /vol/dev/diskette0/볼륨이름 /floppy/볼륨이름 % df -k ( 마운트된 파일 시스템의 free disk 를 byte 단위로 보고 ) % cat /etc/mnttab ( 마운트된 파일 시스템 목록 ) % cat /etc/vfstab ( 다중 사용자 부팅시 자동 설치될 파일 시스템 목록 )

Page 44: 7. 유틸리티( Utilities)

Unix 시스템 44

7.14 화일 시스템 마운트

Solaris File System 의 Raw and Block Partition /dev/rdsk/ : 문자 단위 / dev/dsk/ : 블록 단위

Solaris 2.x 의 파일 시스템 타입 디스크 기반 파일 시스템 타입

• vfs : Virtual File System• ufs : Unix File System• hsfs : High Sierra File System(standard CD ROM File System)• pcfs : DOS File System Mountable on Unix

네트워크 기반 파일 시스템• nfs : Network File System

RAM 기반 파일 시스템• procfs : /proc File System• cachefs : Cache File system• specfs : Special File System• swapfs : Swap File System• tmpfs : /tmp File System• fdfs : File Descriptor File Systems• lofs : Loopback File System• fifofs : First-In-First-Out File System• namefs : UNIX STREMS(terminal interface) 가 file descriptors 의 동적인

마운트를 위해 사용하는 파일 시스템

Page 45: 7. 유틸리티( Utilities)

Unix 시스템 45

7.15 셸 확인

whoami

7.16 터미널 확인 : tty

tty

7.17 텍스트 포맷팅 nroff troff style spell

Page 46: 7. 유틸리티( Utilities)

Unix 시스템 46

과제… 11 월 15 일까지

교재 p338

연습문제 2. time 명령 참조연습문제 4. ‘core’라는 이름의 file 삭제연습문제 5.

교재 p190 연구문제 1: 완벽한 버전

과제 제출 방법 Electrical Version : multi.inchon.ac.kr (211.119.245.61) 의

~mysung/2000report/ 에 자신의 학번으로 디렉토리 만들고 그 안에 복사

Paper Version : 종이에 소스와 실행 과정 및 결과 출력하여 제출