find 명령어 정리

by 조쉬 posted Feb 27, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
해당 문자열이 포함된 파일을 검색하여 출력
       find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print

 문자열 찾아서 바꾸기
       find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;

 확장자 bak 파일 찾아서 삭제하기
      find ./ -type f -name *.bak -exec rm -f {} \;

 2개이상의 조건으로 검색
      find . -type f \( -mtime -1 -o -ctime -1 \) -print           
      (mtime 또는 ctime 1일 미만인 파일)
      find . -type f \( -mtime -1 -a -ctime -1 \) -print   
      (mtime 과 ctime 모두 1일 미만인 파일)

 pds 폴더의 하위 list 출력
      find . -type d -name 'pds' | xargs ls -al 
find [검색 대상 경로] -옵션
 
옵션
-name filename : 찾고자 하는 파일명 (-name "*.txt")
-atime +n : access time이 현재일 보다 n일 이전인 파일 검색
-atime -n : access time이 현재일 보다 n일 이내의 파일 검색
-mtime +n : 수정일이 현재일 보다 n일 이전인 파일 검색
-mtime -n : 수정일이 현재일 보다 n일 이내인 파일 검색
-type f or d : f - 파일, d - 디렉토리
-maxdepth n : 지정된 경로에서 n개 하위 디렉토리까지 검색
 
find 후 처리
-print : 검색된 파일의 절대 경로를 화면에 출력
-exec 명령어 {} \; : 명령어 구분자로 ;을 사용한다.
 
* 현재 디렉토리에서 확장자가 txt이고 수정일이 3일 이전인 파일 삭제
find ./ -name "*.txt" -a -mtime +3 -exec rm {} \;
 
* 수정된지 10일 이상된 파일 삭제
find ./ -mtime +10 -type f -exec rm -f {} \;
 
* 확장자가 log인 파일 중에서 수정된지 500일 이상인 파일을 ./backup 디렉토리로 이동
find ./ -name "*.log" -mtime +500 -type f -exec mv {} ./backup \;
 
 
option
[찾을 디렉토리경로]
.     : 현재 디렉토리 이하를 검색대상으로 한다.
/     : 루트디렉토리(파일시스템전체) 이하를 대상으로 한다.
~ID : 지정된 ID의 홈디렉토리이하를 대상으로한다.
 
[찾기옵션]
-empty            : 비어있는 파일을 찾는다.
-uid UID          : 지정된 UID를 갖는 파일을 찾는다.
-gid GID          : 지정된 GID를 갖는 파일을 찾는다.
-group 그룹명  : 지정된 group을 갖는 파일을 찾는다.
-name            : 지정된 형식의 패턴을 가지는 파일을 찾는다.
-newer           : 지정된 파일 이후에 생성된 파일을 찾는다.
-perm             : 지정된 퍼미션을 가진 파일을 찾는다.
-used 일자수   : 최근 n일 이후에 변경된 파일을 찾는다.
-user              : 지정된 파일을 소유하고 있는 소유자의 모든 파일을 찾는다.
 
[찾은후 수행할 작업]
-print                    : 찾은 내용을 보여준다.
-exec "수행명령어" : 검색된 파일을 대상으로 :수행명령어"를 실행한다.
 
 
[예제]
특정 사용자의 ID 소유로된 모든 파일 찾기.
[os] find / -user khi083 -print
 
 
현재 디렉토리 이하부터 test 파일명을 찾아 보여준다.
[os] find . -name test -print
 
khi083 사용자의 홈디렉토리에서 test 파일명을 찾아 보여준다.
[os] find ~khi083 -name test -print
 
특정 파일을 찾은 후 자동 삭제방법.
[os] find ~khi083 -name test -exec rm -f {} \;
 
지정한 소유자의 모든 파일을 찾아서 확인하기.
[os] find / -user khi083 -exec ls -l {} \;
 
특정용량 이상되는 파일들 모두찾기.
[os] find /usr/ -size +10000k -exec ls -l {} \;                        -- 약 10MB이상
 
특정 퍼미션을 가지고 있는 파일들을 모두 찾기
[os] find / -perm 4755 -exec ls -l {} \;
 
존재하는 모든 링크파일 찾기
[os] find / -type l -exec ls -l {} \;
 
디렉토리 이하에서 "doc" 라는 문자를 포함하고 있는 파일을 찾아서 파일의 위치와 파일명, 포함된 행을 출력한다.
[os] find /etc type f -exec egrep -i "doc" /dev/null {} \;
 
 
-------------------------------------- 보안 관련된 find --------------------------------------
지정된 일자 이후에 변경된 모든 파일 찾기(서버점검시에 서버해킹으로 인하여 변경된 파일을 찾을 경우)
[os] find / -used 2 -exec ls -l {} \;                                        -- used 뒤에 나오는 숫자는 "일" 즉, 24시간 단위.
 
지정된 파일보다 이후에 생성된 파일 찾기(해킹된 파일이나 백도어 파일을 찾은 후에 그 파일과 함께 시스템에 생성된 파일찾기)
[os] find / -newer /root/file1.txt -exec ls -l {};                          -- used 뒤에 나오는 숫자는 "일" 즉, 24시간 단위.
 
root소유의 SetUID 파일 찾기
[os] find / -user root -perm -4000 -print
 
서버내부에서 .bash_history 파일을 모두 찾아서 확인하기(root소유의 .bash_history파일이 용량이 0이라면 이는 매우 심각한 경우로서 거의 99%이상은 해킹되었다고 보셔도 무방하다.)
[os] find / -name .bash_history -exec ls -l {} \;
 
