460 likes | 704 Views
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.
E N D
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 su 사용자 대치 화일 보관 find whoami 셀 확인 명령어 스케줄 at, cron, crontab 텍스트 처리 awk (3장 참조) 문서 준비 nroff,spell,style,troff 하드 및 소프트링크 ln Unix 시스템
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 Unix 시스템
7.2 파일 여과 • 반복 줄 제거 : uniq • 인접한, 반복줄을 여과 ② uniq: 동일한 내용이 인접 반복된 줄들을 한 줄만 남기고 여과 uniq -c -number [ inputfile [outputfile] ] -c (해당 줄이 반복된 횟수를 보여줌) -number (number번째 항목을 무시하고 패턴 탐색) (예)$ uniq inputfile [p290 참조] (예)$ uniq -c inputfile (예)$ uniq -1 inputfile Unix 시스템
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 은 첫 번째 항목을 가리킴) 정지 항목 번호는 정렬 대상 에서 제외되며 생략시 모든 항목이 포함 Unix 시스템
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 ) Unix 시스템
7.4 파일 비교 • cmp 두 화일의 동일성을 검사하여, 차이가 생기는 첫 번째 바이트를 보여 줌 • diff 두 화일을 비교하여 한 파일을 다른 화일로 전환하는 편집 변경을 행할 때에 필요한 동작 목록을 보여 줌 (3종류의 편집변경이 제공됨) Unix 시스템
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 Unix 시스템
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를 이용하여 전처리기 대상 생성 Unix 시스템
7.5 화일 보관 • 화일을 보관하는 이유 ① backup(정기적, 보관용) ② 네트워크 연결이 안된 컴퓨터로의 데이터 전송 • cpio : 화일 복사용. 오직 하나의 backup volume으로 저장한다. 소규모 백업에 적당 • tar : tape에 화일을 보관함. 추가 저장시 항상 뒷 부분에 저장됨. 오직 하나의 backup volume으로 저장. 소규모 백업에 적당 • dump/restore : 시스템 관리자가 전체 시스템을 백업하고 추출 하는데 사용. 개개의 화일을 다루는 데는 불편 하지만, 정기적 시스템 백업에 유용 Unix 시스템
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)를 만듦 결국 디스크 사용이 전혀 없슴 Unix 시스템
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일 동안 수정된 화일들을 부모 디렉토리에 링크함 Unix 시스템
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하게 적용 Unix 시스템
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 Unix 시스템
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 Unix 시스템
7.5 화일 보관 • restore -irtx [ f dumpFile ] { fileName }+ -i 대화형 복구. 사용자에게 복구할지 말지를 목록을 보여주면서 진행한다. -r dumpFile에 있는 모든 화일을 현재의 디렉토리로 복구 -t 복구는 하지않고 그 대신에 dumpFile 내용의 목록들만을 보여준다 -x 복구(extract) (예)$ restore -x f /dev/rmt0 wine.c hacking.c Unix 시스템
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 Unix 시스템
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'로 끝나는 화일들의 이름을 프린트함 Unix 시스템
7.7 명령 스케쥴링 • crontab cron에 의하여 일련의 작업이 주기적으로 실행되도록 함. cron은 단일 프로세스로서 시스템 시작부터 종료 까지 동작하는데, /var/spool/cron/crontabs 디렉토리에 복사 등록된 crontab 화일들을 수행함 • at 지정된 시간에 작업이 실행되도록 함 Unix 시스템
7.7 명령 스케쥴링 • crontab crontabName cron (daemon)시스템에 의하여 사용되는 crontbaName의 crontab 파일을 등록 • crontab -l -e -r [ userName ] -l 등록된 crontab 화일의 내용을 보여준다 (list) -e 등록된 crontab 화일의 내용을 편집한다 (edit) -r 등록된 crontab 화일을 등록해제한다 (remove) userName 사용자만 자신의 crontab 화일을 소유하도록 함 • /var/cron/log 파일에 cron daemon이 처리한 내용 기록 Unix 시스템
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를 통하여 전송 • % 다음의 문자는 임시 화일에 복사되고, 명령의 표준 입력으로 사용됨 Unix 시스템
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가 비어있으면 모든 사용자가 사용가능 Unix 시스템
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 ] Unix 시스템
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 Unix 시스템
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가 비어있으면 모든 사용자가 사용 가능 Unix 시스템
7.8 프로그램 가능한 텍스트 처리 • 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 시스템
7.8 프로그램 가능한 텍스트 처리 • 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 시스템
7.8 프로그램 가능한 텍스트 처리 • 입력 줄의 항목 접근 - $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 Unix 시스템
7.8 프로그램 가능한 텍스트 처리 • 연산자 $ 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 Unix 시스템
7.8 프로그램 가능한 텍스트 처리 • 제어구조(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 Unix 시스템
7.9 하드 링크와 소프트 링크: In • 하드 링크 : • 동일한 화일 시스템 내에서의 링크 여러개의 레이블 생성이 가능하나, 물리적 화일은 동일함 • 하드 링크가 추가될 때마다 링크 계수 항목이 증가 • 소프트 링크(심볼릭 링크) • 다른 파일 시스템들 간의 링크 • 링크 계수 항목이 증가하지 않고 대신에 permission에 l--- 식으로 기록됨 • ls -F 로 참조할 때 화일 이름 뒤에 @가 표시됨 Unix 시스템
7.9 하드 링크와 소프트 링크: In • 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@ Unix 시스템
7.10 사용자 대치 : su • su [-] [ userName ] : 사용자 대치(substitute user) • default: root • 새로운 shell prompt; # • 사용자 대치의 종료: ^D 7.11 전자 우편 검사 : biff • 유닉스 셸은 수신되는 전자우편을 주기적 으로 점검함. 따라서 전자우편을 수신한 시간과 유닉스 셸이 전자우편 도착을 알려 주는 시간에는 다소 차이가 있음 • biff [ y | n ] y 전자우편 수신 즉시 통고하도록 설정함 n 전자우편 수신 즉시 통고하지 않도록 함 아무 옵션 없이 사용하면 현재의 biff 상태를 나타내 줌 Unix 시스템
7.12 화일 변환 • compress/uncompress • 파일을 압축하고 다시 해독 복귀시킨다. • crypt • 키 암호를 받아들여 파일을 암호화하거나 해독한다 • sed • 스트림 편집, 하나 이상의 화일을 스캔하여 특정 조건에 맞는 모든 줄을 편집한다. 단순 반복 편집에 유용하다 • tr • 화일 내의 문자를 한 문자 집합에서 다른 문자 집합으로 변환 (transform) • ul • 밑줄 그은 문자가 명시된 터미날에 올바로 표시되도록 변환 (underline) Unix 시스템
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로 압축된 경우) Unix 시스템
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 Unix 시스템
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 Unix 시스템
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 → '<<'를 줄의 맨 앞에, '>>'를 줄의 맨 뒤에 삽입함 Unix 시스템
7.12 화일 변환 • tr -c -d -s string1 string2 string1 문자(집합)을 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까지를 제거 Unix 시스템
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까지를 제거 Unix 시스템
7.12 화일 변환 • ul -tterminal { fileName }* -tterminal 터미날 유형 (/etc/termcap참조) 만일 명시되어있지 않으면 $TERM의 값을 참조 (예) $ man who | ul -tdumb > man.txt → 'who'에 관한 매뉴얼을 단순(dumb) 프린터 출력용으로 밑줄을 변환함 Unix 시스템
7.13 순수 화일 내용 보기: od (octal dump) • 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 바이트 지나서부터 덤프 Unix 시스템
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 (다중 사용자 부팅시 자동 설치될 파일 시스템 목록) Unix 시스템
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의 동적인 마운트를 위해 사용하는 파일 시스템 Unix 시스템
7.15 셸 확인 • whoami 7.16 터미널 확인 : tty • tty 7.17 텍스트 포맷팅 • nroff • troff • style • spell Unix 시스템
과제…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 : 종이에 소스와 실행 과정 및 결과 출력하여 제출 Unix 시스템