Presentation is loading. Please wait.

Presentation is loading. Please wait.

작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.

Similar presentations


Presentation on theme: "작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자."— Presentation transcript:

1 작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.
7. 유틸리티(Utilities) (유닉스 철학 하나) 작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자. $ which which

2 소개 구분 Utilities 구분 Utilities grep, fgrep, egrep uniq (3장 참조)
compress, crypt, sed, uncompress, tr 화일 여과 화일 변환 화일 정렬 sort 전자우편 검사 biff 화일 비교 cmp, diff 순수화일 내용보기 od 화일 보관 tar, cpio, dump 화일시스템 마운팅 mount, umount su 화일 보관 find 사용자 대치 whoami 명령어 스케줄 at, cron, crontab 셀 확인 텍스트 처리 awk (3장 참조) 문서 준비 nroff,spell,style,troff 하드 및 소프트링크 ln Unix/Linux

3 파일 여과 패턴여과 : egrep/fgrep/grep 명시된 패턴(pattern)이 없는 줄만을 여과
그레이브 악센트 부호(`)로 둘러싸인 명령어는 표준 출력으로 대치 $ echo there are `who | wc -l` users on the system $ vi `grep -l debug *.c` # debug 패턴을 포함하며 .c로 끝나는 모든 화일들을 vi 편집 화일 여과 utility [교재 p293 참조] : 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 Unix/Linux

4 정규 표현식 정규식의 예 [교재 p296, p780 참조] (주의1) 반드시 단일 따옴표 안에 ! (주의2) *, +, ? 은 이전 문자에 적용됨 grep, egrep 정규 표현식 : . [] * ^ $ \ (예) .nd ^.nd sw.*ng [A-D] \. a. a.$ im*ing egrep 확장 정규 표현식 : + ? | () (예) s.*w s.+w off|will im*ing im?ing 정규 표현식: grep 특수문자 . 임의의 단일 문자 [ ] 괄호안의 단일 문자 중 어느 것과 일치 * 문자 다음에 나타남, 바로 앞의 문자가 0번 h는 그 이상 발생 ^ 줄의 시작, [ ] 안에서는 제외(except) 의미 $ 줄의 끝 \(백슬래시) 메타 문자 앞에 위치, 메타 문자의 특수 의미 제거 확장 정규 표현식: egrep + 단일문자가 1번 이상 발생 ? 단일 문자가 0번 혹은 1번 발생 |(파이프 기호) “or” 연산자 역할 ( ) *, +, ? 메타문자가 괄호 안의 전체 표현식에 대해 동작 Unix/Linux

5 파일 여과 반복 줄 제거 : uniq (예)$ uniq animals [p297 참조] 인접한, 반복줄을 여과
uniq -c -number [ inputfile [outputfile] ] -c (해당 줄이 반복된 횟수를 보여줌) -number (number번째 항목을 무시하고 패턴 탐색) (예)$ uniq animals [p297 참조] (예)$ uniq -c animals (예)$ uniq -1 animals Unix/Linux

6 화일 정렬 : SORT sort [ -tc -r ] {sortField -b -f -M -n}* {fileName}*
(default: 이 옵션이 생략되어있으면, blank 나 tab으로 구분한다) -r 내림차순으로 정렬 (default: ASCII 표에 의한 오름차순) -b 줄의 앞부분에 있는 공백을 무시 (default: blank도 정렬시 비교대상임) -f 대소문자를 무시하고 정렬 -M 월(month)순으로 정렬 (단, $ LANG=en_US) -n 숫자의 크기 순으로 정렬 sortField 특정항목을 기준으로 정렬하도록 지정 (다수 항목 지정 가능) “+number1 -number2"의 형태 number1은 시작 항목 번호를, number2는 정지 항목번호를 나타냄 시작 항목 번호는 0부터 시작 (즉, -0 은 첫 번째 항목을 가리킴) 정지 항목 번호는 정렬 대상 에서 제외되며 생략시 모든 항목이 포함 Unix/Linux

7 화일 정렬 : SORT 필드 안의 글자 지정 sort의 다수 항목 지정하는 두 가지 방법
(예) $ sort -r sortfile → 역순으로 정렬 $ sort sortfile [교재 p293] → 첫 번째 항목만을 기준으로 정렬 $ sort +0b -1 sortfile → 첫 번째 항목만을 기준으로 정렬하되, 줄의 앞부분에 나오는 공백을 무시하여 첫 번째 항목을 잡는다. $ LANG=en_US $ sort +0bM n sortfile → 공백을 무시하면서 첫 번째 항목을 기준으로 월별로 정렬한 후, 그 후에 다섯 번째 항목이하를 숫자 크기로 추가로 정렬 $ sort -t: +0bM n sortfile2 → 항목 구분을 ':'로 한다. 공백을 무시하여 첫 번째 항목을 월별로 정렬한 후, 세 번째 항목 이하를 숫자 크기로 추가 정렬 필드 안의 글자 지정 % sort +0.0b –0.1b sortfile → 공백을 무시하면서 첫 번째 항목의 첫 번째 글자로 정렬 sort의 다수 항목 지정하는 두 가지 방법 % sort +0bM n sortfile % sort -k 1,1bM -k 5,5n sortfile (-k field_start[type][,field_end[type], field는 1부터 시작, type은 bdfiMnr ) Unix/Linux

8 파일 비교 cmp diff 두 화일의 동일성을 검사하여, 차이가 생기는 첫 번째 바이트를 보여 줌
두 화일을 비교하여 한 파일을 다른 화일로 전환하는 편집 변경을 행할 때에 필요한 동작 목록을 보여 줌 (3종류의 편집변경이 제공됨) Unix/Linux

9 화일 비교 cmp [-l -s] fileName1 fileName2 [offset1 offset2]
내용이 동일하면, 종료값은 0으로서, 출력으로는 아무 것도 보여주지 않음 다르면, 종료값은 1으로서, 출력으로는 일치하지않은 첫 번째 바이트의 옵셋 (offset: 문자의 순서값)과 위치한 줄 번호을 보여줌 만일 어느 한쪽 화일이 짧으면, 짧은쪽 화일 이름 앞에 EOF 메시지를 붙임 -l 일치하지않는 모든 바이트들에 대한 옵션과 각각의 문자값을 보여줌 -s 모든 출력을 금지한다(sillent) offset fileName1의 비교 시작 위치에 대한 옵셋 offset fileName2의 비교 시작 위치에 대한 옵셋 (예) $ cmp lady1 lady2 $ cmp lady2 lady3 $ cmp -l lady1 lady2 Unix/Linux

10 화일 비교 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 lady → 3c3 $ diff lady2 lasy → 3a4,6 $ diff lady3 lady → 2,4d1 $ diff -Dflag lady3 lady4 → #ifndef flag …… #endif flag를 이용하여 전처리기 대상 생성 Unix/Linux

11 화일 보관 화일을 보관하는 이유 ① backup(정기적, 보관용) ② 네트워크 연결이 안된 컴퓨터로의 데이터 전송
cpio : 화일 복사용. 오직 하나의 backup volume으로 저장. 소규모 백업에 적당 tar : tape에 화일을 보관함. 추가 저장시 항상 뒷 부분에 저장됨. 오직 하나의 backup volume으로 저장. 소규모 백업에 적당 ufsdump/ufsrestore : 시스템 관리자가 전체 시스템을 백업하고 추출 하는데 사용. 개개의 화일을 다루는 데는 불편 하지만, 정기적 시스템 백업에 유용 (cf.) dd : 가장 낮은 레벨 data copy, 파일 변환 가능, 다른 OS 사이의 이동 Unix/Linux

12 화일 보관 cpio -ov > backupFile cpio -idtu patterns < backupFile
의 목록을 받아 복사(output) -v 화일을 복사하는 동안 각 화일의 이름을 보여 줌(verbose) cpio -idtu patterns < backupFile -i 표준 입력으로부터 cpio형식 파일(이전에 cpio로 저장된 화일)을 읽어서, 명시된 pattern에 일치하는 화일들 모두를 재생 (input) -d 필요하다면 디렉토리를 생성 -t 복사 대신 목차를 보여 줌 -u 무조건 복사 cpio -pl directory -p 표준 입력으로부터 복사(백업)할 화일명 목록을 받아서 이를 명명된 directory로 복사 (하나의 서브디렉토리 복사시 cp -r 명령이 더 간단) -l 물리적 복사 대신에 링크(link)를 만듦 결국 디스크 사용이 전혀 없음 (반드시 p와 함께 -pl) Unix/Linux

13 화일 보관 (cpio) (예) $ ls *.c | cpio –ov > backup $ rm *.c
$ cpio –iv < backup $ find . –depth –name \*.c –print | cpio -ov > backup [또는 –name ‘*.c’ ] → 패턴 *.c인 모든 화일들을 서브디렉토리를 포함 하여 백업 $ mkdir tmp; cd tmp cpio –id < ../backup2 $ rm –r * ; cd .. $ find . -mtime print | cpio -p ./tmp ; $ ls –liR tmp → 현재의 디렉토리에 있는 화일들 중에서 지난 2일 동안 수정된 모든 화일들을 tmp 디렉토리에 복사 $ rm –r ./tmp/* $ find . -mtime print | cpio -pd ./tmp ; $ ls –liR tmp → 서브 디렉토리 생성 $ find . -mtime print | cpio –pld ./tmp ; $ ls –liR tmp → 현재의 디렉토리에 있는 화일들 중에서 지난 2일 동안 수정된 화일들을 tmp 디렉토리에 링크함 Unix/Linux

14 화일 보관 (tar) tar -cvf tarFileName fileList
-c fileList에 대한 tar형식의 백업 화일을 생성(create) -v 진행되는 상황을 설명(verbose) -f tar형식의 백업 화일 이름을 지정 (default: /dev/rmt/0 … tape drive) tar -txru tarFileName [ fileList ] -t tar형식의 백업 화일 안에 어떤 것들이 들어 있는지 목차만 보임 (title) -x 백업 화일로부터 화일을 추출 복귀(extract) -r fileList를 기존의 백업 화일 뒤에 무조건 덧붙임(rear) -u 기존의 백업 화일에 이미 포함되어 있는 fileList 중 수정된 화일들만을 백업 화일의 뒤에 덧붙임. 디렉토리가 있어도 recursive하게 적용 Unix/Linux

15 화일 보관 (tar) (예) $ tar -cvf tarfile . $ tar -tvf tarfile
$ tar -rvf tarfile 1.c $ touch 1.c $ tar -uvf tarfile 1.c $ mkdir ./tmp ; $ cd tmp $ tar -xvf ../tarfile $ rm -r * $ tar -xvf ../tarfile ./1.c $ tar -xvf ../tarfile `tar -tf ../tarfile | grep '.*\.c'` → C 프로그램 화일들만 추출 파일 이름에 – 나오면 표준 출력 또는 표준 입력 $ tar cvf | (cd tmp; tar xvf -) Unix/Linux

16 화일 보관 (ufsdump & ufsrestore)
(Unix) /usr/sbin/ufsdump & /usr/sbin/ufsrestore) (Linux) /sbin/dump & /sbin/restore ufsdump [level] [f dumpFile] [v] [w] fileSystem level 덤프의 수준을 지정. 명시된 level 보다 낮거나 같은 level에서 최근에 덤프한 이후에 수정된 모든 화일들만을 덤프시킴 (default 값: 9) 만일 level을 0으로 하면, 항상 모든 파일들을 덤프하게 됨 f 덤프될 화일(dumpFile)을 지정 (defautl: /dev/rmt8) v 화일을 덤프하는 동안 각 화일의 이름을 보여 줌(verbose) w 백업을 수행하는 대신, 덤프될 모든 화일의 목록을 보여준다 ufsdump [level] [f dumpFile] [v] [w] {fileName }+ 지정된 화일들만 덤프 (예) $ /usr/sbin/ufsdump 0fv /dev/rmt/0 / (Linux) $ /sbin/dump -0f /dev/st0 / → root(/) partition 화일 시스템을 테이프 드라이버 /dev/rmt/0로 level 0 덤프 수행 $ /usr/sbin/ufsdump 0fv backup . (Linux) $ /sbin/dump 0f backup . → 현재 디렉토리의 모든 파일을 ./backup로 level 0 덤프 수행 백업 레벨 : 0 ~ 9 Sat Sun Mon Tue Wed Thu Fri (3) Unix/Linux

17 화일 보관 (ufsdump & ufsrestore)
ufsrestore -irtx [ f dumpFile ] { fileName }+ -i 대화형 복구. 사용자에게 복구할지 말지를 목록을 보여주면서 진행한다. -r dumpFile에 있는 모든 화일을 현재의 디렉토리로 복구 -t 복구는 하지 않고 그 대신에 dumpFile 내용의 목록들만을 보여준다 -x 복구(extract) (예)$ /usr/sbin/ufsrestore xf /dev/rmt0 wine.c hacking.c $ /usr/sbin/ufsrestore xf ../backup  volume #: 1 (디스크 볼륨 개수) yes or no (Linux) $ /sbin/restore xf ../backup $ /usr/sbin/ufsrestore tf ../backup $ /usr/sbin/ufsrestore rf ../backup $ /usr/sbin/ufsdump 0fv – . | (cd tmp; ufsrestore xf –) (Linux) $ /sbin/dump 0fv – . | (cd tmp; /sbin/restore xf –) Unix/Linux

18 화일 탐색 find 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 형식(5120 byte records)으로 device에 쓰고 참 값 반환 !expression expression의 논리 부정 \( expr1 [–a] expr2 \) 두 expression의 and \( expr1 [–o] expr2 \) 두 expression의 or Unix/Linux

19 화일 탐색 find (예) $ find . –name '*.c' –print
프로그램을 찾아 그 화일명들을 프린트 $ find . –mtime 14 –ls → 지난 14일 동안 수정된 화일들을 표시 (+ more than, = exactly, - less than) $ find . –name '*.bak‘ –ls –exec rm {} \; → '.bak'으로 끝나는 화일들의 속성을 표시한 후에 제거함 $ find . \( –name '*.o' -o -name '*.txt' \) –print → '.o'로 끝나거나 '*.txt'로 끝나는 화일들의 이름을 프린트함 $ find / –perm –4755 –ls $ find / –perm –4700 –ls Unix/Linux

20 명령 스케쥴링 crontab at cron에 의하여 일련의 작업이 주기적으로 실행되도록 함
cron은 단일 프로세스로서 시스템 시작부터 종료까지 동작하는데, (Unix) /var/spool/cron/crontabs (Linux) /var/spool/cron/ 디렉토리에 복사 등록된 crontab 화일들을 수행함 at 지정된 시간에 작업이 실행되도록 함 Unix/Linux

21 명령 스케쥴링 crontab crontab crontabName crontab -l -e -r [ userName ]
cron (daemon) 시스템에 의하여 사용되는 crontabName의 crontab 파일을 등록 crontabName 없으면 표준 입력으로 입력하고 CONTROL-D crontab -l -e -r [ userName ] -l 등록된 crontab 화일의 내용을 보여준다 (list) -e 등록된 crontab 화일의 내용을 편집한다 (edit) -r 등록된 crontab 화일을 등록해제한다 (remove) userName 사용자만 자신의 crontab 화일을 소유하도록 함 /var/cron/log 파일에 cron daemon이 처리한 내용 기록 Unix/Linux

22 명령 스케쥴링 crontab 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를 통하여 전송 % 다음의 문자는 임시 화일에 복사되고, 명령의 표준 입력으로 사용됨 (예) $ tty /dev/pts/? $ crontab * * * * * echo one minute passed > /dev/pts/? ^D $ crontab –e $ crontab –r Unix/Linux

23 명령 스케쥴링 crontab (예) $ cat crontab.cron
* * echo Happy Monday Morning > /dev/pts/? * * * * * echo One Minute Passed > /dev/pts/? * mail mysung < meeting → 월요일 아침 8시에 전자 우편을 발송 매분마다 pts(pseudo tty slave) 터미날 /dev/pts/?에 에코함 1월 1일 오후 2:30에 모든 사용자에게 임박한 회의를 상기시킴 $ crontab crontab.cron $ crontab -l $ crontab -l mysung → 사용자별로 확인하는 것은 슈퍼유저만 사용 가능 (Unix) /var/spool/cron/crontabs (Linux) /var/spool/cron/에 사용자 이름으로 crontab 생성 Unix/Linux

24 명령 스케쥴링 at 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 ] Unix/Linux

25 명령 스케쥴링 at (Unix) at -r { jobId }+ 명시된 작업을 at 큐로부터 제거
(Linux) atrm JobID at -l { jobId }* 뒤따르는 작업들의 목록을 보여 줌 (예) $ at now +1 minutes < at.sh $ at -l $ at 17:35 < at.sh $ at 0248pm Nov 15 < at.sh $ at 14:15 Nov 16, < at.sh $ at 11:00pm tomorrow < at.sh $ at 9am Nov 17 < at.sh $ at 10pm Wed < at.sh Unix/Linux

26 명령 스케쥴링 at (예) $ at 9am at> 명령어 입력 at> ^D $ tty /dev/pts/?
$ cat at.sh date > /dev/pts/? (자신의 가상 터미널로) # Reschedule Script at now +1 minutes < at.sh Unix/Linux

27 프로그램 가능한 텍스트 처리 awk 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}* 입력 줄을 표준 입력이 아닌 지정된 파일에서 받아들임 Unix/Linux

28 프로그램 가능한 텍스트 처리 awk awk 'program': 다음의 형식으로 된 하나 이상의 명령어
[ condition ] [ \{ action \} ] condition: BEGIN(첫번째 줄을 읽기 전), END (모든 줄을 읽고 난 후), 논리 연산자, 관계 연산자, 정규식을 포함하는 조건식 cf. 만일 condition이 생략되면 모든 줄에 대하여 수행됨 action(C-like): if ( 조건 ) 문장 [else 문장] while ( 조건 ) 문장 for ( 연산; 조건; 연산 ) 문장 break continue print printf "형식" next exit 변수 = 연산식 {문장들의 리스트 } action들은 C 언어처럼 semicolon(;)으로 구분함 (cf.) 만일 action이 생략되면 해당 줄은 표준 출력됨 Unix/Linux

29 프로그램 가능한 텍스트 처리 awk 입력 줄의 항목 접근 BEGIN과 END
- $1 (첫 번째 항목) $2(두 번째 항목) …… - $0 (줄 전체) - 내장 변수 NF (현재의 입력 줄의 항목 개수) $NF (마지막 항목) - 내장 변수 NR (현재의 입력 줄의 줄 번호) - 내장 변수 FILENAME (입력 화일 이름) BEGIN과 END $ awk '{ print NF, $0 }‘ float $ cat awk2 BEGIN { printf "start of file:", FILENAME } { print $1 $3 $NF } END { printf "End of file" } $ awk -f awk2 float cf. print나 printf에서 컴마(,)가 없으면 연속 인쇄, 있으면 공백 인쇄 $ cat awk3 #2,3번째 줄에 대하여 항목 인쇄 NR > 1 && NR < 4 { printf NR, $1, $3, $NF } Unix/Linux

30 프로그램 가능한 텍스트 처리 awk 연산자 사용자 정의 변수의 사용 - 초기값: null string 또는 정수 0
$ cat awk3 #2,3번째 줄에 대하여 항목 인쇄 NR > 1 && NR < 4 print NR, $1, $3, $NF $ awk -f awk3 float 사용자 정의 변수의 사용 - 초기값: null string 또는 정수 0 $ cat awk #줄을 표준출력에 보내고 줄과 단어 수를 셈 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 float -F 옵션을 사용하여 구분자 지정 $ awk -F: -f awk4 float2 Unix/Linux

31 프로그램 가능한 텍스트 처리 awk 내장함수 이용 가능 제어구조(C-like) 조건 범위: 콤마(,)로 분리되는 두 개의 조건
$ cat awk5 [교재 p317] #각 줄의 항목을 역순으로 출력 { for ( i = NF ; i >= 1; i--) printf "%s", $i; printf "\n"; } 줄 일치에 확장된 정규식 사용 [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 $ awk -f awk8 test Unix/Linux

32 하드 링크와 소프트 링크: ln 하드 링크 : 소프트 링크(심볼릭 링크)
동일한 화일 시스템 내에서의 링크 여러개의 레이블 생성이 가능하나, 물리적 화일은 동일함 하드 링크가 추가될 때마다 링크 계수 항목이 증가 소프트 링크(심볼릭 링크) 다른 파일 시스템들 간의 링크 링크 계수 항목이 증가하지 않고 대신에 permission에 l--- 식으로 기록됨 ls -F 로 참조할 때 화일 이름 표시됨 Unix/Linux

33 하드 링크와 소프트 링크: ln ln -f -s original newLink
ln -f -s { original }+ directory 명시된 화일(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  Unix/Linux

34 사용자 대치 : su 전자 우편 검사 : biff & from
su [-] [ userName ] : 사용자 대치(substitute user) default: root 새로운 shell prompt; # 사용자 대치의 종료: ^D 전자 우편 검사 : biff & from Linux에서는 사라짐 $ /usr/ucb/biff [ y | n ] (Heidi Stettner와 Biff, 1980, UC Berkeley) 유닉스 셸은 수신되는 전자우편을 주기적으로 점검함. 따라서 전자우편을 수신한 시간과 유닉스 셸이 전자우편 도착을 알려 주는 시간에는 다소 차이가 있음 y 전자우편 수신 즉시 통고하도록 설정함 n 전자우편 수신 즉시 통고하지 않도록 함 아무 옵션 없이 사용하면 현재의 biff 상태를 나타내 줌 $ /usr/ucb/from display the sender and date of newly-arrived mail messages Unix/Linux

35 화일 변환 compress/uncompress crypt sed tr
파일을 압축하고 다시 해독 복귀시킨다. crypt 키 암호를 받아들여 파일을 암호화하거나 해독한다 sed 스트림 편집, 하나 이상의 화일을 스캔하여 특정 조건에 맞는 모든 줄을 편집한다. 단순 반복 편집에 유용하다 tr 화일 내의 문자를 한 문자 집합에서 다른 문자 집합으로 변환 (transform) Unix/Linux

36 화일 변환 compress & pack (Unix only)
compress –c –v { fileName }+ –v 압축되는 상황을 보여 줌 –c 압축된 화일로 원래의 파일을 덮어쓰지 않고 표준 출력으로 내보냄 (default: 원래의 화일을 지우고 압축된 파일 (.z)로 치환) uncompress –c –v { fileName }+ (예) $ compress –v junk track $ uncompress –v *.Z pack과 compress 손실(lossy) 사운드, 이미지 JPEG, MPEG 무손실(lossless) 문서, 데이터베이스, 실행 파일 pack 과 compress pack : Huffman compression(40%) .z $ pack * $ unpack * compress : Lempel-Ziv compression(61%) .Z $ uncompress * 압축파일 변경 않고 해제하여 표준출력 $ pcat junk.z (pack으로 압축된 경우) $ zcat part1.doc.Z | wc (compress로 압축된 경우) Unix/Linux

37 화일 변환 zip & gzip (Unix & Linux)
zip –r –v { fileName }+ –v 압축되는 상황을 보여 줌 –r 디렉토리일 경우 재귀적으로(recursively) –n 디렉토리 내의 지정된 확장자를 가진 파일을 제외하고 압축 –x 디렉토리 내의 지정된 파일 을 제외하고 압축 unzip –p –v { fileName }+ –d 지정된 디렉토리에 추출 –c 추출한 파일을 파이프로 출력 (stdout) (예) $ zip –v foo.zip * $ zip –rv foo.zip foo $ unzip foo.zip [ –d tmp ] gzip –r –v { fileName }+ –v 압축되는 상황을 보여 줌 –r 디렉토리일 경우 재귀적으로(recursively) –c 압축된 화일로 원래의 파일을 덮어쓰지 않고 표준 출력으로 내보냄 gunzip –c –v { fileName }+ (예) $ gzip –rv [ -S .gz ] shellprog $ gunzip –rv [ -S .gz ] shellprog Unix/Linux

38 화일 변환 crypt (Unix Only) crypt [ key ] < originalFile > cryptedFile  암호화 crypt [ key ] < cryptedFile > originalFile  해독화 key가 명시되지않으면 대화식으로 물어 봄(화면에 보이지는 않음) crypt key의 형태로 명령을 주었을 때 ps로 체크됨에 주의 (예) $ crypt agatha < sample.txt > sample.crypt $ crypt agatha < sample.scrypt > sample.txt Unix/Linux

39 화일 변환 sed 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 Unix/Linux

40 화일 변환 sed addressRange로 명시된 텍스트를 text로 치환
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 → '<<'를 줄의 맨 앞에, '>>'를 줄의 맨 뒤에 삽입함 Unix/Linux

41 화일 변환 tr tr -c -d -s string1 string2
-c string1의 보어(complement)를 취함. 즉, 지정된 문자 이외의 문자들 -d string1에 있는 문자들을 표준 출력에서 제거 -s 반복 출력되는 문자를 한 번만 출력 하도록 함 (Bourne shell tr 예) $ tr [a-z] [A-Z] < go.cart → 모든 소문자를 대문자로 변환 $ tr [a-c] [A-C] < go.cart → 소문자 a, b, c를 대문자 A, B, C 로 변환 $ tr -c a [X*] < go.cart → 소문자 a가 아닌 모든 문자를 X로 치환 $ tr -c [a-z] [‘\012’*] (또는 [‘\n’*]) < go.cart → 소문자 a부터 z가 아닌 모든 문자를 아스키값 (012)8(new line)로 치환 $ tr -d [a-c] < go.cart → 소문자 a부터 c까지를 제거 Unix/Linux

42 순수 화일 내용 보기 od(octal dump)
od -abcdfhios[n]x fileName [offset [.][b]] -A 바이트를 문자로 해석하고, 아스키로 프린트 (예: 0 = null) -b 바이트를 부호없는 8진수로 해석 -c 바이트를 문자로 해석하고, C 표기로 프린트 (예: 0 = \0) -d 2바이트 쌍을 부호없는 10진수로 해석 -f 4바이트 쌍을 부동소숫점수로 해석 -o 2바이트 쌍을 부호없는 8진수로 해석 -s 2 바이트 word(16bits)를 signed decimal로 해석, -t d2와 같음 -S 4 바이트 long word(32 bits)를 signed decomal로 해석, -t d4와 같음 -t 출력 타입(acfdoux)을 지정 (a, f, d, o, u, x) -x 2바이트 쌍을 16진수로 해석 offset 리스팅이 시작되는 위치 지정 만일 b로 지정되면 블록(512바이트) 수로 해석되고, 다른 경우는 8진수(octal)로 해석됨, 뒤에 .(점) 있으면 십진수로 해석 (예) $ od /bin/od [Linux] /usr/bin/od → 화일 /bin/od를 8진수로 덤프 $ od -c /bin/od 1000 → 화일 /bin/od를 1000번지부터 바이트 단위의 C (문자) 표기 방법으로 보여줌 Unix/Linux

43 화일 시스템 마운트 (Unix) mount -ooptions [ deviceName directory ]
-ooptions 유효한 코드 (rw: 읽기쓰기, ro: 읽기 전용) umount deviceName (disk 예) $ mount (또는 $ /sbin/mount) $ mount /dev/dsk/c0t3d0s5 /opt $ umount /opt (또는 /dev/dsk/c0t3d0s5) (floppy disk 예) $ volcheck -v (floppy 매체 조사하여 장치가 발견되었는지 알려주고 볼륨이름 파일 생성) $ mount (현재 마운트된 장치들 목록, /etc/mnttab 참조) $ umount /floppy/볼륨이름 $ mount -F pcfs /vol/dev/diskette0/볼륨이름 /floppy/볼륨이름 (원하는 마운트 포인트) $ mount -F ufs /vol/dev/diskette0/볼륨이름 /floppy/볼륨이름 (원하는 마운트 포인트) $ mount -F nfs mysung:/share /mnt (원하는 마운트 포인트) $ df -k (마운트된 파일 시스템의 free disk를 byte 단위로 보고) $ cat /etc/mnttab (마운트된 파일 시스템 목록) [Linux] /etc/mtab $ cat /etc/vfstab (다중 사용자 부팅시 자동 설치될 파일 시스템 목록) [Linux] /etc/fstab Unix/Linux

44 화일 시스템 마운트 (Linux) Fedora Core 5 device mount (cdrom 예)
# mkdir /media/cdrom # mount /dev/cdrom –r /media/cdrom ( # mount –t iso9660 /dev/cdrom –r /media/cdrom ) # mount (마운트된 위치 확인) # umount /dev/cdrom (usb 예) # mount # mkdir /media/disk # mount /dev/sdb1 /media/disk ( # mount -t vfat /dev/sdb1 /media/disk ) # umount /dev/sdb1 (disk 예) # mkdir /media/floppy # mount /dev/fd0 /media/flopp ( # mount -t ntfs /dev/fd0 /media/flopp ) # umount /dev/fd0 Unix/Linux

45 화일 시스템 마운트 volume management daemon(/usr/sbin/vold)이 작동 중일 때
/usr/sbin/volcheck를 사용하여 마운트 디스켓을 삽입한 후 $ volcheck 명령을 사용하여 마운트 마운트가 되면 /에 floppy라는 디렉토리가 생기며 그 하위의 floppy0라는 디렉토리로 디스켓에 접근 가능 /usr/sbin/vold는 /vol에 플로피, CD-ROM 등 이동 매체들의 의미적 이름(symbolic name)의 드라이버 파일을 생성 $ volcheck 실행하면 /vol/dev/diskette0/에 ‘볼륨이름’ 파일 생성 디스켓에는 /vol/dev/diskette0/‘볼륨이름(noname)’으로 접근 (예) mount -F pcfs /vol/dev/diskette0/noname /mnt (Linux) mount -t iso9660 /dev/cdrom /mnt/cdrom 수동으로 마운트 하기 $ /etc/init.d/volmgt stop 명령으로 volume management를 정지시키고 $ mount -F pcfs /dev/fd0 /mnt 명령으로 마운트 시킨후 /mnt 디렉토리에서 디스켓에 접근 가능 (cf.) $ /etc/init.d/volmgt start … 이 때 /vol 사용 중이면 에러 발생 volume management가 작동하지 않을 때 $ mount -F pcfs /dev/fd0 /mnt 명령으로 마운트 시킨 후 /mnt 디렉토리에서 디스켓에 접근 가능 Unix/Linux

46 화일 시스템 마운트 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의 동적인 마운트를 위해 사용하는 파일 시스템 Unix/Linux

47 셸 확인 터미널 확인 : tty 텍스트 포맷팅 whoami tty nroff, troff spell
텍스트 포맷팅을 위한 일종의 마크업 언어 WYSIWYG (What You See Is What You Get) 편집기로 대치됨 spell 철자법 오류를 알려 줌 Unix/Linux

48 과제 4… 11월 15일(월) 11:59pm까지 중간고사 정답 풀이 과제 제출 방법: 종이 문제지에 정답 작성하여 제출
Unix/Linux

49 과제 5… 11월 22일(월) 11:59pm까지 매일 아침, crontab을 사용하여 실행 오류의 산물인 ‘core’ 파일들을 삭제하도록 스케줄하는 스크립트 ‘rmcore’ 작성 (참고문헌 p358 참조) 파일 시스템에서 명시된 기간 동안 접근되지 않았던 모든 파일들을 주기적으로 찾아서 그들을 압축된 형태로 저장하는 스크립트 ‘compressold’ 작성 이름, 주소, 전화번호가 알파벳 순서로 된 리스트에 접근하여 입력/수정/검색할 수 있는 전화번호부 유틸리티 완벽한 버전 (입력, 수정, 검색) 작성 (교재 p193 참조) 과제 제출 방법 Electrical Version1 fedora.incheon.ac.kr ( ): /home/ul2010hw.a 또는 ul2010hw.b에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 자신의 디렉토리 보호 권장: chmod directoryname Electrical Version2 multi.incheon.ac.kr ( ): /export/home/ul2010hw.a 또는 ul2010hw.b에 자신의 학번으로 숙제방(디렉토리) 만들고 그 안에 복사 컴퓨터 사이의 파일 복사는 ftp 를 이용하세요! Unix/Linux


Download ppt "작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자."

Similar presentations


Ads by Google