소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
[os] find / -nouser -o -nogroup -print                                      -- -o옵션은 "OR"를 의미한다
 

 
find 명령어 활용법 정리 

1. 특정문자를 포함하는 파일찾기와 그 문자가 속한 행 찾기
    -  형식 : find 찾을위치 type f -exec egrep -i "포함하는문자" /dev/null {} \;
    -  설명 : 파일에 cmd 라는 단어가 포함되어있는 파일내역을 출력할 수 있다.


2. 소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기
    -  형식 : find 찾을위치 -nouser -o -nogroup -print


3. 쓰기 권한이 있는 파일 및 디렉토리 찾기
    -  형식 : find / -type f \( -perm -2 -o -20 \) -exec ls -lg {} \;
    
-  형식 : find / -type d \( -perm -2 -o -20 \) -exec ls -lg {} \;
    -  설명 : 일반 사용자들에게 쓰기 권한의 퍼미션이 있는 파일이나 디렉토리를 찾을 수 있다.


4. 서버내부에서 .bash_history 파일을 모두 찾아서 확인하기
    -  형식 : find / -name .bash_history -exec ls -l {} \;
    -  설명 : .bash_history파일은 root를 포함하여 각 사용자들의 홈디렉토리에 존재하는 파일로 각 사용자들이

                 사용했던 명령어가 저장되어 있는 파일임. 만약 파일용량이 0 이라면 해킹을 의심 해볼 수도 있다.


5. 서버내부의 .rhosts 파일을 확인하기
    -  형식 : find / -name .rhosts -exec ls -l {} \;
    -  설명 : .rhosts파일은 외부에서 아무런 제한없이 로그인할 수 있는 접근허용이 설정된 파일이다.

                 파일의 존재여부를 확인해야 한다.


6. 서버 내의 백도어 파일 찾기
    -  형식 : find /dev -type f -exec ls -l {} \;
    -  설명 : 서버내에 백도어가 생성되는 위치는 거의 대부분 /dev이다.

                /dev는 장치파일들이 존재하므로 일반적인 파일들이 존재하지 않다.
                만약 /dev에 일반파일이 검색된다면 거의 대부분 백도어 파일이라고 판단할 수 있다. 
               
(요즘은 딱히 그렇지도 않다.)


7. root소유의 SetUID, SetGID 파일찾기
    -  형식 : find / -user root -perm -4000 -print
    -  형식 : find / -type f \( -perm -4000 -o -perm -2000 \)
    -  설명 : root 소유의 SetUID 파일은 실행시에 root 권한으로 실행이 되므로 반드시 관리되어야 할 파일이다.


8. 서버 내에 존재하는 모든 링크파일 검사하기
    -  형식 : find / -type l -exec ls -l {} \;
    -  설명 : 링크파일은 root 이외에는 잘 사용하지 않는 파일이다. 따라서 이러한 링크파일이 목적한 용도 이외에

                 생성이 되었는가를 확인해야 한다.


9. 특정디렉토리내에 존재하는 모든 디렉토리 목록만 확인하기
    -  형식 : find "검색할 디렉토리경로" -type d -print


10. 지정된 파일보다 이후에 생성된 파일 찾기
    -  형식 : find / -newer /root/file1.txt -exec ls -l {} \;
    -  설명 : /root/file1.txt 라는 파일이 생성된 날짜 이후에 생성된 파일을 검색


11. 지정된 일자 이후에 변경된 모든 파일 찾기
    -  형식 : find / -used 2 -exec ls -l {} \; (2일 전에 변경된 적이 있는 파일을 검색한다.) 
    -  설명 : 지정된 일자 이후에 변경된 적이 있는 파일을 찾는 방법


12. 특정 퍼미션을 가지고 있는 파일 찾기
    -  형식 : find / -perm 4755 -exec ls -l {} \;


13. 특정용량 이상되는 파일찾기
    -  형식 : find /usr -size +10000k -exec ls -l {} \; (10메가 이상되는 파일찾기)


14. 지정한 소유자의 모든 파일을 찾기
    -  형식 : find / -user test01 -exec ls -l {} \; (test01 소유자의 모든 파일찾기)

 
  
15. 지정한 소유자가  nobody 인 파일과 퍼미션이 644 인 파일을 동시에 찾기
     - 형식 : find / -user nobody -perm -644 -print | more
     - 설명 : 한페이지에 너무 많이 출력될 경우를 대비해 more를 사용하였다. 해킹용 쉘코드가 삽입된 파일들은
                 대부분이 nobody 에 644 이다. 그래서 위 형식으로 검색할경우 의심파일을 쉽게 찾을수 있다.
 
 
16. 해당 문자열이 포함된 파일을 검색하여 출력
    - 형식 : find ./ -type f -name *.cgi -exec grep "찾을문자열" {} \; -print
 
 
 17. 문자열 찾아서 바꾸기
      - 형식 : find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;
 
 
 18. 확장자 bak 파일 찾아서 삭제하기
      - 형식 : find ./ -type f -name *.bak -exec rm -f {} \;
 
 
 19. 2개이상의 조건으로 검색
      - 형식 : find . -type f \( -mtime -1 -o -ctime -1 \) -print           
                  (mtime 또는 ctime 1일 미만인 파일)
      - 형식 : find . -type f \( -mtime -1 -a -ctime -1 \) -print    
                  (mtime 과 ctime 모두 1일 미만인 파일)
 
 
20. pds 폴더의 하위 list 출력
     - 형식 : find . -type d -name 'pds' | xargs ls -al