메뉴 건너뛰기

2014.02.27 12:10

find 명령어 정리

조회 수 7320 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
해당 문자열이 포함된 파일을 검색하여 출력
       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

List of Articles
번호 제목 날짜 조회 수
77 AIDE를 이용한 리눅스 파일 시스템의 무결성 점검 2014.03.26 8545
76 qmail 587 포트 추가 2014.03.26 7388
75 sendmail 587 포트 사용 2014.03.26 7728
74 Proftp 설치 2014.03.26 7022
73 Apache 웹서버 server-status 모니터링 file 2014.03.26 6954
72 chkrootkit 0.49 설치 및 사용법 그리고 변조파일 정상 복원 2014.03.26 8869
71 ZendOptimizer 3.3.9 설치하기 2014.03.26 7006
70 웹호스팅용 리눅스 서버 셋팅 file 2014.03.26 7940
69 시스템 이상시 복구 모드 사용법..(rescue mode) Linux 2014.03.26 7260
68 mail 명령어 사용법 2014.03.26 7107
67 ncftp 설치및 스크립트 백업 방법 file 2014.02.27 7928
66 rsync 와 ssh 를 이용한 네트워크 백업하기 2014.02.27 7747
65 ssh에서 sftp 사용 막기 2014.02.27 7494
64 Apache(아파치)를 사용해 redirect(리다이렉트) 하는 방법 7 2014.02.27 7649
63 yum (Yellowdog Updater Modified) 명령어 정리 2014.02.27 7625
62 Apache 웹서버 server-status 모니터링 2014.02.27 8074
61 웹호스팅용 리눅스 서버 셋팅 file 2014.02.27 7735
60 리눅스 해킹사고 분석 및 대응절차 2014.02.27 8497
59 LILO, GRUB root 패스워드 리셋 2014.02.27 7895
58 OpenSSH chroot 설정 file 2014.02.27 8742
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 Next
/ 12

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved