[시스템] find

3. 시스템 관리 명령 [3] –  find

find 명령어는 시스템 관리 명령중 가장 많이 사용되는 명령어 중 하나이다.

이 명령어의 다양한 기능을 많이 알수록 관리자의 불필요한 삽질을 최대한 줄일수

있을것이다.

option :

-atime  n : 정확히 n 일 전에 access 된 파일

-mtime  n : 정확히 n 일 전에 수정된 파일

-newer [file] : file 보다 최근에 수정된 파일

-size  n  : 정확히 n x 512 byte 의 길이를 갖는 파일

-type  c  : 파일의 종류를 기술. f: 파일 d: 디렉토리

-fstype [filesystem] : 파일 시스템 종류

-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 인 모든 파일

이런 옵션들을 차례로 기술하여 파일을 찾을 경우 AND 연산이 적용된다.

하지만 -o 옵션을 이용하여 OR 을 적용할수도 있고 ( ) 를 이용하여 그

룹을 지어 적용할수도 있다. 이밖에 NOT 연산도 가능한데 옵션 앞에 !

부호를 달아 주면 된다. 밑의 몇가지 예를 살펴 보자.

# find ./ -atime +60 -mtime 120  

( AND 논리연산으로 접근한지 60일 지난 파일중 수정한지 120 일 지난 파일 )

# find ./ \\( -user design -o -group design \\)  

(OR 논리연산으로 소유자나 그룹이 design 인경우 )

# find ./ \\( ! -user design -o ! -group design \\)

(NOT 논리연산으로 소유자나 그룹이 design 이 아닌 경우 )

-perm 옵션은 숫자형태의 특정 접근 모드를 이용하여 파일을 검색하는 옵션이다.

옵션별 사용예를 들어 보자.

-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

옵션 사용시에는 반드시 마지막에 \\; 으로 구문을 마감해야 한다.

예를 들어서 find 로 검색한 파일을 지우기 위해서는 다음과 같이 한다.

# find ./ -name *.* -exec rm -f {} \\;

이와 같이 find 명령어를 이용한 시스템 관리 방법 예를 몇가지 들어 보겠다.

1. 파일 크기가10M 이상이며 한달 이상동안 수정되지 않은 파일을 찾는다.

# find / -type f -size +20480 -mtime +30 -ls

# find / -type f -size +20480 -mtime +30 -exec rm -f {} \\;

(대응되는 파일삭제)

2. 보안에 관련된 팁이다. 모든 setuid, setgid 를 검색한다.

# find / -type f \\( -perm -4000 -o -perm -2000 \\)

# find / -type f \\( -perm -4000 -o -perm -2000 \\) | diff – setuidlist

(찾아된 setuid,setgid를 기존에 작성한 목록과 비교하여 새로 추가 된것이 있는지

를 확인한다. )

단순히 이와 같은 명령어들을 달달 외운다고 해서 시스템 관리를 잘하는것은 아니다.

하지만 시스템 관리자로써의 유연성과 독창성을 가지기 위해서는 위의 명령어 숙달은

필수라고 할수 있을것이다.

이제 어떤 작업이든간의 여러분이 생각하는 방법으로 보다 빠르고 정확한 검색과 결

과를 얻을수 있을거라 생각이 되네요.그럼..이만.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

1 Response

페이스북/트위트/구글 계정으로 댓글 가능합니다.