39
7 장 . 장장장장 장장장장장장 장장장

7 장 . 유틸리티

  • Upload
    mrinal

  • View
    88

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: 7 장 .  유틸리티

7 장 . 유틸리티컴퓨터공학과

강성인

Page 2: 7 장 .  유틸리티

7.2 파일 여과 패턴여과 : egrep/fgrep/grep

명시된 패턴 (pattern) 이 없는 줄만을 여과한다 . 반복 줄 제거 : uniq

인접한 , 반복 줄을 여과한다 .

유틸리티 탐색될 패턴의 종류fgrep 일정한 문자열만grep 정규 표현식

egrep 확장된 정규 표현식

Page 3: 7 장 .  유틸리티

정규 표현식 (Regular Expressions) (P. 296 참조 )

확장된 정규 표현식 (P. 297 참조 )메타 문자 의미

+ 단일 문자가 1 번 이상 발생함과 일치한다 .? 단일 문자가 0 번 혹은 1 번 발생함과 일치한다 .| 두 정규 표현식 사이에 논리합 (OR)

( ) 괄호 안의 텍스트를 단일 문자가 아닌 전체 표현식에 대해 동작한다 .

메타문자 의 미. 임의의 단일 문자와 일치

[ ] 괄호 안의 단일 문장들의 어느 것과도 일치한다 .* 앞의 문자가 0 번 또는 그 이상 발생함을 의미한다 .^ 줄의 시작 , 만일 [ ] 안에 사용되면 일치하지 않는 문자$ 줄의 끝\ 메타 문자 앞에 사용되며 그 메타 문자의 특수한 의미 상실

Page 4: 7 장 .  유틸리티

grep [ -hilnvw ] pattern {fileName}*

egrep [ -hilnvw ] pattern {fileName}*

fgrep [ -hilnvwx ] string {fileName}*

패턴 여과 명시된 패턴을 포함하지 않은 줄을 여과한다 . 정규 표현식은 단일 따옴표 안에 위치시켜 셸로 부터 간섭되지 않게

하여야 한다 .

-h 파일이름 제거-i pattern 의 대소문자 무시 -l pattern 이 포함된 파일들의 목록 (list) 표시-n numbering. 일치하는 줄 앞에 줄번호 표시-v pattern 과 일치하지 않는 줄을 보여줌-w 검색을 단어 (word) 단위로 실시-x string 과 정확하게 동일한 줄만을 출력

Page 5: 7 장 .  유틸리티

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

-c : 각 줄 앞에 줄이 반복된 횟수를 보여줌

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

uniq -c -number [ inputfile [outputfile] ]

Page 6: 7 장 .  유틸리티

:/home/sikang>cat animalscat snakemonkey snakedolphin elephantdolphin elephantgoat elephantpig pigpig pigmonkey 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

Page 7: 7 장 .  유틸리티

7.3 파일 정렬

-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 는 정지 항목번호를 나타냄

sort [ -tc -r ] {sortField -b -f -M -n}* {fileName}*

Page 8: 7 장 .  유틸리티

$ 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: 공백을 무시하면서 첫 번째 항목의 첫 번째 글자로 정렬

Page 9: 7 장 .  유틸리티

7.4 파일 비교 cmp

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

diff 두 파일을 비교하여 한 파일을 다른 파일로

전환하는 편집 변경을 행할 때에 필요한 동작 목록을 보여 줌

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

Page 10: 7 장 .  유틸리티

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

7.4 파일 비교cmp [-l -s] fileName1 fileName2 [offset1 offset2]

Page 11: 7 장 .  유틸리티

-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 [ -i -Dflag ] fileName1 fileName2

Page 12: 7 장 .  유틸리티

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

Page 13: 7 장 .  유틸리티

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

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

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

7.5 파일 보관

Page 14: 7 장 .  유틸리티

-o : 표준 입력으로부터 복사 ( 백업 ) 할 파일명의 목록을 받아 복사-v : 파일을 복사하는 동안 각 파일의 이름을 보여 줌

-i : 표준 입력으로부터 cpio 형식 파일 ( 이전에 cpio 로 저장된 파일 ) 을 읽어서 명시된 pattern 에 일치하는 파일들 모두를 재생 (input)-d : 필요하다면 디렉토리를 생성-t : 복사 대신 목차를 보여 줌-u : 무조건 복사 ( 최근 file 을 older file 로 겹쳐쓰기 가능 )

-p : 표준 입력으로부터 복사 ( 백업 ) 할 파일명 목록을 받아서 이를 명명된 directory 로 복사 ( 하나의 서브디렉토리 복사시 cp -r 명령이 더 간단 )-l : 물리적 복사 대신에 링크 (link) 를 만듦 결국 디스크 사용이 전혀 없음 ( 반드시 p 와 함께 -pl)

cpio -ov > backupFile

cpio -idtu patterns < backupFile

cpio -pl directory

Page 15: 7 장 .  유틸리티

:/home2/stud/04/sikang>ls lady*lady1 lady2 lady3 lady4:/home2/stud/04/sikang>ls lady* | cpio -ov > backupladylady1lady2lady3lady416 blocks:/home2/stud/04/sikang>rm lady*:/home2/stud/04/sikang>cpio -id < ladybackup16 blocks:/home2/stud/04/sikang>ls lady*lady1 lady2 lady3 lady4 :/home2/stud/04/sikang>

