본문 바로가기
Linux/CentOS7

find 파일 및 디렉토리 검색

by refer 2024. 9. 10.
반응형

[개념]

 

find 명령어는 파일 또는 디렉토리를 검색하는 명령어 이다.

이 명령어는 단순히 파일을 찾는 역할만을 하는 것이 아니라, 찾은 파일에 대해서 특정 작업까지 할 수 있다.

 

예)

(1) 찾은 파일을 모두 삭제 할 수 있다.

(2) 찾은 파일을 퍼미션(chmod) 변경 또는 소유자(chown)를 변경할 수 있다.

 

이런 작업을 find 명령어 내에서 모두 한번에 적용할 수 있다.

 

파일을 찾을 때에도 다양한 방법으로 찾을 수 있도록 많은 옵션과 방법들이 있다.

특정 파일 하나만을 찾을 수 있고, 특정 문자 패턴에 맞는 파일을 검색하거나, 확장자를 검색하거나,

특정 소유자의 파일을 찾거나, 소유자가 없는 파일을 찾거나, 특정 파일사이즈 이상 되는 파일을 찾거나,

지정된 퍼미션을 가진 파일을 찾거나 등 매우 다양하게 사용자의 응용된 방법으로 확인할 수 있다.


[기본 사용법]

 

find [OPTION] ... [Path] ... [Expression] 

 

예) 파일 찾기

find /usr -name *.jsp


[자주 사용되는 옵션]

옵션 기능
-name 패턴 파일명에 기초하여 쉘 패턴에 맞는 파일을 찾는다. 기본적으로 파일명을 지정한다. 와일드카드 사용이 가능하다.
-uid UID 지정된 UID를 갖는 파일을 찾는다.
-gid GID 지정된 GID를 갖는 파일을 찾는다.
-group 그룹명 지정된 그룹명을 가진 파일을 찾는다.
-user 소유자 지정된 파일을 소유하고 있는 소유자의 모든 파일을 찾는다.
-perm 모드 지정된 퍼미션을 가진 파일을 찾는다.
-newer 파일 지정된 파일 이후에 생성된 파일을 찾는다.
-used n 상태가 변경된 후로 최종 접근된 지 n일 지난 파일을 찾는다.
-type 파일 형식을 지정하여 지정한 형식의 파일을 찾는다. d(디렉토리) , c(입출력 특수 파일) , b(블록 파일) , l(심볼릭 링크 파일) , p(파이프 파일) , f(일반 파일) , s(소켓 파일) 등을 지원한다.
-links 특정 개수의 링크를 가진 파일 찾기
-size 파일 크기가 일치하는 파일 찾기
-atime n n일 전에 액세스한 파일 찾기. 범위를 정할 때에는 +n 또는 -n 형식으로도 사용이 가능하다.
-mtime n n일 전에 마지막으로 수정된 파일 찾기. 범위를 정할 때에는 +n 또는 -n형식으로도 사용이 가능하다.
-exec 찾은 파일들을 대상으로 뒤에 나오는 명령어를 실행하도록 한다. {}는 검색된 파일들이 하나씩 대입되는 것을 의미하며, 검색된 파일의 개수만큼 명령이 실행된다. 마지막에는 \; 를 붙인다.
-print 표준 출력에서 완전한 파일명을 출력하도록 한다.

 


[테스트]

 

(1) -name 기본적인 파일명 찾기

 

(1-1) 하위 디렉토리에 있는 특정파일 검색하기

 

 

