01. 패턴을 찾아주는 grep(egrep, fgrep) 명령
grep은 입력에서 주어진 패턴을 포함하고 있는 줄을 찾아주는 명령이다. 많은 시스템 관리 명령들과 파이프(pipe)를 이용해서 사용할 수 있다. 흔히 사용하는 것은 프로세스 확인이다.
ps aux | grep httpd
위와 같이 현재 시스템의 프로세스 중 httpd만 검색해 낸다. 만일 pipe를 이용하여 검색할 경우 검색 패턴이 한개 이상일 경우엔 egrep을 이용하여 검색할 수 있다.
ps aux | egrep 'httpd|mysql'
이 밖에 grep는 file 내용 중에 특정 패턴이 들어 있는 행을 찾아서 출력해준다. option을 이용하여 보다 다양한 패턴을 선택하여 검색할 수 있다.
-i : 대소문자 구별을 하지 않는다.
-v : 패턴을 포함하지 않는 행만 출력한다.
-n : 행 번호를 출력한다.
-l : 파일명만 출력한다.
-c : 패턴과 일치하는 라인의 갯수만 보여준다.
-v : 패턴을 포함하지 않는 행만 출력한다.
-n : 행 번호를 출력한다.
-l : 파일명만 출력한다.
-c : 패턴과 일치하는 라인의 갯수만 보여준다.
몇 가지 예를 들어 보자.
grep [option] "pattern" 파일명
대표적인 사용 방법이다. 파일에 pattern이란 단어를 포함하는 행을 출력한다.
grep -v "^[ ^l]*$" 파일명
위는 공백을 제거한 파일 내용 살펴보기
grep -v "^#*$" 파일명
위는 주석을 제거한 파일 내용 살펴보기를 의미한다. 이 밖에 패턴과 정확히 일치하는 것만을 찾아주는 fgrep가 있다. grep, egrep, fgrep의 옵션으로는 위의 옵션을 공통적으로 사용한다.
유용한 팁 하나를 소개해 보겠다. grep는 현재 디렉토리에 존재하는 파일만을 검색한다. 만일 현재 디렉토리와 그 하위 디렉토리까지 grep 패턴 검색을 하고자 할 땐 아래와 같이 find 명령을 이용하면 된다.
find . -exec grep "pattern" {} \;
02 필터 역할을 하는 awk 명령
awk는 grep과 같이 출력된 문장에서 필요한 부분만 걸러내는 필터 역할을 하는 명령어의 일종이다. 사용하기에 따라서 매우 유용하다.
ls -al

위의 출력문은 Tab(공백)으로 각 컬럼을 구분하는데 다음과 같이 하면 원하는 컬럼값만을 선택해서 출력이 가능하다.
ls -al | awk '{print $1 $5 $9}'

위와 같이 1, 5, 9번째 컬럼값만 출력이 된다. 이 밖에 awk는 연산 기능을 가지고 있다.
find /home/webdizen -user webdizen -ls | awk '{sum+=$7}; END {print "User webdizen total disk use = " sum }'

이와 같이 webdizen 권한의 파일들의 크기를 합한 값을 보여준다.
이 명령 라인은 find로 검색한 파일을 ls -al 형식으로 출력한 후 여기서 바이트 수를 가지고 있는 7번째 열의 합계를 누적한다. 그리고 마지막 줄에 최종 결과값을 출력한다. 이 밖에 awk는 평균값도 구할 수 있다. 방법은 의외로 간단하여 END 절의 sum을 sum/NR로 대체하면 평균값이 나온다. NR은 awk내부 변수로서 현재까지의 입력 라인수를 갖는다.
03. 가장 많이 쓰이는 find 명령
find 명령어는 시스템 관리 명령 중 가장 많이 사용되는 명령어 중 하나이다. 이 명령어의 다양한 기능을 많이 알수록 관리자의 불필요한 작업량을 최대한 줄일 수 있을 것이다.
-atime n : 정확히 n일 전에 access 된 파일
-mtime n : 정확히 n일 전에 수정된 파일
-newer [file] : file 보다 최근에 수정된 파일
-size n : 정확히 n x 512byte의 길이를 갖는 파일
-type c : 파일의 종류를 기술. f : 파일 d : 디렉토리
-fstype [filesystme] : 파일 시스템 종류
-name [pattern] : 파일 이름 검색
-perm p : 파일 접근 퍼미션이 p인 경우
-user [user] : 파일 소유권이 user인 파일
-group [group] : 파일 그룹이 group인 파일
-nouser : 파일 소유자가 /etc/passwd에 없는 경우
-nogroup : 파일 소유 그룹이 /etc/group에 없는 경우
-uid n : 파일 uid가 n인 경우
-gid n : 파일 gid가 n인 경우
-mtime n : 정확히 n일 전에 수정된 파일
-newer [file] : file 보다 최근에 수정된 파일
-size n : 정확히 n x 512byte의 길이를 갖는 파일
-type c : 파일의 종류를 기술. f : 파일 d : 디렉토리
-fstype [filesystme] : 파일 시스템 종류
-name [pattern] : 파일 이름 검색
-perm p : 파일 접근 퍼미션이 p인 경우
-user [user] : 파일 소유권이 user인 파일
-group [group] : 파일 그룹이 group인 파일
-nouser : 파일 소유자가 /etc/passwd에 없는 경우
-nogroup : 파일 소유 그룹이 /etc/group에 없는 경우
-uid n : 파일 uid가 n인 경우
-gid n : 파일 gid가 n인 경우
단순히 위의 옵션대로 사용하면 그렇게 유용해 보이지 않을 수 있을 것이다. 예를 들어 누가 정확히 3일 전에 접근한 파일들으 검색할 것인가? 하지만 +, - 기호를 이용하여 기간, 시간, 크기와 같은 수치들의 범위를 지정할 수 있다.
+ 는 ~~ 보다 큰 경우, - 는 ~~ 보다 작은 경우
-mtime +7 : 수정된 지 7일이 지난 파일
-mtime -7 : 수정된 지 7일이 안된 파일
-size +100 : 50kbyte 보다 큰 파일
-name 뒤엔 인용 부호(와일드 카드 문자)를 같이 사용할 수 있다.
-name *.dat : 확장자가 dat인 모든 파일
-mtime +7 : 수정된 지 7일이 지난 파일
-mtime -7 : 수정된 지 7일이 안된 파일
-size +100 : 50kbyte 보다 큰 파일
-name 뒤엔 인용 부호(와일드 카드 문자)를 같이 사용할 수 있다.
-name *.dat : 확장자가 dat인 모든 파일
이런 옵션들을 차례로 기술하여 파일을 찾을 경우 AND 연산이 적용된다. 그리고 -o 옵션을 이용하여 OR을 적용할 수도 있고 ( )를 이용하여 그룹을 지어 적용할 수도 있다. 이 밖에 NOT 연산도 가능한데 옵션 앞에 ! 부호를 달아 주면 된다. 밑의 몇 가지 예를 살펴보자.
find ./ -atime +60 -mtime 120
(AND 논리 연산으로 접근한지 60일 지난 파일 중 수정한 지 120일 지난 파일)
find ./ \( -user webdizen -o -group webdizen \)
(OR 논리 연산으로 소유자나 그룹이 webdizen인 경우)

find ./ \( ! -user webdizen -o ! -group webdizen \)
(NOT 논리 연산으로 소유자나 그룹이 webdizen이 아닌 경우)

-perm 옵션은 숫자 형태의 특정 접근 모드를 이용하여 파일을 검색하는 옵션이다.
옵션별 사용 예를 들어보자.
-perm 75 : permission = 755
-perm -002 : 모든 사람들이 기록할 수 있는 파일
-perm -4000 : SUID 엑세스 설정
-perm -2000 : SGID 엑세스 설정
옵션별 사용 예를 들어보자.
-perm 75 : permission = 755
-perm -002 : 모든 사람들이 기록할 수 있는 파일
-perm -4000 : SUID 엑세스 설정
-perm -2000 : SGID 엑세스 설정
그 외에도 지원되는 내부 옵션들이 있다.
-print : 대응되는 파일의 경로명을 출력
-ls : 대응되는 파일에 대한 긴 디렉토리 목록을 출력
-exec commands : 대응되는 파일에 대해 commands 명령 수행
-ok commands : 파일에 대한 commands 명령 수행 전에 입력 대기 상태
-xdev : 검색 시작 디렉토리가 속해 있는 파일 시스템에 대해서만 검색 제한
-mount : IRIX와 SCO UNIX에서 -xdev 옵션
-prune : 서브 디렉토리는 검색을 하지 않음
-print 옵션은 근래는 기본으로 들어간다. 굳이 붙일 필요는 없고, -exec, -ok 옵션 사용 시에는 반드시 마지막에 \; 으로 구문을 마감해야 한다.
-ls : 대응되는 파일에 대한 긴 디렉토리 목록을 출력
-exec commands : 대응되는 파일에 대해 commands 명령 수행
-ok commands : 파일에 대한 commands 명령 수행 전에 입력 대기 상태
-xdev : 검색 시작 디렉토리가 속해 있는 파일 시스템에 대해서만 검색 제한
-mount : IRIX와 SCO UNIX에서 -xdev 옵션
-prune : 서브 디렉토리는 검색을 하지 않음
-print 옵션은 근래는 기본으로 들어간다. 굳이 붙일 필요는 없고, -exec, -ok 옵션 사용 시에는 반드시 마지막에 \; 으로 구문을 마감해야 한다.
예를 들어서 find로 검색한 파일을 지우기 위해서는 다음과 같이 한다.
find ./ -name *.* -exec rm -f {} \;
find 명령어를 이용한 시스템 관리 방법 예를 몇 가지 더 들어 보자.
파일 크기가 20M 이상이며 30일 이상 동안 수정되지 않은 파일을 찾는다.
find / -type f -size +20480 -mtime +30 -ls
find / -type f -size +20480 -mtime +30 -exec rm -f {} \; (대응되는 파일 삭제)
find / -type f -size +20480 -mtime +30 -exec rm -f {} \; (대응되는 파일 삭제)
보안에 관련된 팁으로서, 모든 setuid, setgid를 검색한다.
find / -type f \( -perm -4000 -o -perm -2000 \)
find / -type f \( -perm -4000 -o -perm -2000 \) | diff -setuidlist
(검색된 setuid, setgid를 기존에 작성한 목록과 비교하여 새로 추가 된 것이 있는지를 확인한다.)
find / -type f \( -perm -4000 -o -perm -2000 \) | diff -setuidlist
(검색된 setuid, setgid를 기존에 작성한 목록과 비교하여 새로 추가 된 것이 있는지를 확인한다.)










::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::