Linux ETC

find 명령 1

2008.05.14 22:58

sylee 조회 수:22853

find는 사용자가 찾고자 하는 파일등을 찾아주는 역활을 한다.
이름만을 가지고 찾거나 파일 모드, 파일 타입, 크기, 마지막으로
접근한 시간등 여러가지 조건으로 파일을 찾아준다.
사용 방법은 다음과 같다.

사용방법 :  find <대상디렉토리> <연산자>

1) <대상디렉토리>
  find가 찾는 파일 위치를 지정한다.
예을 들어 '/'는 /(root)부터 찾고, '.'은 현재 디렉토리 부터 찾는다.

2) <연산자>

-name 파일명
  파일명과 일치하는 파일을 찾는다.
  와일드 카드(*)도 사용가능하다.
  '/' 에서 화일 확장자가 bak 인 화일을 찾는 예제
  find / -name '*.bak' -print

-perm 모드
  파일 퍼미션 조건이 모드와 일치하는 것만을 찾아 준다.
  퍼미션은 읽기(r), 쓰기(w), 실행(x)하기 등으로 나타낸다.
  현재의 디렉토리에서 666(rw-rw-rw-)모드의 파일들을 찾는 예는 다음과 같다.
  find . -perm 666 -print

-type 타입
  파일의 타입을 지정하여, 찾고자하는 파일을 찾는다.
  타입의 종류는 다음과 같다.
  b : 블록 특수 파일(block device)
  c : 캐릭터 특수 파일 (character deice)
  d : 디렉토리(directory)
  f : 일반파일(file)
  l : 심볼릭 링크(link)
  p : 파이프 (pipe)
  s : 소켓 (socket)

예) 현재의 디렉토리 아래에 있는 서브디렉토리를 모두 찾을 경우
  find . -type d -print

예) /home 폴더내에서 확장자가 php인 화일을 찾을 경우
   find /home -name '*.php' -print

-atime  +n/-n/n
  최근 n일 이전에 액세스된 파일을 찾아준다.(accessed time)
  +n : n일 또는 그보다 더 오래 전의 파일을 찾는다.
  -n : 오늘 부터 n일 전까지의 파일을 찾는다.
   n : 정확히 n일 전에 액세스되었음을 의미한다.

-ctime  +n/-n/n
  atime과 비슷하나 다른 점은 atime은 얼마나 오래전에 파일을 액세스 하였는가를 검사하지만
   ctime은 파일의 퍼비션을 마지막으로 변경시킨 날짜를 의미한다.(changed time)
  최근 n일 이전에 액세스된 파일을 찾아준다.
  +n : n일 또는 그보다 더 오래 전의 파일을
  -n : 오늘 부터 n일 전까지의 파일을
   n : 정확히 n일 전에 수정되었음을 의미한다.

-mtime  +n/-n/n
  ctime과 비슷하나 다른 점은 ctime은 파일의 퍼미션을 변경시킨 날짜를 의미 하지만,
  mtime은 파일내의 data를 마지막으로 변경한 날짜를 의미한다.(modified time)
  최근 n일 이전에 액세스된 파일을 찾아준다.
  +n : n일 또는 그보다 더 오래 전의 파일을
  -n : 오늘 부터 n일 전까지의 파일을
   n : 정확히 n일 전에 수정되었음을 의미한다.

  현재 디렉토리 아래에서 최근 3일 동안 고친 파일을 모두 찾을 경우
  find . -ctime -3 -print

  시스템 전체에서 한 달 또는 그 이상의 기간동안 한번도 액세스하지 않은 디렉토리를 찾을경우
  find / -atime +30 -type d -print

-user 유저네임
  '유저네임' 부분에 지정한 유저 소유의 파일을 찾아준다.
   find / -user mail -print  

  -nouser
   파일의 소유자가 없는 파일을 찾아 준다.

  -group 그룹네임
   지정한 그룹네임에 해당되는 파일을 찾아 준다.

  -nogroup
   파일의 소유자의 그룹이 없는 파일을 찾아 준다.

