KOROMOON

착한 사마리아인이 되고 싶습니다.

3/14/2020

리눅스 find 명령어


( 1 ) 설명

주어진 조건에 따라 디렉토리의 트리를 검색하여 해당되는 파일을 찾는 명령어임.
자주 쓰는 명령어이자 반드시 숙지해야 할 명령어임.
find --help 명령어로 도움말을 볼 수 있으나 자세하게는 나오지 않으며 man find 로 보면 상세히 알 수 있음.



( 2 ) 옵션 설명
기본 형식 : find [찾을 위치][검색 조건][작업]
찾을 위치에서 "." 은 현재 디렉토리를 나타내며 "/" 는 루트 디렉토리를 나타냄.
주로 쓰는 검색 조건은 다음과 같음.

-name 파일명   : 지정된 이름의 파일을 찾음
                 와일드카드 * 를 사용 시 따옴표 "" 로 묶어줘야 함
-perm N        : 지정된 N 퍼미션을 찾음

-size N        : 지정된 N 사이즈의 파일을 찾음
                 아래 N 은 실제 파일 용량이 아닌 파일이 차지한 공간을 기준으로 함
                +N - N 사이즈 이상의 파일을 찾음
                -N - N 사이즈 이하의 파일을 찾음
                 N - N 사이즈의 파일을 찾음
                 b - 512 바이트
                 c - 바이트
                 k - 킬로바이트
                 w - 2 바이트
                 m - 메가바이트
                 g - 기가바이트
-empty         : 빈 디렉토리나 파일을 찾음
-type          : 지정된 파일의 형식을 찾음
                 b - 블록 파일
                 c - 문자
                 d - 디렉토리
                 f - 파일
                 l - 링크 파일
                 s - 소켓
-xtype         : type 조건과 같으나 심볼릭 링크의 경우 그 대상 파일까지 찾음
-links N       : N 개의 링크를 가진 파일을 찾음
-inum N        : 지정한 inode 번호와 파일을 찾음

-amin N        : N 분 전에 마지막으로 접근한 파일들을 찾음
-cmin N        : N 분 전에 마지막으로 퍼미션을 변경한 파일들을 찾음
-mmin N        : N 분 전에 마지막으로 내용을 수정한 파일들을 찾음
-atime N       : 지정한 N 일에 대한 액세스된 파일을 찾음
                +N - N 일 또는 그보다 더 오래 전의 액세스된 파일을 찾음
                -N - 오늘부터 N 일 전까지의 액세스된 파일을 찾음
                 N - 정확히 N 일 전에 액세스된 파일을 찾음
-ctime N       : 지정된 N 일에 대한 퍼미션을 변경한 파일을 찾음
                +N - N 일 또는 그보다 더 오래 전의 퍼미션을 변경한 파일을 찾음
                -N - 오늘부터 N 일 전까지의 퍼미션을 변경한 파일을 찾음
                 N - 정확히 N 일 전에 퍼미션을 변경한 파일을 찾음
-mtime N       : 지정된 N 일에 대한 내용을 수정한 파일을 찾음
                +N - N 일 또는 그보다 더 오래 전의 내용을 수정한 파일을 찾음
                -N - 오늘부터 N 일 전까지의 내용을 수정한 파일을 찾음
                 N - 정확히 N 일 전에 내용을 수정한 파일을 찾음
-anewer 파일명 : 지정된 파일보다 더 최근에 접근한 파일들을 찾음
                 (-follow 옵션을 쓸 경우 이 옵션을 더 앞에 써야 함)
-cnewer 파일명 : 지정된 파일보다 더 최근에 수정된 파일들을 찾음
                 (-follow 옵션을 쓸 경우 이 옵션을 더 앞에 써야 함)
                 일부 UNIX 버전에서는 -newer 를 사용함

-user 사용자명 : 지정된 소유자의 파일을 찾음
-nouser        : 파일의 소유자가 없는 파일을 찾음
                 특정 사용자를 삭제했을 경우 그 사용자가 이전에 만들어두었던 파일을 이 옵션으로 찾을 수 있음.
-group 그룹명  : 지정된 그룹 소유의 파일을 찾음
-nogroup       : 파일의 그룹명이 없는 파일을 찾음
                 특정 그룹명을 삭제했을 경우 그 그룹명으로 이전에 만들어두었던 파일을 이 옵션으로 찾을 수 있음.
