- grep

 : 파일 내용이나 콘솔상의 출력 내용에서 특정 문자열을 찾아서 보여줍니다.


1) 파일에서 word 문자열을 찾아 출력합니다.

$ grep word test.txt


2) 현재 디렉토리상에 있는 모든 파일에서 word 문자열이 포함된 줄을 찾아 출력합니다.

$ grep word *


3) 현재 디렉토리 및 하위에 있는 모든 파일에서 word 문자열이 포함된 줄을 찾아 출력합니다.

$ grep -r word * 


4) 파일에서 word 문자열을 찾아 다음 3줄을 포함해서 출력합니다.

$ grep word test.txt -A 3


5) 파일에서 word 문자열을 찾아 이전 3줄을 포함해서 출력합니다.

$ grep word test.txt -B 3


6) 파일에서 word 문자열을 찾아 줄번호를 포함해서 출력합니다.

$ grep word test.txt -n


7) 파일에서 word 문자열이 포함된 줄을 제외하고 출력합니다.

$ grep -v word test.txt


8) 파일에서 (word1 or word2) 문자열이 포함된 줄을 출력합니다. ( or 연산자 = |  는 특수기호이므로 역슬래시를 붙여줍니다. )

$ grep "word1|word2" test.txt


9) 파일에서 (word1 and word2) 문자열이 포함된 줄을 출력합니다.

$ grep word1 test.txt | grep word2


10) 옵션 혼합 가능

$ grep -rn word /home/test -B 5 -A 3


=> /home/test 폴더 하위 모든 파일에서 word 문자열을 찾아서 해당 문자열 이전 5줄, 이후 3줄에 줄번호를 포함해서 출력합니다.


11) pipe 로 다른 명령어의 표준 출력과 연계가능

$ cat /home/test/test.txt | grep word



- find

 : 파일 및 디렉토리 등 검색할 때 사용합니다


1) /home/test 하위 파일, 디렉토리, 링크, 소켓 등등 모든 것을 출력합니다.

$ find /home/test


2) /home/test 하위 파일만 출력합니다. ( -type d = 디렉토리만 출력 )

$ find /home/test -type f


3) /home/test 하위 파일 중 크기가 5MB 이상인 파일만 출력합니다.

$ find /home/test -type f -size +5M


4) /home/test 하위 파일 중 크기가 5MB 이상이고 권한이 644인 파일만 출력합니다.

$ find /home/test -type f -size +5M -perm 644


5) /home/test 하위 파일 중 크기가 5MB 이상이고 파일이 변경된지 5일이 지난 파일만 출력합니다.

(일자 옵션 - s : 초, m : 분, h : 시, d : 일, w : 주)

$ find /home/test -type f -size +5M -mtime +5d 



- exec

 : 앞선 명령어의 결과를 입력으로 받아 “\;” 라는 표기자를 만날때까지 읽고 실행

 : 즉 exec 커맨드의 끝을 ';'(세미콜론)으로 표기해줘야함

 : '+' 옵션은 인자를 연속으로 입력해서 커맨드 한번으로 실행하게끔 해줌


/home/test 에 아래와 같이 3개의 파일이 있을 경우

/home/test/a.txt

/home/test/b.txt

/home/test/c.txt


1) /home/test 하위 파일 중 크기가 5MB 이상인 파일의 출력을 인자로 하여 ls -l 명령어를 실행합니다.

$ find /home/test -type f -size +5M -exec ls -l {} \;

({} <- 위치에 find 결과값의 인자가 들어갑니다.)


위 명령어를 풀어서 써보자면...

$ find /home/test -type f -size +5M -exec ls -l {} \;

=>  $ ls -l  /home/test/a.txt

    $ ls -l  /home/test/b.txt

    $ ls -l  /home/test/c.txt


1) /home/test 하위 파일 중 크기가 5MB 이상인 파일의 출력을 인자로 하여 chmod 명령어를 실행합니다.

$ find /home/test -type f -size +5M -exec chmod 755 {} +


위 명령어를 풀어서 써보자면...

$ find /home/test -type f -size +5M -exec chmod 755 {} +

=>  $ chmod 755 /home/test/a.txt /home/test/b.txt /home/test/c.txt



- xargs

 : exec 커맨드의 + 옵션과 유사하다.

 : 앞선 명령어의 결과를 입력으로 받아 인자를 연속으로 나열하여 커맨드를 실행함

 : {} 문자열은 다른 문자열로 사용할 수 있다.


1) -I 옵션으로 txt 파일을 backup 폴더로 복사 (권장)

$ find /home/test -type f | xargs -I{} cp {} /home/test/backup


2) -i 옵션으로 txt 파일을 backup 폴더로 복사

$ find /home/test -type f | xargs -i cp {} /home/test/backup


3) {} 대신 다른 문자열 사용

$ find /home/test -type f | xargs -IARGS cp ARGS /home/test/backup


매뉴얼에는 -i 옵션은 옛날 방식이므로 -I 옵션을 사용하도록 권고하고 있다. -i 옵션에서 아무것도 지정하지 않을 경우 기본값으로 "{}" 문자열이 사용되고, -I 옵션에는 기본값이 없으므로 반드시 -I{} 이런 식으로 사용해야 한다.



- awk

 : 패턴 탐색과 처리를 위한 명령어로 간단하게 파일에서 결과를 추려내고 가공하여 원하는 결과물을 만들어내는 명령어이다.

 : F 옵션을 통해 구분자를 지정할 수 있다.

 : 구분된 인자는 $1 부터 차례대로 할당된다.


기본 문법

$ awk 'pattern' filename

$ awk '{action}'  filename

$ awk 'pattern' '{action}' filename

$ awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ...  ]


ex) $ ls -al

total 1111

drwxr-xr-x  6 test  staff      192  2 20 10:10  .

drwxr-xr-x  4 test  staff      128  2 20 10:10  ..

-rwxr-xr-x  1 test  staff       100  2 20 10:10 a.txt

-rwxr-xr-x  1 test  staff       100  2 20 10:10 b.txt

-rw-r--r--   1 test  staff       100  2 20 10:10 c.txt


공백으로 분리하면

$1  : '-rw-r--r--'

$2 : '1'

$3 : 'test'

$4 : 'staff'

$5 : '100'

$6 : '2'

$7 : '20'

$8 : '10:10'

$9 : 'c.txt'


$ ls -al | awk -F " " '{print $9}'

.

..

a.txt

b.txt

c.txt


(추가 사항이 생길 경우 수정할 예정입니다.)

+ Recent posts