UNIX 및실습 11 장유닉스유틸리티 이용하기 1
학습목표 유닉스시스템이제공하는다양한유틸리티의사용방법을익힌다. 파일의행수, 단어수, 문자수를찾는방법을익힌다. 파일을정렬하고내용의중복을제거하는방법을익힌다. 파일을분할하거나원하는부분을잘라내어붙여서새로운파일을생성하는방법을익힌다. 2
Section 01 파일정보수집 - wc wc [ 옵션 ] 파일 파일의라인수, 단어수, 바이트, 문자수출력 옵션 -c : 바이트수 -m : 문자수 -C : -m과동일 -l : 라인수 -w : 화이트스페이스나새로운행으로구분된단어수 3
사용법 파일정보수집 - wc 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 4
[ 실습하기 ] 파일정보수집 - 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
Section 02 파일정렬 - sort sort [ 옵션 ] 파일 아스키코드값을기준으로파일의텍스트내용을정렬하여화면에출력 옵션 -b : 앞에붙는공백무시 -c : 정렬이되지않은상태로출력 -d : 사전식순서로정렬. 숫자, 문자, 공백만비교 -f : 대소문자구분안함 -m : 정렬된파일을통합 -n : 숫자를산술값으로전환해정렬 -r : 역순정렬 -t 문자 : 지정한문자를필드구분자로사용 + 번호 : 번호 +1 필드를기준으로정렬 +pos1 -pos2: 정렬하고자하는필드의열을지정, pos1 부터 pos2 열까지정렬 6
파일정렬 - sort 7 사용방법 기본데이터 (s.dat) 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 8 사전식으로정렬 : -d 역순으로정렬 : -r 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 필드정렬하기 : +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 -k : 필드번호를그대로사용 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 9
파일정렬 - sort 특정필드를기준으로정렬 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 열이같으면원래파일순서대로정렬 숫자를기준으로정렬 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 : 숫자처리 10
파일정렬 - 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 s.dat 9) sort o sort.out s.dat 10)cat sort.out 11)sort +2 +3 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
Section 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
Section 04 중복삭제 - uniq uniq [ 옵션 ] [ 입력파일 [ 출력파일 ] ] 파일또는표준입력으로입력된내용중중복된내용의줄이연속으로있으면하나만남기고삭제 파일을지정하지않으면표준입력내용을처리 입출력파일이름은달라야함 옵션 -u : 중복되지않는줄만출력 -d : 중복된줄중 1 줄만출력 -n : 원하는필드앞의공백과문자열무시. n 은필드번호 16
중복삭제 - uniq 사용방법 기본데이터 (test_uniq1) 중복제거 cat test_uniq1 aaaaa bbbbb bbbbb bbbbb ccc uniq test_uniq1 aaaaa bbbbb bbbbb ccc 17
중복삭제 - uniq 정렬과중복제거를동시에 sort test_uniq1 aaaaa bbbbb bbbbb bbbbb ccc sort test_uniq1 uniq aaaaa bbbbb ccc 중복없는행보기 uniq u test_uniq1 aaaaa ccc 중복행과중복횟수보기 uniq d test_uniq1 bbbbb uniq c test_uniq1 1 aaaaa 4 3 bbbbb 1 ccc 18
Section 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 필드추출 : -f 옵션 문자추출 : -c 옵션 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
Section 06 두파일연결하기 - paste paste [ 옵션 ] [ 파일 1 파일 2 ] 사용자가지정한두개이상의파일내용중같은줄을붙이거나한파일의끝에다른파일의내용을추가 옵션 -s : 파일의끝에추가 (split 로나눈파일을원래대로붙일때 ) -d 문자 : 필드구분자 - : 파일대신표준입력사용 22
두파일연결하기 - 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 23
두파일연결하기 - paste 24 두파일의행이같지않을경우 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 bbbbb cut d -f1 s.dat paste - u.dat Kim aaaaa Lee Lee Park bbbbb Choi 25
Section 07 파일덤프 - dd dd [ 옵션 ] [if= 입력파일 ] [of= 출력파일 ] 지정한입력파일을지정한옵션에따라변환하여출력파일로저장하는유틸리티 옵션 bs=n : 입출력블록의크기를 n 바이트로지정 ( 기본 1 블록 =512 바이트 ) conv=lcase : 알파벳을소문자로변환 conv=ucase : 알파벳을대문자로변환 26
파일덤프 - 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 27
파일지우기 파일덤프 - dd dd if=/dev/null of=test_dd2 0+0 레코드인 : 0+0 레코드아웃 more test_dd2 ls test_dd2 test_dd2 28
[ 실습하기 ] 1) mkdir Practice 2) cd Practice 3) pwd 4) more /etc/passwd 5) cut f 1 d: /etc/passwd > login_list 6) cut f 5 d: /etc/passwd > name_list 7) paste d: name_list login_list > user_list 8) sort o user_list user_list 1) 실습디렉토리생성 2) 실습디렉토리로이동 3) 현재경로파악 4) /etc/passwd파일구조파악 5) 첫번째필드인로그인ID추출 6) 사용자이름추출 (5번째필드 ) 7) 파일합치기 8) 정렬 29