UNIX 및실습 11 장유닉스유틸리티 이용하기 1
학습목표 유닉스시스템이제공하는다양한유틸리티의사용방법을익힌다. 파일의행수, 단어수, 문자수를찾는방법을익힌다. 파일을정렬하고내용의중복을제거하는방법을익힌다. 파일을분할하거나원하는부분을잘라내어붙여서새로운파일을생성하는방법을익힌다. 2
01. 파일정보수집 - wc 파일의라인수, 단어수, 바이트, 문자수출력 옵션 -c : 바이트수 -m : 문자수 -C : -m 과동일 -l : 라인수 wc [ 옵션 ] 파일 -w : 화이트스페이스나새로운행으로구분된단어수 3
파일정보수집 - wc 4 사용법 ls -l -rw-r--r-- 1 user1 other 0 4 월 15 일 13:25 t1 -rw-r--r-- 1 user1 other 0 4 월 15 일 13:25 t2 -rw-r--r-- 1 user1 other 0 4 월 15 일 13:25 t3 -rw-r--r-- 1 user1 other 0 4 월 10 일 13:01 test ls -l > test_wc wc test_wc 6 47 320 test_wc 옵션의중복사용 현재시스템접속자수 wc -c test_wc 320 test_wc wc -m test_wc 309 test_wc wc -cl test_wc 6 320 test_wc wc -mw test_wc 7 309 test_wc who wc -l 16
[ 실습하기 ] 파일정보수집 - wc 실습하기 1) wc /etc/passwd 2) wc /etc/hosts 3) wc -l /etc/services 4) cat /etc/hosts wc -l 5) ls l /usr/bin wc l 6)??? 1) /etc/passwd 파일의정보를확인 2) /etc/hosts 파일의정보확인 3) /etc/services 파일의라인수확인 4) /etc/hosts 파일의라인수를확인하는다른방법 5) /usr/bin 디렉토리파일의라인수가의미하는것은무엇인가? 6) 현재디렉토리에파일이몇개있는지알려면어떻게해야하는가? 5
02. 파일정렬 - sort sort [ 옵션 ] 파일 텍스트파일의내용을지정한방법으로정렬하여화면에출력정렬기준 환경변수 LC_COLLATE 환경변수 LANG (LC_COLLATE가없으면 ) 유니코드 : 공백-> 특수문자-> 숫자-> 영문자 아스키코드 : 공백-> 숫자-> 영문소문자-> 영문대문자, 특수문자는사이사이 옵션 6 옵션 기능 옵션 기능 -b 앞에붙는공백을무시 -r 역순으로정렬 -c 정렬이되지않은상태로출력 -u 중복행삭제 -d 사전순으로정렬 -o 파일명 정렬된결과를파일에저장 -f 대소문자구분안함 -t문자 지정한문자를필드구분자로사용 -k # # 필드기준으로정렬 + 번호 번호 +1 필드를기준으로정렬 -m 정렬된파일통합정렬하고자하는필드를지정. pos1 열부 +pos1 -pos2 -n 숫자를산술값으로환산터 pos2열까지정렬
파일정렬 - sort 7 사용방법 기본데이터 (test_sort1) more test_sort1 This is a test file. 1234 unix Unix _love ~love!abc 700 50 @_@ #include love ^love <love> `love` hi &987 abcd {Love 공백행들 첫문자가공백 기본정렬 : 아스키코드기준 sort test_sort1 700 abcd!abc #include &987 1234 50 <love> @_@ This is a test file. Unix ^love _love `love` hi love unix {Love ~love 숫자보다먼저나오는특수문자들 숫자들 숫자와대문자사이에나오는특수문자들 대문자들 대문자와소문자사이에나오는특수문자들 소문자들 소문자다음에나오는특수문자들
파일정렬 - sort 사전식으로정렬 : -d 역순으로정렬 : -r 8 sort -d test_sort1 공백행들 @_@ 700 첫문자가공백문자 abcd 1234 50 & 는무시하고 987로간주 &987 {Love { 는무시하고 Love로간주 This is a test file. Unix!abc! 는무시 hi #include <love> ^love _love `love` 앞의특수문자들무시 love ~love unix sort -r test_sort1 ~love {Love unix love hi `love` _love ^love Unix This is a test file. @_@ <love> 50 1234 &987 #include!abc abcd 700
파일정렬 - sort 기본데이터 : test_sort2 필드정렬하기 : +n 또는 -k cat test_sort2 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 003 Lee Na-Young 54 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 006 Jyun Doo-Ri 49 F 007 Lee Mi-Ra 59 F sort +1 test_sort2 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 006 Jyun Doo-Ri 49 F 004 Kim Chan-Sook 60 F 007 Lee Mi-Ra 59 F 003 Lee Na-Young 54 F 002 Park Ji-Soo 100 M sort -k 2 test_sort2 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 006 Jyun Doo-Ri 49 F 004 Kim Chan-Sook 60 F 007 Lee Mi-Ra 59 F 003 Lee Na-Young 54 F 002 Park Ji-Soo 100 M -k : 필드번호를그대로사용 9
파일정렬 - sort 10 +pos1 -pos2 숫자처리 : -n sort +1-2 test_sort2 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 006 Jyun Doo-Ri 49 F 004 Kim Chan-Sook 60 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 002 Park Ji-Soo 100 M 2 번필드만을기준으로정렬 ( 필드 2 에서시작해서필드 2 에서끝남 ) 2 열이같으면원래파일순서대로정렬 sort -k 4 test_sort2 002 Park Ji-Soo 100 M 006 Jyun Doo-Ri 49 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M sort -n -k 4 test_sort2 006 Jyun Doo-Ri 49 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M -n : 숫자처리
파일정렬 - sort 2 차정렬하기 sort +2-3 +1-2 test_sort2 004 Kim Chan-Sook 60 F 006 Jyun Doo-Ri 49 F 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 005 Han Ju-Hyun 75 M 007 Lee Mi-Ra 59 F 003 Lee Na-Young 54 F 정렬결과저장하기 sort -n +3-4 -o sort.out test_sort2 cat sort.out 006 Jyun Doo-Ri 49 F 003 Lee Na-Young 54 F 007 Lee Mi-Ra 59 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 3 번필드만을기준으로정렬 3 열이같으면 2 열을기준으로정렬 11
파일정렬 - sort 필드구분자지정하기 : -t sort -t: /etc/passwd ( 중략 ) jongwon:x:1089:1000: 이종원 :/expoxrt/home/jongwon:/bin/ksh root:x:0:1:super-user:/:/bin/ksh sjyoun:x:1090:1000: 윤소정 :/export/home/sjyoun:/bin/ksh user1:x:10001:2006: 김삼순 :/export/home/user1:/bin/ksh user2:x:10002:2006: 박나라 :/export/home/user2:/bin/ksh user3:x:10003:2006: 이나영 :/export/home/user3:/bin/ksh 12
[ 실습하기 ] 파일정렬 - sort 실습하기 1) mkdir unix/ch11 2) cd unix/ch11 3) cp /tmp/s.dat. 4) cat s.dat 5) sort s.dat 6) sort f s.dat 7) sort r s.dat 8) sort +2-3 s.dat 9) sort o sort.out s.dat 10)cat sort.out 11)sort +2-3 +3-4 s.dat 12)sort -m s.dat sort.out 1) 2) 3) 기본데이터파일을현재디렉토리로복사 4) 기본파일내용을확인 5) 기본정렬 6) 대소문자구분없이정렬 7) 역순으로정렬 8) 3 번째열을기준으로정렬 9) 정렬결과를파일로저장 10) 결과파일을확인 11) 3, 4 번째컬럼을기준으로정렬 12) 기본파일과정렬파일을합병 13
03. 파일분할 - split split [ 옵션 ] [ 파일 ] 큰파일을일정한크기의여러개작은파일로분할 분할된파일이름은 xaa, xab, 순으로생성 옵션 -b n : 크기가 n 바이트인파일로분할 -n : n줄씩분할 옵션을지정하지않으면 1000줄씩분할 파일을지정하지않으면표준입력내용을분할저장 14
파일분할 - split 사용예 기본데이터 (test_split) cp /etc/services test_split wc -l test_split 98 test_split 행을기준으로파일분할 split -30 test_split1 ls test_split1 xaa xab xac xad wc -l x* 30 xaa 30 xab 30 xac 8 xad 98 total 바이트를기준으로파일분할 wc -c test_split1 3035 test_split1 split -b 512 test_split1 ls test_split1 xaa xab xac xad xae xaf wc -c x* 512 xaa 512 xab 512 xac 512 xad 512 xae 475 xaf 3035 total 15
04. 중복삭제 - uniq uniq [ 옵션 ] [ 입력파일 [ 출력파일 ] ] 파일또는표준입력으로입력된내용중중복된내용의줄이연속으로있으면하나만남기고삭제 파일을지정하지않으면표준입력내용을처리 입출력파일이름은달라야함 옵션 -u : 중복되지않는줄만출력 -d : 중복된줄중 1 줄만출력 -n : 원하는필드앞의공백과문자열무시. n 은필드번호 16
중복삭제 - uniq 사용방법 기본데이터 (test_uniq1) cat test_uniq1 aaaaa abcde abcde bbbbb abcde bbbbb bbbbb abcde ccc 중복제거 uniq test_uniq1 aaaaa abcde bbbbb abcde bbbbb abcde ccc 17
중복삭제 - uniq 정렬과중복제거를동시에 sort test_uniq1 aaaaa abcde abcde abcde abcde bbbbb bbbbb bbbbb ccc sort test_uniq1 uniq aaaaa abcde bbbbb ccc 중복없는행보기 uniq u test_uniq1 aaaaa ccc 중복행과중복횟수보기 uniq d test_uniq1 abcde bbbbb uniq c test_uniq1 1 aaaaa 4 abcde 3 bbbbb 1 ccc 18
05. 필드잘라내기 - cut cut [ 옵션 ] [ 파일 ] 파일의각행에서선택된필드를잘라냄 옵션 -c 리스트 : 각줄에서잘라낼문자위치지정 -f 필드수 : 지정한필드잘라냄 -d 문자 : 필드구분자 19
필드잘라내기 - cut 사용방법 기본데이터 (test_cut) cat test_cut 001 Hong Gil-Dong 80 M 002 Park Ji-Soo 100 M 003 Lee Na-Young 54 F 004 Kim Chan-Sook 60 F 005 Han Ju-Hyun 75 M 006 Jyun Doo-Ri 49 F 007 Lee Mi-Ra 59 F 문자추출 : -c 옵션, 필드추출 : -f 옵션 cut c5-8 test_cut Hong Park Lee Kim Han Jyun Lee cut -f 2,3 test_cut Hong Gil-Dong Park Ji-Soo Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra 20
필드잘라내기 - cut 필드구분자지정하기 : -d cut -d: -f 1 /etc/passwd more root daemon bin sys adm lp smtp uucp listen nobody noaccess nobody4 mysql ( 중략 ) -- 계속 -- cut -d' ' -f 2 test_sort2 Hong Park Lee Kim Han Jyun Lee 21
[ 실습하기 ] 필드잘라내고중복삭제 - uniq, cut 1) cp /etc/passwd. 2) cut -d: -f 7 passwd > shell.out 3) more shell.out 4) sort shell.out uniq 1) /etc/passwd 파일을현재디렉토리로복사 2) passwd 파일중필드구분자를 : 로지정하여 7번째필드를추출하여 shell.out 파일로저장 3) 저장한파일내용확인 4) shell.out 파일내용을정렬한후중복제거 => 위작업의결과로알수있는것은? 22
06. 두파일연결하기 - paste paste [ 옵션 ] [ 파일 1 파일 2 ] 사용자가지정한두개이상의파일내용중같은줄을붙이거나한파일의끝에다른파일의내용을추가 옵션 -s : 파일의끝에추가 (split 로나눈파일을원래대로붙일때 ) -d 문자 : 필드구분자 - : 파일대신표준입력사용 23
두파일연결하기 - paste 사용방법 test_paste1 001 002 003 004 005 006 007 test_paste2 Hong Gil-Dong Park Ji-Soo Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra 파일붙이기 paste test_paste2 test_paste1 Hong Gil-Dong 001 Park Ji-Soo 002 Lee Na-Young 003 Kim Chan-Sook 004 Han Ju-Hyun 005 Jyun Doo-Ri 006 Lee Mi-Ra 007 24
두파일연결하기 - paste 25 두파일의행이같지않을경우 test_paste3 001 002 003 004 005 006 007 paste test_paste2 test_paste3 Hong Gil-Dong 001 002 003 004 Park Ji-Soo 005 006 007 Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra 필드구분자지정 : -d paste -d: test_paste1 test_ paste2 001:Hong Gil-Dong 002:Park Ji-Soo 003:Lee Na-Young 004:Kim Chan-Sook 005:Han Ju-Hyun 006:Jyun Doo-Ri 007:Lee Mi-Ra 파일수평붙이기 : -s paste -s test_paste1 test_paste2 001 002 003 004 005 006 007 Hong Gil-Dong Park Ji-Soo Lee Na-Young Kim Chan-Sook Han Ju-Hyun Jyun Doo-Ri Lee Mi-Ra
두파일연결하기 - paste cut 과 paste 의복합사용 s.dat Kim Ji-Soo 10 F Lee Gil-Dong 20 M Lee Gil-San 15 M Park Ji-Soo 21 F Choi Na-Na 20 F u.dat aaaaa abcde abcde bbbbb 26 cut d -f1 s.dat paste - u.dat Kim aaaaa Lee abcde Lee abcde Park bbbbb Choi
[ 실습하기 ] 파일연결하기 - paste 1) more /etc/passwd 2) cut f 1 d: /etc/passwd > login_list 3) cut f 5 d: /etc/passwd > name_list 4) paste d: name_list login_list > user_list 5) sort o user_list user_list 1) /etc/passwd파일구조파악 2) 첫번째필드인로그인ID추출 3) 사용자이름추출 (5번째필드 ) 4) 파일합치기 5) 정렬 27
07. 파일덤프 - dd dd [ 옵션 ] [if= 입력파일 ] [of= 출력파일 ] 지정한입력파일을지정한옵션에따라변환하여출력파일로저장하는유틸리티 옵션 bs=n : 입출력블록의크기를 n 바이트로지정 ( 기본 1 블록 =512 바이트 ) conv=lcase : 알파벳을소문자로변환 conv=ucase : 알파벳을대문자로변환 28
파일덤프 - dd 사용예 : 대소문자전환하기 dd conv=lcase if=test_cut of=test_dd1 0+1 레코드인 : 0+1 레코드아웃 more test_dd1 001 hong gil-dong 80 m 002 park ji-soo 100 m 003 lee na-young 54 f 004 kim chan-sook 60 f 005 han ju-hyun 75 m 006 jyun doo-ri 49 f 007 lee mi-ra 59 f 29
파일지우기 파일덤프 - dd dd if=/dev/null of=test_dd2 0+0 레코드인 : 0+0 레코드아웃 more test_dd2 ls test_dd2 test_dd2 30