Page 16: 7 장 .  유틸리티

-c : fileList 에 대한 tar 형식의 백업 파일을 생성-v : 진행되는 상황을 설명-f : tar 형식의 백업 파일 이름을 지정

(default: /dev/rmt/0 … tape drive)

-t : tar 형식의 백업 파일 안에 어떤 것들이 들어 있는지 목차만 보임-x : 백업 파일로부터 파일을 추출 복귀 (extract)-r : fileList 를 기존의 백업 파일 뒤에 무조건 덧붙임 (rear)-u : 기존의 백업 파일에 이미 포함되어 있는 fileList 중 수정된 파일들만을 백업 파일의 뒤에 덧붙임 .

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

tar -cvf tarFileName fileList

tar -txru tarFileName [ fileList ]

Page 17: 7 장 .  유틸리티

$ 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

Page 18: 7 장 .  유틸리티

-d : 압축을 푼다- ㅣ : 현재 압축된 파일의 내용을 보여준다 .-r : 현재 디렉토리부터 하위 디렉토리까지 전부를 압축한다 .-t : 압축된 파일의 완전성을 검사한다 .-v : 압축 진행상황을 보여준다 .-9 : 최대한 압축한다 .

gzip –dlrtv9 {filename}+

$ gzip –v9 tarfile$ ls tarfile.gz$ gzip –l tarfile.gz$ gzip –vd tarfile.gz$ gunzip tarfile.gz

Page 19: 7 장 .  유틸리티

7.6 파일 탐색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

find pathList expression

Page 20: 7 장 .  유틸리티

$ 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” 파일로 백업한다 .

Page 21: 7 장 .  유틸리티

7.7 명령 스케쥴링

crontabcron 에 의하여 일련의 작업이 주기적으로 실행되도록 함 . 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 가 비어있으면 모든 사용자가 사용가능

Page 22: 7 장 .  유틸리티

cron(daemon) 시스템에 의하여 사용되는 crontabName 의 crontab 파일을 등록crontabName 없으면 표준 입력으로 입력하고 CONTROL-D

-l 등록된 crontab 파일의 내용을 보여준다 (list)-e 등록된 crontab 파일의 내용을 편집한다 (edit)-r 등록된 crontab 파일을 등록해제한다 (remove) userName 사용자만 자신의 crontab 파일을 소유하도록 함

crontab crontabName

crontab -l -e -r [ userName ]

Page 23: 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 24: 7 장 .  유틸리티

$ 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 파일의 등록 해제

Page 25: 7 장 .  유틸리티

-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 -c -s -m time [date [, year] ] [ +increment] [script]

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

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

at -r { jobId }+

at -l { jobId }*

Page 26: 7 장 .  유틸리티

$ at 8amat> 명령어 입력at> ^D$ tty/dev/pts/12$ cat at.shecho 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 시에 스크립트 실행

Page 27: 7 장 .  유틸리티

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

하드 링크 동일한 파일 시스템 내에서의 링크 , 여러 개의 레이블 생성이 가능하

나 , 물리적 파일은 동일함

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

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

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

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

Page 28: 7 장 .  유틸리티

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

명시된 파일 (original) 들에 대한 링크를 directory 에 생성

ln -f -s original newLink

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.hlrwxrwxrwx 1 sikang 2004 20 6 월 2 일 19:58 stdio.h -> /usr/include/stdio.h$ ls -F stdio.hstdio.h@

Page 29: 7 장 .  유틸리티

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

7.10 사용자 대치 : su

su [-] [ userName ]

Page 30: 7 장 .  유틸리티

7.11 전자 우편 검사 : biff

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

biff [ y | n ]

Page 31: 7 장 .  유틸리티

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

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

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

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

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

ul 밑줄 그은 문자가 명시된 터미널에 올바로 표시되도록 변환 (und

erline)

7.12 파일 변환

Page 32: 7 장 .  유틸리티

7.12 파일 변환

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

(default: 원래의 파일을 지우고 압축된 파일 (.Z) 로 치환 )

$ compress -v palindrom.c reverse.c $ uncompress -v *.Z

compress -c -v { fileName }+uncompress -c -v { fileName }+

Page 33: 7 장 .  유틸리티

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

주의

$ crypt agatha < sample.txt > sample.crypt $ crypt agatha < sample.scrypt > sample.txt

crypt [ key ] < originalFile > cryptedFile 암호화crypt [ key ] < cryptedFile > originalFile 해독화

Page 34: 7 장 .  유틸리티

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

sed [ -e script ] [ -f scriptfile ] { fileName }*

Page 35: 7 장 .  유틸리티

$ 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 36: 7 장 .  유틸리티

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

tr -c -d -s string1 string2

$ 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 까지를 제거

Page 37: 7 장 .  유틸리티

% 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 까지를 제거

Page 38: 7 장 .  유틸리티

-tterminal 터미날 유형 (/etc/termcap 참조 )만일 명시되어있지 않으면 $TERM 의 값을 참조

ul -tterminal { fileName }*

$ man who | ul -tdumb > man.txt→ 'who' 에 관한 매뉴얼을 단순 (dumb) 프린터 출력용으로 밑줄을 변환함

Page 39: 7 장 .  유틸리티

whoami

tty

7.15 셸 확인 및 터미널 확인