-uid N         : UID 가 N 인 사용자를 찾음
-gid N         : GID 가 N 인 그룹명을 찾음

-print         : 기본값으로 설정되어 있으며 찾은 후 화면 출력함
-fprint        : 결과를 파일로 출력함

()             : 연산자들을 그룹화함
-o 또는 -or    : 앞 뒤 조건 중의 하나라도 일치하면 찾음
                 만약에 -o 또는 -or 이 없으면 두 조건을 모두 일치해야 찾음
! 또는 -not    : 뒤에 나오는 조건과 일치하지 않는 파일을 찾음

-exec 명령어 {} \; : find 명령어 실행으로 찾아낸 파일이나 디렉토리에 대해서 지정한 명령어를 실행시킴
                     여기서 주의할 것은 반드시 맨 뒤에 {} 와 ; 사이를 한 칸 띄워야 함
-ok 명령어 {} \;   : exec 연산과 비슷하지만 다만 다른 것은 그 명령어를 행하기 전에 사용자에게 실행 여부를 물어본다는 것임
-true              : 묻는 상황이 나올 시 항상 예로 설정하는 옵션
-false             : 묻는 상황이 나올 시 항상 아니오로 설정하는 옵션

-version 또는 --version : 버전 보기
-help 또는 --help       : 도움말 보기



( 3 ) 사용예

현재 디렉토리에서 확장자가 .txt 파일 찾기
find . -name "*.txt"

현재 디렉토리에서 첫 글자가 영어 대문자인 모든 파일을 찾기
find . -name "[A-Z]*"

/usr/local 에서 첫 두글자는 영어 소문자이고 세 번째 자리는 숫자로 시작하는 이름을 가진 파일을 찾기
find /usr/local -name "[a-z][a-z][0-9]*"

현재 디렉토리에서 파일 이름에 공백 문자가 들어간 모든 파일을 삭제하기
find . -name "* *" -exec rm -f {} \;

전체 koromoon 이라는 이름을 가진 소유자의 파일을 찾기
find / -user koromoon

시스템에서 소유자나 그룹이 없는 파일을 찾을 경우
(크래커가 만들어 놓은 파일일 경우도 있음)
find / -nouser -o -nogroup

현재 디렉토리에서 최근 3 일 동안 변경된 파일 찾기
find . -mtime -3

/tmp 에서 최근 5일 동안 변경되지 않은 파일들을 찾아서 삭제하기
(파일을 삭제할 때마다 삭제할 것인가를 물어보도록 설정)
find /tmp -mtime +5 -ok rm {} \;

모든 php 파일(.php)을 찾아서 gzip으로 압축을 하고 찾은 목록을 result.txt 라는 파일에 저정하기
find / -name "*.php" -fprint result.txt -exec gzip {} \;

크래커의 침입이 의심스러워 자신의 시스템에서 suid 와 guid 가 설정된 일반 파일들을 찾아서 권한을 확인하기
find / -type f -perm +6000

시스템 관리의 실수로 일반 사용자가 쓰기 권한을 갖도록 설정되어 있는 파일을 찾아서 실행 권한을 없애기
(단, 링크 파일은 제외함)
find / -perm +2 ! -type l -exec chmod o-w {} \;

지난 24 시간 동안 변경된 모든 파일 목록을 koromoon 파일에 내용 삽입하여 만들기
find / -mtime -1 -type d -print >koromoon

현재 디렉토리에서 가장 큰 파일을 찾기
(아래 한 줄의 명령어는 현재 디렉토리에 서브 디렉토리 포함하여 가장 큰 파일을 하나 찾아서 이를 출력하라는 의미임. 간혹 파일 시스템의 용량이 Full 이 될 경우 가장 큰 파일을 찾을 시 아주 유용함.)
find . -type f | xargs du -s | sort -n | tail -1

확장자가 php 이고 koromoon 이란 문자열이 포함된 파일 검색하기
find / -name "*.cpp" -exec grep string {} \;

koromoon 문자열이 포함된 파일 검색하기
(2 >dev/null 는 에러메시지는 출력하지 않는 옵션임)
find / -type f | xargs grep "koromoon" 2>dev/null



============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기