Linux 유틸리티 - 압축 : tar, gzip - 텍스트처리 : wc, sort, comm - 필터 : grep, cut, paste, diff - 고급텍스트처리 : sed, awk 명령어 : tar 저장또는이동목적을위해여러개의파일을하나로묶는다. (tape archive) 묶는기능만수행하며압축하지않는다. tar [function letters] [tar-file] [options] [file ] Function Letters c : Create. 묶음파일을생성 r : Replace. 주어진파일을기존 tar 파일끝에추가. u : Update. 주어진파일이새로운경우에만기존 tar 파일끝에추가. t : Table of contents. 묶여진파일들의목록을보여준다. x : Extract. 하나의파일명으로묶여진파일을푼다. f : File. 주어진파일명으로 tarfile 을만든다. z : Zip. 압축된 tarfile 을만든다. (Linux only) 그외에도많음. 상세기능은매뉴얼참조. 기능문자는옵션이아니므로 를붙이지않아도된다.
명령어 : tar tar 사용예 현재 directory 모든파일을 vla.tar 로묶음 vla.tar 의목록 vla.tar 의내용을추출 v? Verbose. 실행과정메시지를출력한다. 명령어 : gzip 유닉스환경에서가장많이이용하는압축유틸리티중하나 gzip [options] [name ] gunzip [options] [name ] zcat [options] [name ] 압축을한후파일확장자는.gz 가붙음 gunzip = gzip d.z 가붙은파일도복원할수있음 (compress/decompress) zcat: 압축된파일을복원하여 stdout 으로출력 주요옵션 -t: 파일무결성체크 (--test) -v: 이름과압축률표시 (--verbose) -h: 도움말 (--help) -r: 디렉터리구조순환 (--recursive) (* 디렉터리를압축하지는않음 )
명령어 : gzip 사용예 vla.tar.gz 를인식하여복원하고 stdout 으로출력되는결과를 v 라는이름의파일로저장 (v = vla.tar).tar 로끝나지않아도 tar 파일임. 복원과묶음해제를동시에 zcat vla.tar tar xvf ( 는 stdin 을의미함 ) gunzip 으로복원시에는같은이름의파일로저장 명령어 : bzip2 최근많이사용되는압축유틸리티 gzip 보다압축률이좋으나느리다. bzip2 [options] [name ] bunzip2 [options] [name ] bzcat [options] [name ] bzip2recover filename 압축을한후파일확장자는.bz2 가붙음 bunzip2 = bzip2 d bzcat: 압축된파일을복원하여 stdout 으로출력 bzip2recover: 손상된압축파일을복원 주요옵션 -t: 파일무결성체크 (--test) -v: 이름과압축률표시 (--verbose) -k: 입력파일보존 (--keep) -f: 같은이름의압축파일을덮어씀 (--force)
압축과묶음 일반적으로 tar 와 zip 을함께사용하여덩어리를만든다. tarball Tarball naming convention.tar.gz ==.tgz.tar.bz2 ==.tbz.tar.z ==.taz.tar.lzma ==.tlz gunzip/bunzip2 등의유틸리티는새로운이름도인식 복원결과는.tar 명령어 : wc 지정한파일내에있는줄수, 단어수, 문자수에대한정보를출력하는명령어 wc [options] [file ] 옵션을지정하지않으면그파일의줄수, 단어수, 문자수및파일명모두를표준출력함 주요옵션 옵션 -l 줄수 -w 단어수 의미 -c 문자수 - bytes -m 문자수 - characters
명령어 : sort 정렬, 합병 (merge), 또는텍스트파일의순서체크 sort [options] [file ] 인수로주어진파일내용의전체줄을대상으로 ASCII 코드순으로정렬되어화면에출력 파일명을지정하지않으면키보드에서표준입력으로읽음 (^D 로끝냄 ) 명령어 : sort 주요옵션 옵션 의미 -b 필드의비교에있어서공백 (space와 tab) 으로시작되는필드즉, 앞에붙는공백을무시한다. -c 파일이정해진순서대로정렬되었는가를확인하기위해정렬안된상태의최초줄을출력한다. -d 사전식순서로정렬시킨다. 이는숫자, 문자, blank(space와 tab) 만을비교한다. -f 파일내의소문자를대문자로간주하여정렬시킨다. 즉대소문자를구별하지않는다. -k 숫자 [, 숫자 ] 정렬의키가되는위치를선택한다. 숫자는필드 ( 열 ) 번호로 1 부터시작하며범위로줄수있다. -m 이미정렬된파일을합병시킨다. -n 문자열의숫자부분을산술적값으로정렬시킨다. 즉숫자들을그값순으로정렬시킨다. -r 역순으로정렬한다. -u 2개이상의줄이중복될때 1줄만출력한다. -o 파일명지정된파일명으로출력하며출력파일명을지정하지않으면화면에표준출력한다. -t 문자문자를필드구분문자로취급한다.
명령어 : comm 두개의 ( 정렬된 ) 파일을줄단위로비교하여공통부분을선택또는삭제 (common) comm [options] file1 file2 옵션 -1: file1 에만있는줄삭제 -2: file2 에만있는줄삭제 -3: 두파일에모두있는줄삭제 명령어 : comm 사용예 cs 박승재장선욱기영상김승장이준영김동현서덕호 sys 이재량강욱재장선욱손명화이준영박지영조윤경이태양 1 열 : cs 에만있는줄 2 열 : sys 에만있는줄 3 열 : 공통으로있는줄
명령어 : grep 파일에서지정한정규식을만족하는패턴찾기 (global regular expression print) grep [options] pattern [file ] 명령어 : grep 옵션옵션 의미 -b 찾는각줄앞에블록번호를붙여서출력한다. -c 찾은줄내용은출력하지않고줄수만출력한다. -e pattern -로시작하는 pattern 정의 -E Extended regular expression 사용 ( egrep) -f file Pattern 이 file 에정의되어있다. 한줄에한 pattern -F Pattern 을정규식이아닌일반문자열로해석 ( fgrep) -i 비교시영문자의대문자, 소문자를구별하지않고비교한다. -w 지정한패턴 ( 문자열 ) 전체와일치하는내용을출력한다. -n 찾은각줄앞에줄번호를붙여서출력한다. -l 결과를출력할때지정한패턴이있는파일명만출력한다. -x 지정된패턴이한라인전체와일치하는내용만을출력한다. -r 지정된디렉토리와그서브디렉토리의모든파일을순환적으로검색하여파일내에서문자열이포함된라인을화면에출력한다. -v 지정한패턴이없는행들만출력한다.
명령어 : grep 정규식 (Regular Expression) 문자열검색시다양한형태의패턴을표현 vi, grep 등에서사용하며, 쉘스크립트, awk, Perl 등의스크립트언어와 google, naver 등검색사이트에서도사용 정규식문법은정해져있으나표현방식은환경에따라조금씩다르다. 정규식의문법 일반문자와메타문자의조합 구성요소 연결 : abc 선택 : a 또는 b 반복 :?(zero or one), *(zero or more), +(one or more) 명령어 : grep 정규식의문법 ( 계속 ) POSIX 메타문자 메타문자 의미 사용예. 하나의문자 (\n 제외 ) a.c: abc, afc 등과매치 [ ] 안에있는문자중하나 [a.c]: a 또는. 또는 c [a-z]: 소문자중하나 [a\-z]: a 또는 또는 z [^ ] 안에없는문자중하나 [^a-z]: 소문자가아닌문자하나 ^ 문자열또는행의시작 ^[hc]at: 행의맨앞이 hat나 cat으로시작 $ 문자열또는행의끝 [hc]at$: 행의맨끝이 hat나 cat으로끝남 \( \) 그룹
명령어 : grep 정규식의문법 ( 계속 ) POSIX 메타문자 메타문자의미사용예 * {n} {n,} {n,m} 0 번이상반복 ( 패턴의뒤에붙인다 ) 정확히 n번매치 n번이상매치 n번이상, m번이하매치 ab*: a, ab, abb, abbb, [xyz]*: x, y, z, xx, yy, xz, zyxxy, \(ab\)*: ab, abab, ababab, 명령어 : grep 정규식의문법 ( 계속 ) POSIX ERE (Extended Regular Expression) 메타문자의미사용예 정규식의문자집합 [:alnum:] A-Za-z0-9 [:alpha:] A-Za-z [:word:] A-Za-z0-9_ [:blank:] \t [:cntrl:] \x00-\x1f\x7f [:digit:] 0-9 [:graph:] \x21-\x7e [:lower:] a-z [:print:] \x20-\x7e [:space:] \t\r\n\v\f [:upper:] A-Z [:xdigit:] A-Fa-f0-9 [:punct:] + 1 번이상반복 ab+: ab, abb, abbbb,? 0 번또는 1 번 [hc]?at: at, hat, cat 선택 (mk rm)dir: mkdir, rmdir -! #$%& ()*+,./:;<=>?@[\\\]_ { }~
명령어 : cut 조건에따라데이터의열을추출하는데사용 cut b list [-n] [file ] cut c list [file ] cut f list [-d delimiter] [-s] [file ] 각줄에서지정한열이나범위가정해진영역 ( 필드라고함 ) 을추출 명령요소 list: 추출할열의목록 ( 오름차순으로 ) 범위는 1,4,7; 1-3,8; -5,10 (1-5,10 의의미 ) 와같이지정 file: 작업대상파일 -b: byte 단위로위치지정 -c: 문자단위로위치지정 -f: 구분자 (delimiter) 로각필드구분한파일사용. 구분자는 d 옵션으로지정하며 default 는 tab 명령어 : cut 사용예
명령어 : paste 사용자가지정한두개이상의파일내용중에서같은줄을연결시키거나한개의파일에서줄을연결 paste [-s] [-d list] [file ] 옵션 -d list: tab 대신 list에있는글자들을구분자로사용 -s: 파일에있는모든줄을한줄로결합 (serial) 명령어 : diff 두파일을줄단위로비교하여차이점을찾는다. diff [options] file1 file2 주요옵션 옵션의미 -b 연속된빈공간 (space, tab 등 ) 을하나의같은것으로취급한다. -i 대소문자를구분하지않는다. -w 빈공간 (space, tab) 을무시하고나머지글자들만비교한다. -c 출력형태를파일정보, 각파일의차이점순서로바꾼다.
명령어 : diff 사용예 명령어 : sed 파일을한줄씩읽어편집 (stream editor) sed [options] script [file1 ] script: 편집명령 [address [, address]] command [arguments] sed 의편집명령은 vi 에서사용할수있다. 차이점은? 주요옵션 -f scriptfile: scriptfile 의내용대로적용 -i: file 의내용을즉시변경
명령어 : sed address number: 줄번호 number1~number2: number1 줄부터시작해서 number2 줄마다 addr1,addr2: addr1 줄부터 addr2 줄까지 addr,+number: addr 부터시작해서 number 줄만큼 $: 마지막줄 /regexp/: regexp 와매치되는모든줄 command #: comment 문 줄끝까지적용 q: sed 를끝낸다. d: 현재처리중인줄을끝내고다음작업시작 p: 현재처리한줄을표준출력. n: 다음줄처리시작 (pattern space 에줄을넣음 ) { }: 여러명령을한번에처리하고싶을때 { } 로싼다. s: s/regexp/replacement/flags 와같은형식으로사용 (substitute) regexp 에해당하는패턴을 replacement 로대체 flag: 추가실행요소 (g: global, 그줄의모든경우에적용 ) 명령어 : sed 일반적으로 script 파일을만들어프로그램화하여실행시킨다. #!/bin/sed -f # 버퍼에 80 칸을넣는다. 1 { x s/^$/ / s/^.*$/&&&&&&&&/ x } # 맨앞과맨뒤의연속공백을지운다. y/(tab)/ / s/^ *// s/ *$// # 줄끝에 \n 과새로운 80 칸을넣는다. G # 처음 81 글자 (80 칸 +\n) 을보관한다. s/^\(.\{81\}\).*$/\1/ # 남은공간의반을잘라앞으로보낸다. s/^\(.*\)\n\(.*\)\2/\2\1/ 상세설명서 http://www.gnu.org/software/sed/manual/sed.html
명령어 : awk 텍스트처리를위한스크립트언어 Aho, Weinberger, Kernighan C, Bourne shell ~ Perl, javascript 언어이므로실행환경이있는어디서나사용가능 Windows 에서도가능 사용법 쉘프롬프트에서 : 별도의프로그램파일 : 자체실행 awk program [file ] awk f progfile [file ] 프로그램맨앞에 #!/bin/awk f 를적는다. 프로그램파일의모드를실행가능하도록설정하고쉘프롬프트에서파일이름을호출한다. 명령어 : awk 프로그램예 b.awk BEGIN {print "File\tOwner"} {print $10, "\t", $4} END {print " - DONE -"}