1 / 39

7 장 . 유틸리티

7 장 . 유틸리티. 컴퓨터공학과 강성인. 7.2 파일 여과. 패턴여과 : egrep/fgrep/grep 명시된 패턴 (pattern) 이 없는 줄만을 여과한다 . 반복 줄 제거 : uniq 인접한 , 반복 줄을 여과한다. 정규 표현식 (Regular Expressions) (P. 296 참조 ) 확장된 정규 표현식 (P. 297 참조 ). 패턴 여과 명시된 패턴을 포함하지 않은 줄을 여과한다 . 정규 표현식은 단일 따옴표 안에 위치시켜 셸로 부터 간섭되지 않게 하여야 한다 .

mrinal
Download Presentation

7 장 . 유틸리티

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7장. 유틸리티 컴퓨터공학과 강성인

  2. 7.2 파일 여과 • 패턴여과 : egrep/fgrep/grep • 명시된 패턴(pattern)이 없는 줄만을 여과한다. • 반복 줄 제거 : uniq • 인접한, 반복 줄을 여과한다.

  3. 정규 표현식(Regular Expressions) (P. 296 참조) • 확장된 정규 표현식 (P. 297 참조)

  4. 패턴 여과 • 명시된 패턴을 포함하지 않은 줄을 여과한다. • 정규 표현식은 단일 따옴표 안에 위치시켜 셸로 부터 간섭되지 않게 하여야 한다. -h 파일이름 제거 -i pattern의 대소문자 무시 -l pattern이 포함된 파일들의 목록(list) 표시 -n numbering. 일치하는 줄 앞에 줄번호 표시 -v pattern과 일치하지 않는 줄을 보여줌 -w 검색을 단어(word)단위로 실시 -x string과 정확하게 동일한 줄만을 출력 grep [ -hilnvw ] pattern {fileName}* egrep [ -hilnvw ] pattern {fileName}* fgrep [ -hilnvwx ] string {fileName}*

  5. 반복 줄 제거 : uniq • 동일한 내용이 인접 반복된 줄들을 한 줄만 남기고 여과 -c : 각 줄 앞에 줄이 반복된 횟수를 보여줌 -number : number번째 항목을 무시하고 패턴 탐색 uniq -c -number [ inputfile [outputfile] ]

  6. :/home/sikang>cat animals cat snake monkey snake dolphin elephant dolphin elephant goat elephant pig pig pig pig monkey pig :/home/sikang>uniq-c animals 1 cat snake 1 monkey snake 2 dolphin elephant 1 goat elephant 2 pig pig 1 monkey pig :/home/sikang>uniq-c -1 animals 2 cat snake 3 dolphin elephant 3 pig pig

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

  8. $ sort -r sortfile : 역순으로 정렬 $ sort +0 -1 sortfile : 첫 번째 항목만을 기준으로 정렬 $ sort +0b -1 sortfile : 첫 번째 항목만을 기준으로 정렬하되, 줄의 앞부분에 나오는 공백을 무시하여 첫 번째 항목을 잡는다. $ LANG=en_US :-M옵션을 사용하기 위해서 LANG값을 변경 $ sort +0bM -1 +4n -5 sortfile : 공백을 무시하면서 첫 번째 항목을 기준으로 월별로 정렬한 후, 그 후에 다섯 번째 항목이하를 숫자 크기로 추가로 정렬 $ sort -t: +0bM -1 +3n -4 sortfile2 : 항목 구분을 ':'로 한다. 공백을 무시하여 첫 번째 항목을 월별로 정렬한 후, 세 번째 항목 이하를 숫자 크기로 추가 정렬 • 필드 안의 글자 지정 % sort +0.0b –0.1 sortfile : 공백을 무시하면서 첫 번째 항목의 첫 번째 글자로 정렬

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

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

  11. 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는 두 번째 파일의 줄번호를 의미

  12. :/home/sikang>diff lady1 lady2 3c3 < And all those loving words you say are right. --- > And everything you say to me is right. :/home/sikang>diff lady2 lady3 3a4,6 > It makes me feel, > I'm so in love with you. > Even in the dark I see your light. :/home/sikang>diff lady3 lady4 2,4d1 < I hold you close to me, < And everything you say to me is right. < It makes me feel,

  13. 7.5 파일 보관 • cpio : 파일 복사용. 오직 하나의 backup volume으로 저장한다. 소규모 백업에 적당 • tar : tape에 파일을 보관함. 추가 저장시 항상 뒷 부분에 저장됨. 오직 하나의 backup volume으로 저장. 소규모 백업에 적당 • ufsdump/ufsrestore : 시스템 관리자가 전체 시스템을 백업하고 추출 하는데 사용. 개개의 파일을 다루는 데는 불편 하지만, 정기적 시스템 백업에 유용

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

  15. :/home2/stud/04/sikang>ls lady* lady1 lady2 lady3 lady4 :/home2/stud/04/sikang>ls lady* | cpio -ov > backuplady lady1 lady2 lady3 lady4 16 blocks :/home2/stud/04/sikang>rm lady* :/home2/stud/04/sikang>cpio-id < ladybackup 16 blocks :/home2/stud/04/sikang>ls lady* lady1 lady2 lady3 lady4 :/home2/stud/04/sikang>

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

  17. $ tar -cvf tarfile . $ tar -tvf tarfile $ tar -rvf tarfile reverse.c $ tar -uvf tarfile reverse.c $ mkdir ./tmp $ cd tmp $ tar -xvf ../tarfile $ tar -xvf ../tarfile `tar -tf ../tarfile | grep ‘lady*'` → C 프로그램 파일들만 추출한다 $ tar -xvf ../tarfile ./reverse.c

  18. gzip –dlrtv9 {filename}+ -d : 압축을 푼다 -ㅣ : 현재 압축된 파일의 내용을 보여준다. -r : 현재 디렉토리부터 하위 디렉토리까지 전부를 압축한다. -t : 압축된 파일의 완전성을 검사한다. -v : 압축 진행상황을 보여준다. -9 : 최대한 압축한다. $ gzip –v9 tarfile $ ls tarfile.gz $ gzip –l tarfile.gz $ gzip –vd tarfile.gz $ gunzip tarfile.gz

  19. 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 형식(5120 byte records)으로 device에 쓰고 참 값 반환 ! expression expression의 논리 부정 \( expr1 [-a] expr2 \) 두 expression의 and \( expr1 [-o] expr2 \) 두 expression의 or

  20. $ find . -name '*.c' -print → 현재의 디렉토리나 그 서브디렉토리에서 모든 C 소스 프로그램을 찾아 그 파일명들을 프린트 $ 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 -400 –ls → 파일 허가권이 8진수 표현법으로 400인 파일들을 프린트 $ find . –name ‘*.c’–cpio cfile.cpio → c 소스 프로그램을 찾아서 “cfile.cpio”파일로 백업한다.

  21. 7.7 명령 스케쥴링 • crontab cron에 의하여 일련의 작업이 주기적으로 실행되도록 함. cron은 단일 프로세스로서 시스템 시작부터 종료 까지 동작하는데, /var/spool/cron/crontabs 디렉토리에 복사 등록된 crontab 파일들을 수행함 • at 지정된 시간에 작업이 실행되도록 함 • 개별 사용자가 crontab과 at을 사용하는 것을 허용하거나 금지하는 방법 • * /var/spool/cron/crontabs에 사용자 이름으로 crontab 생성 • * /usr/lib/cron 또는 /etc/cron.d에 cron.deny와 cron.allow 두 파일이 모두 존재하지 않으면 슈퍼유저만 사용 가능함 • * cron.allow가 존재하지 않고 cron.deny가 비어있으면 모든 사용자가 사용가능

  22. crontab crontabName cron(daemon) 시스템에 의하여 사용되는 crontabName의 crontab 파일을 등록 crontabName 없으면 표준 입력으로 입력하고 CONTROL-D -l 등록된 crontab 파일의 내용을 보여준다 (list) -e 등록된 crontab 파일의 내용을 편집한다 (edit) -r 등록된 crontab 파일을 등록해제한다 (remove) userName 사용자만 자신의 crontab 파일을 소유하도록 함 crontab -l -e -r [ userName ]

  23. 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를 통하여 전송 • % 다음의 문자는 임시 파일에 복사되고, 명령의 표준 입력으로 사용됨 분 시간 일 월 요일 명령

  24. $ tty /dev/pts/1 $ crontab * * * * * echo one minute passed > /dev/pts/1 ^D $ cat crontab.cron 0 8 * * 1 echo Happy Monday Morning > /dev/pts/1 * * * * * echo One Minute Passed > /dev/pts/1 30 14 1 1 * mail users % Jan Meeting At 3 pm → 월요일 아침 8시에 전자 우편을 발송 → 매분마다 pts(pseudo tty slave) 터미날 /dev/pts/1에 에코함. → 1월 1일 오후 2:30에 사용자에게 임박한 회의를 상기시킴 $ crontab crontab.con $ crontab –l → crontab 파일의 내용 표시 $ crontab -l mysung → 사용자별로 확인하는 것은 슈퍼유저만이 사용 가능 $ crontab –r → crontab 파일의 등록 해제

  25. 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 ] at -r { jobId }+ • -r 명시된 작업을 at 큐로부터 제거 • -l 뒤따르는 작업들의 목록을 보여 줌 at -l { jobId }*

  26. $ at 8am • at> 명령어 입력 • at> ^D • $ tty • /dev/pts/12 • $ cat at.sh • echo at done > /dev/pts/12 • $at now +1 minutes < at.sh : 스크립트가 1분 후에 수행 • $ at –l : 스캐줄 내용 표시 • $ at 17:35 < at.sh : 17시 35분에 스크립트 수행(오늘이나 내일) • $ at 0934am Jun 18 < at.sh : 6월 18일 오전 9시 34분에 스크립트 실행 • $ at 9:34 Jun 18 , 2004 < at.sh • $ at 11:00pm tomorrow < at.sh : 내일 오후 11시에 스크립트 실행 • $ at 9pm Jun 13 < at.sh : • $ at 10pm Wed < at.sh : 수요일 오후 10시에 스크립트 실행

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

  28. ln -f -s original newLink -f 슈퍼유저가 디렉토리에 하드 링크를 생성할 수 있게 함 -s 소프트 링크로서 파일 시스템을 확장 가능 • 명시된 파일(original)들에 대한 링크를 directory에 생성 ln -f -s { original }+ driectory • $ ln hold.3 hold : 하드 링크 생성 • $ ln hold.* tmpdir : tmpdir이라는 디렉토리에 hold.* 파일의 하드링크 생성 • $ ln -s /usr/include/stdio.h stdio.h : 심볼릭 링크 생성 • $ ls -l stdio.h • lrwxrwxrwx 1 sikang 2004 20 6월 2일 19:58 stdio.h -> /usr/include/stdio.h • $ ls -F stdio.h • stdio.h@

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

  30. 7.11 전자 우편 검사 : biff • y : 전자우편 수신 즉시 통고하도록 설정함 • n : 전자우편 수신 즉시 통고하지 않도록 함 • 아무 옵션 없이 사용하면 현재의 biff 상태를 나타내 줌 biff [ y | n ]

  31. 7.12 파일 변환 • compress/uncompress • 파일을 압축하고 다시 해독 복귀시킨다. • crypt • 키 암호를 받아들여 파일을 암호화하거나 해독한다 • sed • 스트림 편집, 하나 이상의 파일을 스캔하여 특정 조건에 맞는 모든 줄을 편집한다. 단순 반복 편집에 유용하다 • tr • 파일 내의 문자를 한 문자 집합에서 다른 문자 집합으로 변환 (transform) • ul • 밑줄 그은 문자가 명시된 터미널에 올바로 표시되도록 변환 (underline)

  32. 7.12 파일 변환 -v 압축되는 상황을 보여 줌 -c 압축된 파일로 원래의 파일을 덮어쓰지 않고 표준 출력으로 내보냄 (default: 원래의 파일을 지우고 압축된 파일 (.Z)로 치환) $ compress -v palindrom.c reverse.c $ uncompress -v *.Z compress -c -v { fileName }+ uncompress -c -v { fileName }+

  33. crypt [ key ] < originalFile > cryptedFile  암호화 crypt [ key ] < cryptedFile > originalFile 해독화 • key가 명시되지않으면 대화식으로 물어 봄(화면에 보이지는 않음) • crypt key의 형태로 명령을 주었을 때 다른 터미널에서 ps로 체크 됨에 주의 $ crypt agatha < sample.txt > sample.crypt $ crypt agatha < sample.scrypt > sample.txt

  34. 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 • addressRange c\ text : addressRange로 명시된 텍스트를 text로 치환 • addressRange a\ text : addressRange로 명시된 텍스트 뒤에 text를 첨가 • 만일 주소가 명시되어있지 않으면 모든 줄에 대하여 적용

  35. $ 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 → '<<'를 줄의 맨 앞에, '>>'를 줄의 맨 뒤에 삽입함

  36. tr -c -d -s string1 string2 string1 문자(집합)을 string2 문자(집합)으로 변환시킴 -c string1의 보어(complement)를 취함. 즉, 지정된 문자 이외의 문자들 -d string1에 있는 문자들을 표준 출력에서 제거 -s 반복 출력되는 문자를 한 번만 출력 하도록 함 • $ 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까지를 제거

  37. % 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*]’ (또는 ‘[\012*]’) < inputFile (?) • → 소문자 a부터 z가 아닌 모든 문자를 아스키값 (012)8(new line)로 치환 • % tr -d ‘[a-c]’ < inputFile • → 소문자 a부터 c까지를 제거

  38. -tterminal 터미날 유형 (/etc/termcap참조) 만일 명시되어있지 않으면 $TERM의 값을 참조 ul -tterminal { fileName }* • $ man who | ul -tdumb > man.txt • → 'who'에 관한 매뉴얼을 단순(dumb) 프린터 출력용으로 밑줄을 변환함

  39. 7.15 셸 확인 및 터미널 확인 • whoami • tty

More Related