find 명령어는 파일 시스템에서 주어진 조건으로 파일을 찾는다.
사용법을 살펴보자.
find 대상디렉토리 검색 조건 처리 방법
대상 디렉토리 : 찾기를 시작할 디렉토리를 지정한다.
검색 조건 : 찾을 조건을 지정한다.
-name filename
파일 이름으로 찾는다.
-atime +n
access time 이 n일 이전인 파일을 찾는다.
-atime -n
access time이 n일 이내인 파일을 찾는다.
-mtime +n
n일 이전에 변경된 파일을 찾는다.
-mtime -n
n일 이내에 변경된 파일을 찾는다.
-perm nnn
파일 권한이 nnn인 파일을 찾는다.
-type x
파일 타입이 x인 파일들을 찾는다.
-size n
사이즈가 n이상인 파일들을 찾는다.
-links n
링크된 개수가 n인 파일들을 찾는다.
-user username
user이름으로 찾는다.
-group groupname
group 이름으로 찾는다.
처리방법 : 찾은 파일을 어떻게 할 것인지를 지정한다.
-print
찾은 파일의 절대 경로명을 화면에 출력한다.
-exec cmd {};
찾은 파일들에 대해 cmd 명령어를 실행한다.
find [찾을 디렉토리경로] [찾기옵션] [찾은후행할 작업]
[찾을 디렉토리경로]에는 다음과 같은 것들이 있다.
· : 현재 디렉토리이하
/ : 루트디렉토리이하(파일시스템전체)
~ID : 특정ID의 홈디렉토리이하
[찾기옵션]에는 다음과 같은 것들이 있다.
- empty : 비어있는 파일
- gid n : 특정 gid를 갖는 파일(n : 특정 gid)
- group gname : 특정 group에 속한 파일(gname : group명)
- name : 지정한 형식을 갖는 파일이름
- newer : 특정 파일 이후에 생성된 파일
- perm : 특정 허가모드를 가지고 있는 파일
- uid n : 특정 uid를 갖는 파일(n : 특정 uid)
- used n : 최근에 n일 이후에 변경된 파일(n : 일수)
- user : 특정파일을 소유하고 있는 소유자의 파일
[찾은후 행할 작업]에는 다음과 같은 것들이 있다.
- print : 가장많이 쓰는 옵션으로 찾은 파일을 보여준다.
- exec : 찾은 파일들에 대해 특정명령을 수행한다.
그럼, 사용예를 들어 보겠습니다.
[root@ciss9 /]# find . -uid 504 -print
./home/sspark
./home/sspark/.Xdefaults
./home/sspark/.bash_logout
./home/sspark/.bash_profile
./home/sspark/.bashrc
위의 예는 현재디렉토리(.)에서부터 uid가 504인 사용자의 파일을 찾아서 보여달라는 것입니다.(-print)
[root@ciss9 /]# find ~sspark -name *.shtml -print
./home/sspark/public_html/sample.shtml
./home/sspark/public_html/testpass/sample.shtml
./home/sspark/public_html/testdir/sample.shtml
위의 예는 sspark이라는 사용자의 소유로된 파일중 shtml로 끝나는 파일을 찾아서 보여달라는 것입니다.
[root@ciss9 /root]# find ~sspark -name *.doc -exec rm -f {} \;
위의 예는 sspark이라는 사용자의 홈디렉토리(~sspark)이하에 존재하는 doc로 끝나는(*.doc) 파일을 찾아서 묻지말고(-f) 지워(rm)버리라는 명령어입니다.
이 명령어는 웹호스팅사용자에게 보다도 서버관리자에게 더욱 유용한 명령어로서 서버관리를 하다보면 어떤 파일이 어디에 위치하고 있는지 찾아야 할 때가 많습니다. 이런 경우에 매우 유용하게 사용됩니다.
예를 들어보자.
$ find /user4 -name test* -print
/user4 아래에서 파일이름이 test로 시작하는 모든 파일을 찾아서 화면에
보여준다.
$ cd /
$ find . -name ping -print
root 디렉토리 밑에서 파일이름이 ping인 파일을 찾아 절대 경로명을 화면에
출력한다.
$ cd /
$ find /usr -name *.c -print
/usr 밑에 이름이 .c로 끝나는 모든 파일들을 찾아 경로명을 보여준다.
$ cd /
$ find $home -name who.txt -print
home 디렉토리 아래에 who.txt라는 파일을 찾아 경로명을 보여준다.
$ cd /
$ find . -type d -print
파일 타입이 d인 파일을 찾아 경로명을 화면에 출력한다.
$ cd /
$ find /dev -type c -print
/dev디렉토리 아래에서 파일 타입이 c인 파일을 찾아 경로명을 보여 준다.
$ cd /
$ find . -perm 700 -print
파일 권한이 700인 파일을 찾아준다.
$ cd /
$ find . \ ( -perm 400 -o -perm 200 ) -print
파일 권한이 400인 파일과 200인 파일을 찾아준다.
(주의 : "\"의 앞뒤에 space 가 반드시 있어야 한다.)
$ cd /
$ find . -size +1024 -print
파일의 블럭 크기가 1024 이상인 파일을 찾아준다.
$ cd /
$ find . -name core -size +2048 -print
파일 이름이 core이고 크기가 2048블럭 이상인 파일을 찾아준다.
$ cd /
$ find . -user unix01 -print
파일 소유자가 unix01인 파일을 찾아준다.
$ cd /
$ find . -group unix -print
사용자그룹이 unix인 파일을 찾아준다.
$ cd /
$ find . -atime +30 -print
30일 이전에 억세스되었던 파일을 찾는다.
$ cd /
$ find . -mtime -7 -print
7일 이내에 수정된 적이 있는 파일을 찾는다.
$ cd /
$ find . -name core -exec ls -l {} \;
이름이 core인 파일을 찾아서 ls -l 한다.
$ cd /
$ find . -name \*.c -atime +30 -exec ls -l {} \;
30일 이전에 억세스된 파일 중 *.c를 찾아 ls -l 한다.
$ cd /
$ find . -name core -exec rm -i {} \;
현재 디렉토리 밑에서 이름이 core인 파일을 찾아 지운다(지우기 전에 정말
지울 지를 물어본다.)
grep와 함께 사용한 find명령어 strcpy 문자열을 포함한 현재디렉토리 아래의 *c파일
grep strcpy `find ./ -name *c`
8. 최상위 root에서 파일 찾기
find /
home directory 밑에서 찾기
find ~ -name sample
find ~ -name 'file*'
home directory에서 파일명에 file이 들어가면서 타입이 f(일반파일인)경우
find ~ -name 'file*' -a -type f
특정 디렉토리에서 사용자 unix05가 만든 파일 찾기
find /data2/unix -user unix05
9. core
실행하다가 오류가 있는 파일 core
(ex. sleep 20) ctrl+\ 강제종료하면 core 파일이 생성됨
실행하다가 종료되어도 생김 (cat으로 열수 없음(개발자가 debugger로만 확인할 수 있음, 파일 크기가 굉장히 큼)
core파일 찾기
find ~ -name core
core파일 삭제
find ~ -name core -exec rm {} \;
HDD 용량 줄이기
find / -name core -exec rm {} \;
10. passwd 파일을 찾을 때 뜨는 2>(오류메시지)를 /dev/null로 보냄 -오류메시지 안 보임
find / -name passwd 2> /dev/null
ls -i passwd (passwd 파일의 inode찾기)
find / -inum 108235 2> /dev/null (inode가 같은 것을 찾음)
11. 최근 3일 사이에 마지막 수정되고 파일타입은 일반타입인 로그파일(/var/adm에 있음) 찾기
find /var/adm -mtime -3 -a -type f
12. /etc 디렉토리에서 일반파일 중 파일의 크기가 4096 byte 이하인 파일 찾기 (1block = 512byte)
find /etc -size -8 -a -type f
find /etc -size -1 -a -type f 2> /dev/null 512바이트 이하 파일 찾기 (오류메시지는 /dev/null로 보내기)
13. etc + k 이전에 입력했던 내용
| more 내용을 페이지별로 보여주기 (많은 내용일 경우)
find ~ -name '*.sql' -exec grep -il 'linkcomp' {} \;
출처 : http://jobdahan.net/server_linux/1498195
|