(1-2) 추가 (예제

 

- 현재 디렉토리에서 a로 시작하는 모든 파일 검색 : find . -name 'a*'

- 현재 디렉토리에서 b로 끝나는 모든 파일 검색 : find . -name '*b'

- 현재 디렉토리에서 a로 시작하고 b로 끝나는 모든 파일 검색 : find . -name 'a*b'

- 현재 디렉토리에서 .txt로 끝나는 모든 파일 검색 : find .-name '*.txt'

- 현재 디렉토리에서 jpg , jpeg 등 jp로 들어간 이미지 확장자 파일 검색 : find . -name '*.jp'

- 현재 디렉토리에서 중간에 a가 들어간 5글자 파일 검색 : find . -name '??a??'

- 현재 디렉토리에서 ab로 시작하는 3글자 파일 검색 : find . -name 'ab?'

- 현재 디렉토리에서 abc.으로 시작하고 3가지 글자로 끝나는 파일 검색 : find . -name 'abc.???'

- 특정 사용자의 홈디렉토리 내에서 특정 파일을 검색 : find ~yubi -name *.jsp -print

 


(2) -uid UID 지정된 UID를 갖는 파일을 찾기

 

특정 사용자의 UID 찾기 : id -u username

 

사용자와 관련된 UID와 그룹 찾기 : id username

 

 

UID root 가 갖는 파일 찾아보기...

 

(2-2) 추가 (예제

 

- root 소유의 SetUID 파일을 검색(서버 보안 점검 시 사용) : find / -user root -perm -4000 -pring

- 파일 퍼미션에 SetUID 또는 SetGID가 있는 파일을 모두 찾아 검색(-o는 or을 의미함) :

   find /usr -type f \ ( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

- 소유자 또는 소유그룹이 없는 파일 검색(서버 보안 점검 시 사용) : find / -nouser -o -nogroup -print

 

 


(3) -gid GID 지정된 GID를 갖는 파일을 찾기

 

특정 사용자의 GID 찾기 : id -g username

 

사용자가 속한 모든 그룹 찾기 : id -G username

 

사용자와 관련된 UID와 그룹 찾기 : id username

 

 

GID hansol 가 갖는 파일 찾아보기...


(4) -group 그룹명을 가진 파일 찾기

 

그룹명 root 가진 파일들이 매우 많이 나타난다.

 

그룹명 root는 0 이다. 위와 같은 결과값을 확인할 수 있다.


(5)  -user 소유자가 가진 파일 찾기

 

 

(5-1) 추가 (예제

- 특정 사용자의 ID 소유로 된 모든 파일을 찾는 예제 : find / -user yubi -print


(6)  -perm 지정된 퍼미션을 가진 파일 찾기

 


(6-2) 추가 (예제

 

- 쓰기 권한이 있는 파일을 검색(서버 보안 점검 시 사용) : find / -type f \ ( -perm -2 -o -perm -20\) -exec ls-l {} \;

- 쓰기 권한이 있는 디렉토리를 검색(서버 보안 점검 시 사용) : find / -type d \ (-perm -2 -o -perm -20 \) -exec ls -ld {} \;  


(7)  -newer 지정된 파일 이후에 생성된 파일 찾기

 

File11 은 나중에 만들어진 파일이다.

 

즉, File1 이후에 생성된 최근 파일이 무엇인지 알 수 있다.

 


(8)  -used n 상태가 변경된 후로 최종 접근된 지 n일 지난 파일 찾기


(9)  -type 특정 파일 형식을 지정하여 파일 찾기


(10)  -file 파일 크기가 일치하는 파일 찾기

 

(10-1) 추가 (예제

- 특정 용량 이상 되는 파일들을 모두 검색 : find / -size +30000k -exec ls-l {} \;

- 현재 디렉토리에서 1024byte보다 크기가 큰 파일 검색 : find . -size +1024c

- 현재 디렉토리에서 1024byte보다 크기가 작은 파일 검색 : find . -size -1024c

- 현재 디렉토리에서 1MB보다 크고 512MB보다 작은 파일 검색 : find . -size +1M -size -512M

- 현재 디렉토리에서 빈 디렉토리 혹은 파일 크기가 0인 파일을 검색 : find . -empty

- 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제 : find . -name '*' -empty -delete


(11) exec 검색한 파일에 대해 추가 명령어 실행하기

 

(11-1) 추가 (예제

 

- 현재 디렉토리에 있는 파일 중에 파일 내용에 choyubi라는 내용이 들어가 있는 파일들 찾기 :

   find . -type f -exec grep 'abcd' {} \;

- 현재 디렉토리에 있는 .apk로 끝나는 파일 모두 삭제find . -name '*.apk' -exec rm -f {} \;

- 리눅스 시스템내의 특정파일들을 검색하여 자동으로 삭제 : find ~yubi -name *.bak -exec rm -vf  {} \;

- 지정한 소유자의 모든 파일을 찾아서 확인 : find / -user yubi -exec ls -l {} \;

- 특정 퍼미션 가지고 있는 모든 파일을 검색 : find / -perm 4755 -type f -exec ls -l {} \;

- 파일이 최근 상태가 변경된 후, 최종 접근된 지 n일 지난 모든 파일 검색 : find / -used 2 -exec ls -l {} \;

- 파일이 90일이 넘는 기간 동안, 수정되지 않았을 경우 파일들을 삭제 : find ~yubi -mtime +90 -exec rm -f {} \;

- 지정된 파일 이후에 생성된 파일을 검색 : find / -newer /root/fixFile -exec ls -l {} \;

- 특정 디렉토리 내에 존재하는 모든 링크파일 검색(서버 보안 점검 시 사용) : find / -type l -exec ls -l {} \;

- 특정 문자를 포함하는 파일을 찾고 해당 파일에서 그 문자가 속한 행을 확인 :

   find /home/yubi -type f -exec egrep -i "doc" /dev/null {} \;

 


자세한 옵션은 find --help 또는 man find로 확인할 수 있다.

반응형