- 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
(추가 사항이 생길 경우 수정할 예정입니다.)