posted by 귀염둥이채원 2018. 11. 27. 02:33

리눅스 find명령어


리눅스에서 find명령어는 파일 시스템에서 주어진 조건으로 파일을 찾는다

find /대상디렉토리 -옵션 처리방법

대상 디렉토리 : 찾을 파일의 시작할 디렉토리를 지정한다

옵션 : 찾을 조건을 입력한다

-name 파일 이름 : 파일 이름으로 찾는다


-atime +n

access time이 n일 이전인 파일을 찾는다

ex) find /etc -atime +7 : 7일 이전에 파일을 검색한다


-atime -n

access time이 n일 이내 파일을 찾는다

ex) find /etc -atime +n : 7일 동안 파일을 검색한다


-mtime +n

n일 이전에 변경된 파일을 찾는다

ex) find /etc/ -mtime +7 : 7일 이전에 파일을 검색한다


-mtime -n

n일 이내의 변경된 파일을 찾는다

ex) find /etc/ -mtime -7 : 7일 이내에 파일을 검색한다 

-perm nnn

파일 권한이 nnn인 파일을 찾는다

ex) find /etc/ -perm nnn : nnn일 권한을 가진 파일을 찾는다


-type x

파일 type이 x인 파일을 찾는다

ex) find /etc/ -type x : 파일 타입이 x인 파일을 찾는다


-size n

사이즈가 n이상인 파일들을 찾는다

find /etc -size 8 : 파일을 8이상인 파일을 찾는다


-links n

링크된 개수가 ndls vkdlfemfdmf ckwsmsek


-user username

user 이름으로 찾는다

ex) find /etc -user nobody : nobody이름으로 찾는다 


-group nobodygroup

그룹이름을 찾는다


-print

찾은 파일의 절대 경로명을 화면에 출력한다


-exec cmd {};

찾은 파일들에 대한 cmd 명령어를 실행한다


find [찾을 디렉토리경로] [찾기옵션] [찾은후행할 작업]


찾기홉션

-empyty : 비어있는파일

gidn : 특정 gid를 갖는 파일

group gname : 특정 grop에 속한 파일

name : wlwjdgks gudtlrdmf rkwsms vkdlfdlfma

newer : 특정 파일 이후에 생성된 파일

perm : 특정 허가모드를 가지고 있는 파일

uid n : 특정 uid를 갖는 파일

used n : 특정파일을 소유하고 있는 소유자의 파일


[찾은후 행할 작업]

-print : 찾은 파일을 보여준다

-exec : 찾은 파일들에 대해 특정명령을 수행한다


그럼, 사용예를 들어 보겠습니다.


find . -uid 504 -print


./home/sspark

./home/sspark/.Xdefaults

./home/sspark/.bash_logout

./home/sspark/.bash_profile

./home/sspark/.bashrc


위의 예는 현재디렉토리(.)에서부터 uid가 504인 사용자의 파일을 찾아서 보여달라는 것입니다.(-print)


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로 끝나는 파일을 찾아서 보여달라는 것입니다.


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' {} \;