본문 바로가기

Linux

find 명령어

리눅스에서 매우 유용하게 사용되는 find 명령어에 대해 알아보겠습니다

find 명령어는 이름 그대로 파일을 찾는 명령어이며 사용법은 아래와 같습니다.

find 경로 [옵션]

간단한 사용 예로는

find / -name test.txt

> 전체경로(/)아래에 이름이(-name) test.txt인 파일을 찾아라

라는 의미가 됩니다.

 

1. 경로

경로는 일반적인 리눅스 파일시스템 경로와 동일합니다.

/ 를 주게 되면 최상위 경로,

. 은 현재 디렉토리,

/디렉토리명 은 지정한 디렉토리 경로가 됩니다.

3가지 경로 모두 지정한 시작 위치에서 하위 디렉토리를 모두 포함하여 검색합니다.

 

2. 옵션

-name 파일이름

파일이름으로 검색. * 문자 사용 가능. ex) *.txt, *abc*

-iname 파일이름

대소문자 구분 없이 이름으로 검색. 위의 방식은 대소문자를 구분한다.


-prem +권한/-권한/권한

권한으로 검색.부호가 없을 시 해당 권한을 바로 검색합니다.

- , + 권한

간단하게 얘기해서 -는 해당 권한을 모두 포함하는 파일을 검색하는 조건이고,

+는 해당 권한 중 하나라도 포함하는 파일을 검색하는 조건입니다.

ex) find /tmp -perm -300 이라고 명령을 날렸다고 합시다.

300 퍼미션은 풀어보면, 소유자에 대하여 w(쓰기), x(실행)의 권한이 됩니다.

이 퍼미션을 - 조건을 줘서 날렸으니, 소유자에 대해 w,x의 권한이 둘 다 있는 파일만을 검색하게 됩니다.

이에 반대로, + 조건을 줘서 명령을 날리면, 소유자에 대해 w나 x 중 둘 중 하나라도 포함하는 파일을

검색하게 되는 것이죠.


-type 파일타입

파일의 타입을 지정하여 검색 (d : 디렉토리, f : 파일, l :링크, s : 소켓 등)


-size -크기/+크기/크기

파일 크기로 검색합니다. 여기서의 부호는 위의 perm 보다 훨씬 단순합니다.

-는 해당 크기 이하, +는 해당 크기 이상, 아무것도 붙이지 않으면 해당 크기인 파일을 찾게 됩니다.


-atime +n/-n/n

엑세스 시점으로 검색. cat, sort, open() 등을 하였을 때

-ctime +n/-n/n

파일의 속성값이 바뀐 시점으로 검색. (권한,inode,소유주 등)

-mtime +n/-n/n

파일의 내용이 바뀐 시점으로 검색. 파일의 크기가 속성이므로 ctime도 갱신됩니다.

파일의 크기가 바뀌지 않아도 mtime 자체도 파일의 속성이므로 ctime이 변경됩니다.

즉, mtime의 변경 == ctime의 변경입니다.

n은 정확히 n일 이전, +n은 n일 이후, -n은 n일 이전입니다.

-mtime +3이면 수정된지 3일 이상 파일, -mtime -3이면 수정된지 3일 이내의 파일이 됩니다.

아래 그림은 atime,ctime,mtime 옵션에 대한 설명을 그림으로 아주 잘 설명해주셔서 퍼왔습니다

출처 : 

http://mapoo.net/os/oslinux/find%EB%A1%9C-%EA%B2%80%EC%83%89%EC%8B%9C-%EC%98%B5%EC%85%98%EC%9D%98-atime-ctime-mtime%EA%B3%BC-%EC%A1%B0%ED%95%A9%EB%90%98%EB%8A%94-%EC%8B%9C%EA%B0%84-%EA%B8%B0%EC%A4%80%ED%91%9C/


-user 유저명

유저명으로 검색


-group 그룹

그룹명으로 검색


-nouser

소유자가 없는(/etc/passwd에 없는) 파일 검색


-nogroup

그룹이 없는(/etc/groups에 없는) 파일 검색


-exec 명령어 {} \;

검색된 파일들에 대하여 지정한 명령어를 실행한다.

{}는 find의 검색으로 나온 결과들을 의미하고, 세미콜론은 명령어의 끝을 의미합니다.

세미콜론을 그냥 사용하면 특수문자로 인식하여 find 명령어에게 전달되지 않으므로

앞에 \ 문자를 입력하여 인식되도록 해주어야 합니다.


-newer 파일

지정한 파일보다 이후에 변경(수정)된 파일을 검색


-maxdepth n

경로의 깊이를 지정하여 검색. -maxdepth 1 옵션을 주게 되면 지정한 경로의 1뎁스에서만

파일을 찾게 된다. 1뎁스란 자기 자신을 의미하므로 하위 디렉토리 검색을 안 하겠다는 의미가 된다.


-print

찾은 파일들을 표준 출력으로 출력함. default 설정 되어 있다.

default로 하지 않는 시스템도 있으므로 항상 붙이는 습관을 두는 것이 좋다.


-empty

비어있는 파일/디렉토리를 검색

 

3. 연산자

( ) : 괄호() 안의 연산이 먼저 진행됨. 괄호를 인식시키려면 앞에 \를 써줘야 함.

ex) find / \(-name *test*\) -perm 300

! expr : 부정 연산자. 결과를 반대로 한다.

expr1 -a expr2 : and 연산자. expr1과 expr2가 동일해야 참.

epxr1 -o expr2 : or 연산자. expr1과 expr2 둘 중 하나만 동일해도 참

 

감사합니다.