-print
  find 명령의 결과를 보여 준다. 기본적으로 맨 마지막에 꼭 붙여 줘야 하는 연산이다.

  -exec 명령어 {} ;
   find의 결과로 찾아낸 파일이나 디렉토리에 대해서 이 명령어를 실행(execute)한다.

   find / -nouser -print -exec ls -l {} ;

  -ok 명령어 {} ;
   exec 연산과 비슷하다. 다만 다른것은 그 명령어를 행하기 전에 사용자에게
   실행여부를 물어본다는 것이다. 따라서 좀 더 안전하다고 할 수 있겠다.
   홈 디렉토리 아래에 있는 확장자가 bak로 끝나는 모든 파일을 확인하며 삭제를 하려고 할때,
    -ok 대신에 -exec를 사용한다면, 물어 보지 않고 삭제해 버린다.
  
   find /home -name '*.bak' -type f -ok rm {} ;


  - ! 또는 -not연산
   !뒤에나오는 연산과 일치하지 않는 파일을 찾아 준다.
   현재의 디렉토리에서 소문자로 시작하지 않는 파일들 찾으려면,
   find . ! -name '[a-z]*' -type f -print

  
  -size +n/-n/n[bckw]
   n뒤에 아무것도 쓰지 않으면 기본적으로 n블럭 크기의 파일을 찾는다.
   기본적으로 1블럭은 512바이트이다. 만약 n뒤에 c를 쓰면 character(쉽게
   말해서 byte) 단위가 되고, k를 쓰면 킬로바이트, w를 쓰면 위드 즉2바이트가
   된다. +은 지정한 크기 이상 -은 지정한 크기 이하를 나타낸다.
    
   만약 전체 시스템에서 파일 크기가 0인 파일을 모두 찾고 싶다면
   find / -size 0 -print
  
   현재 디렉토리 아래에서 파일 크기가 1메가바이트 이상인 파일을 모두 찾아서
   해당 파일에대한 정보를 자세히 보고 싶다면
   find . -size +1024k -exec ls -l {} ;

  -links n
   n개의 링크를 가진 파일을 찾아 준다.

참고로 find 명령에 대하여 더 자세한 내용은 man find 라고 하면 많은량의 설명을 볼수 있음
번호 제목 글쓴이 날짜 조회 수
306 우분투 기본 쉘 dash 에서 bash로 변경하기 호스트웨이 2015.09.07 4013
305 패스워드 정책 변경 호스트웨이 2015.09.03 2622
304 명령어 dstat 사용하기 호스트웨이 2015.09.01 2388
303 ulimit 설정 관련 호스트웨이 2015.07.29 66351
302 2015년 7월1일 윤초 발생 관련 점검 방안 file 호스트웨이 2015.06.30 1356
301 Sysbench를 통한 System, MySQL 성능 테스트 file 호스트웨이 2015.06.26 8048
300 ngrinder를 이용한 부하 테스트 - 1) Controller 설치 file 호스트웨이 2015.04.08 2737
299 epel-release 설치하기 file 호스트웨이 2014.12.22 6481
298 SVN(subversion) 설치 및 셋팅 file 호스트웨이 2014.12.02 4998
297 리눅스 커널 업데이트 및 커널 변경 부팅 방법 file 호스트웨이 2014.10.30 19191
296 samba 설치 file 호스트웨이 2014.04.14 2082
295 partprobe - 리부팅 없이 사용 중인 파티션 재인식 호스트웨이 2012.12.28 3987
294 오늘 생성한 파일만 조회하기 호스트웨이 2012.12.27 2773
293 sftp 서비스 막기 호스트웨이 2012.12.27 995
292 리눅스 uniq 명령어 file 호스트웨이 2012.12.27 7364
291 ls -l 출력 시 날짜형태 변경 호스트웨이 2012.12.27 3404
290 리눅스 free 명령어 호스트웨이 2012.12.26 1580
289 리눅스 캐시 메모리 비우기 file 호스트웨이 2012.12.26 1457
288 [ERROR] ftp error 500 OOPS: cannot change directory:/home/ 호스트웨이 2012.12.21 2683
287 free -m 에서 free (남는 메모리 양) 최소량 제한하기 호스트웨이 2012.12.21 1624