LINUX

파일 관리 명령어(find)
  • 조회수 6,317
  • 작성일 2008-07-28
  •  
6. find

(1) 설명: 현재디렉토리부터 하위디렉토리까지 주어진 여러조건을 가지고 파일을 찾고, 그 경로를
          출력한다. locate보다 강력한 찾기 기능을 지원하지만 root에서 접근 권한을 제한한 파일
          이나 디렉토리에 관해서는 "허가 거부됨"이라는 메시지가 뜨고 찾지를 못한다.
(2) 사용법
    find [path] options expression
    =>path이하의 모든 디렉토리에서 파일을 찾는다. path가 없으면 현재디렉토리가 기준이다.
(3) option
   -name       : 이름을 기준어로 하여 찾는다.
   -user       : 해당 user의 파일이나 디렉토리를 찾는다.
   -group      : 해당 group의 소유인 파일이나 디렉토리를 찾는다.
   -perm       : 선택 퍼미션인 것을 찾는다.
    예) -perm 755   => 해당퍼미션값이 755인것을 찾는다.
        -perm -6000 => set-uid와 set-gid가 동시에 같는 퍼미션을 찾는다.
        -perm +6000 => set-uid와 set-gid중 둘 중 하나이상의 퍼미션값을 가진 것을 찾는다.
   -type       : 파일의 유형(d,f,l)에 따라 찾는다.
    *값
      d : 디렉토리를 찾는다.
      f : 일반파일을 찾는다.
      l : 링크된 것을 찾는다.
      b : 블록 특수 파일을 찾는다.
      c : 문자 특수 파일을 찾는다.
      p : 파이프인 특수파일을 찾는다.
      s : 소켓파일을 찾는다.

   -atime n : n일 이전에 액세스한 파일을 찾는다. +n은 n일 이전에 액세스한 파일을 찾는다는 의미
             이고 -n은 n일 내에 액세스한 파일을 찾는다는 뜻이다.
   -ctime n : 파일이 변경(change)된 날짜로 찾는다. 나머지는 atime과 같다.
   -mtime n : 파일이 수정(modify)된 날짜로 찾는다. 실제적으로는 ctime과 mtime은 거의 같다.

   -exec : 찾아진 파일등과 연계하여 어떠한 명령을 내릴 수 있는 옵션이다. 이 옵션을 사용하면 \;
          로 끝나야 한다.
   -ok : 확인메시지를 출력하는 것을 제외하고는 -exec와 같다.
   -print      : 화면으로 출력을 받기 위해서는 맨 뒤에 꼭 써야 하는 옵션이지만, 요즘 리눅스에
                서는 생략가능하다.
    2>/dev/null : 맨 뒤에 이 옵션을 사용하면 접근 권한이 없는 파일이나 디렉토리에 접근시
                 나오는 리스트는 화면에 출력하지 않는다.
   -ls : 맨 뒤에 이 옵션을 사용하면 상세출력하는 'ls -l'과 같은 역할을 한다.
   -size n : n 블록 길이의 파일을 찾는다. +n은 n블록보다 큰 파일을 의미하며, -n은 n블록보다
            작은 파일을 의미한다. nc란 n문자 길이의 파일을 의미한다. 즉 c는 character를 의미
            하고 1문자는 1바이트이므로 보통 바이트단위로 인식하여 사용한다.
   -inum n : inode번호가 n인 파일을 찾는다.
(4) 사용예
   1) find -name exam.txt =>exam.txt라는 파일이나 디렉토리를 찾는다.
   2) find -name '*.c' => *.c로 끝나는 파일이나 디렉토리를 찾는다.
   3) find -user posein => posein이라는 사용자의 파일이나 디렉토리를 찾는다.
   4) find -perm 600 => 권한이 600인 파일을 찾는다.
   5) find -type l => 심볼릭 링크인 파일을 찾는다.
   6) find . -type d => 현재 디렉토리에 있는 모든 하위 디렉토리를 찾는다.
   7) find . -type f -name "*.txt" => 현재 디렉토리에서 '*.txt'로 끝나는 파일들을 찾는다.
   8) find / -type f -perm +6000 -ls => 루트 디렉토리에서부터 퍼미션이 6000인 파일들을 찾아 상
                                       세출력(-ls)한다. 퍼미션이 6000을 주면 setuid와 setgid가
                                       걸려있는 모든 파일을 찾는다.
   9) find / -nouser -o -nogroup => 소유자나 소유그룹이 없는 파일들을 찾는다. -o는 or(또는)의
                                  역할을 한다.
   10) find / -user level1 -group level0 -print 2>/dev/null
      => 루트 디렉토리(/)에서 소유자는 level1이고 그룹은 level0인 파일을 찾아서 화면으로
        프린트하되, 접근 권한이 없는 파일등 오류가 있는 것들은 화면에 출력하지 않는다.
   11) find . -name '*.txt' -exec rm {} \;
      => 현재 디렉토리에서 *.txt로 된 파일들을 찾아 삭제한다.
   12) find /home -name .rhosts => /home디렉토리에서 .rhosts라는 파일을 찾는다.
   13) find / -name .rhosts -ls -o -name .forward -ls
      => .rhosts 또는 .forward라는 파일을 찾아 정보를 상세히 출력한다.
   14) find / -ctime -2 -ctime +1 -ls
      => 이틀전에서 하루 이후에 수정된 파일을 찾는다.
   15) find -size +10000c -size -32000c
      => 10000바이트보다 크지만 32000바이트보다 작은 파일을 찾는다.
   16) find -inum 10004 -exec rm {} \;
      => inode번호가 10004인 파일을 찾아 지운다. 간혹 지워지지 않는 파일들이 생길 수 있다. 이
        때는 inode번호를 알고 find와 연계해서 지울 수도 있다.
   17) [posein@www posein]$ find -name test.txt -ok chmod 755 {} \;
       < chmod ... ./test.txt > ? y