Linux ETC

find 명령 1

2008.05.14 22:58

sylee 조회 수:25983

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 라고 하면 많은량의 설명을 볼수 있음
번호 제목 글쓴이 날짜 조회 수
386 scp 명령어를 이용한 파일 복사 및 전송 호스트웨이 2012.03.16 264525
385 ls 명령어의 파일 사이즈 쉽게 확인하기 호스트웨이 2012.10.23 176901
384 리눅스 서버 누가 언제 무슨 작업을 했는지 확인 방법 호스트웨이 2012.03.09 93437
383 sar 명령 옵션 호스트웨이 2012.06.15 93260
382 Linux Charset 확인 및 변경 file 호스트웨이 2012.03.30 85050
381 ulimit 설정 관련 호스트웨이 2015.07.29 77634
380 Swap 메모리 늘리기 file 호스트웨이 2012.03.30 67208
379 국가명 약어 (국가코드) 호스트웨이 2012.04.13 64990
378 head 와 tail 사용하기 sylee 2008.05.14 63483
377 비대해진 로그 파일 내용을 비우는 방법 - /dev/null 호스트웨이 2012.03.16 61418
376 서비스 이름으로 포트 번호 확인하기 호스트웨이 2012.04.13 57726
375 fdisk 명령어를 이용하여 수동으로 파티션 나누기 file 호스트웨이 2015.11.30 57713
374 강제 umount 방법 (umount : device is busy 발생시) 호스트웨이 2012.11.30 55457
373 top 명령어 및 옵션 설명 file 호스트웨이 2012.03.27 52552
372 xinetd 소개 및 설정 호스트웨이 2012.06.29 51911
371 history 조회시 '날짜,시간' 표시하기 호스트웨이 2012.03.16 49498
370 시스템 시간 확인 및 동기화 하기 sylee 2008.05.15 46977
369 /bin/false, /sbin/nologin 의 차이점 호스트웨이 2012.08.10 45766
368 Kernel Parameters HOSTWAY 2008.06.04 45457
367 ssh-key를 생성하여 서버에 패스워드 없이 접속하는 방법 jook 2008.06.25 44753