'find'에 해당되는 글 1건

  1. 2010.08.02 리눅스 파일검색 find 를 잘 써보자
카테고리 없음2010. 8. 2. 16:14


리눅스
파일검색 강좌 find 1

 

 

-------------------                    ------------------------

 

1  : 리눅스의 파일검색 유틸리티 find 실무 개론

2  : 특정 UID 소유의 모든 파일찾기

3  : 특정 사용자의 ID 소유로된 모든 파일 찾기

4  : 특정 사용자의 홈디렉토리 내에서 특정 파일 찾기

5  : 시스템내의  특정파일들을 검색하여 자동삭제하는 방법

6  : 지정한 소유자의 모든 파일을 찾아서 확인하기

7  : 서버내부의 불필요한 파일들 모두 정리(삭제)하기

8  : 특정용량 이상되는 파일들 모두 찾기(용량단위로 파일검색)

9  : 특정 퍼미션을 가지고 있는 파일들 모두 찾기

10  : 지정된 일자 이후에 변경된 모든 파일 찾기(서버 보안점검시 사용)

11  : 지정된 파일보다 이후에 생성된 파일 찾기(서버 보안점검시 사용)

12  : 특정디렉토리내에 존재하는 모든 디렉토리 목록만 확인하기

13  : 서버내에 존재하는 모든 링크파일 검사하기(서버 보안점검시 사용)

14  : root소유의 SetUID파일 찾기 (서버 보안점검시 사용)

15  : 서버내의 백도어파일 찾기(서버 보안점검시 사용)

16  : 서버내부의 .rhosts 파일 찾아서 확인하기(서버 보안점검시 사용)

17  : 서버내부에서 .bash_history 파일을 모두 찾아서 확인하기(서버보안점검시 사용)

18  : 소유자가 없는 파일 또는 소유그룹이 없는 무적파일 찾기(서버 보안점검시 사용)

19  : 쓰기 권한이 있는 파일 디렉토리 찾기(서버 보안점검시 사용)

20  : 특정문자를 포함하는 파일찾기와 문자가 속한 찾기

 

 

 

 

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 성수

 

ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/

 

 

 

 

 

 

 

 

 

 

 

 

1 : 리눅스의 파일검색 유틸리티 find 실무 개론

 

find명령어는 그  이름에서도 알 수 있듯이 서버내에 존재하는 특정파일들을 검색하는 명령어입니다. 윈도우에서는 “[시작]->[검색]”이라는 기능으로 특정파일들을 찾을 수 있듯이 리눅스에서는 find명령어를 이용하여 특정파일을 검색합니다.

 

하지만 이 명령어는 단순히 파일을 찾는 역할만을 하는 것이 아니라 찾은 파일에 대해서 특정 작업까지도 할 수 있습니다. 예를들어 찾은 파일들을 모두 삭제한다든지, 퍼미션을 변경한다든지, 소유자를 변경한다든지하는 작업들을 find명령어내에서 모두 한번에 할 수가 있는 매우 강력한 관리자명령어입니다.

 

파일을 찾을 때에도 매우 다양한 방법으로 찾을 수 있도록 많은 옵션과 방법들을 제공합니다. 특정 파일하나만을 찾을 수도 있으며, 특정 문자패턴에 맞는 파일들을 검색하거나 또는 특정 확장자를 가지는 파일검색등 다양한 방법으로 검색할 수 있습니다.  또한 파일이름으로 검색하는 것외에도 특정소유자의 파일, 소유자가 없는 파일찾기, 특정파일사이즈 이상되는 파일찾기, 지정된 퍼미션(permission)을 가진 파일을 찾는다든지하는 방법으로 매우 다양하고 파워풀한 검색방법을 사용할 수 있습니다.

 

이번 장에서 서버관리자가 사용해야하는 거의 모든 find의 사용예들을 충분히 설명하였습니다. , find명령어는 리눅스 서버관리자에게는 없어서는 안될 매우 강력한 서버관리도구입니다. 리눅스 서버를 직접관리하시는 서버관리자분들이라면 find의 단순한 파일찾기 단계를 넘어서 많은 작업을 한번에 처리할 수 있는 find의 파워풀한 활용까지도 반드시 익혀두시기 바랍니다.

 

이번 장에서 이에 대한 모든 실무적인 방법들을 모두 알려드리도록 하겠습니다.

 

명령어위치 : /usr/bin/find

 

사용형식

 

find [찾을 디렉토리경로]  [찾기옵션]  [찾은후행할 작업]

 

 

[찾을 디렉토리경로]

 ·  : 현재 디렉토리 이하를 대상으로한다.
 /   :
루트디렉토리(파일시스템전체)이하를 대상으로 한다.
 ~ID :
지정된ID의 홈디렉토리이하를 대상으로한다.

 

[찾기옵션]

-empty        : 비어있는 파일을 찾는다.
-uid UID      :
지정된 UID를 갖는 파일을 찾는다.
-gid GID      :
지정된 GID를 갖는 파일을 찾는다.
-group
그룹명 : 지정된 group을 가진 파일을 찾는다.
-name         :
지정된 형식의 패턴을 가지는 파일을 찾는다.

-newer        : 지정된 파일 이후에 생성된 파일을 찾는다.

-perm         : 지정된 퍼미션을 가진 파일을 찾는다.

-used 일자수 : 최근 n일 이후에 변경된 파일을 찾는다.

-user : 지정된 파일을 소유하고 있는 소유자의 모든 파일을 찾는다.

 

 

[찾은후 행할 작업]

-print : 찾은 파일리스트를 보여준다.

-exec 수행명령어: 검색된 파일을 대상으로 수행명령어”(쉘명령어)를 실행한다.

 

이제 이와 같은 find의 각종 무기들을 이용하여 서버관리에 필요한 find명령어의 실무예들을 모두 살펴보도록 하겠습니다.

 

 

 

2 : 특정 UID 소유의 모든 파일찾기

 

모든 계정사용자들은 시스템 내에서 유일한 UID를 가지고 있습니다. 특정 소유자의 파일을 찾고자 할 때에는 특정UID를가진 파일을 찾으면 됩니다. 물론 특정 ID를 가진 파일을 찾아도 같은 결과를 얻을 수 있습니다.
   

위의 예는 UID 505(uid 505)인 모든(/) 파일을 찾아서(find) 보여달라는(-print) 것입니다.

 

 

 

3 : 특정 사용자의 ID 소유로된 모든 파일 찾기

 

다음은 특정 소유자의 모든 파일을 찾는 예입니다.  앞의 예와 같이 UID로 찾을 수도 있지만 특정 ID의 소유파일을 찾을 때에는 일반적인 방법으로 다음과 같이 사용합니다.

 

 

 

위의 예는 test01이라는 계정사용자(-user test01)의 모든(/) 파일을 찾아서 보여달라(-print)는 예입니다.

 

 

 

4 : 특정 사용자의 홈디렉토리 내에서 특정 파일 찾기

 

다음은 특정 사용자의 홈디렉토리내에 존재하는 특정파일을 찾는 예입니다.  서버관리자는 다양한 파일검색방법을 알고 있어야합니다. 이들 방법 가운데 특정계정사용자의 홈디렉토리내에 존재하는 특정 파일을 찾는 방법이 많이 사용됩니다.

 

아래의 예는 특정 계정사용자의 홈디렉토리(/home/locli)이하에 존재하는 모든 html파일(*.html)을 찾아서 보여달라(-print)는 예입니다.

 

 

위의 예는 사용자의 홈디렉토리를 직접 지정한 경우로서 사용자의 홈디렉토리를 알고 있을 경우에는 이 방법을 쉽게 사용할 수 있습니다. 하지만, 만약 사용자의 홈디렉토리를 모르고 있다면 다음과 같이 ~ID형식으로 사용자의 홈디렉토리를 표시하시면 동일한 검색을 할 수 있습니다.

 

, 아래의 예는 위와 동일한 예로서 locli라는 사용자의 홈디렉토리를 모를 경우에 ~locli라고 지정한 것입니다. , ~locli /home/locli와 동일한 의미입니다.

 

간혹, 사용자의 홈디렉토리위치가 /home이 아니라 /user, /host등과 같을 경우가 있습니다. 이때에는 위의 예처럼 ~ID방식을 사용하시면 사용자의 홈디렉토리위치를 정확하게 지정할 수 있습니다.

 

 

 

5 : 시스템내의 특정파일들을 검색하여 자동삭제하는 방법

 

find로 찾은 파일에 특정명령어를 수행할 수 있다고 앞서 말씀드린 바가 있습니다.  아래의 예는 test01이라는 계정사용자의 홈디렉토리내에 존재하는 *.bak파일을 찾아서 모두 삭제한 예입니다. 이 예는 디스크공간 부족시에 백업파일을 삭제하고자 할 때에 사용하는 방법입니다. 하지만 백업파일의 형태가 *.bak가 아닌 경우가 있으므로 실무에 적용하실 경우에는 지정하는 파일형식에 주의하시기 바랍니다.

 


먼저 “find ~test01 -name *.bak -print” test01사용자의 홈디렉토리에 존재하는 *.bak파일을 찾아 보았습니다. 결과 모두 3개의 파일이 존재함을 확인 하였습니다.  확인한 다음 “find ~test01 -name *.bak -exec rm -f {} ;”명령어로 test01사용자의 홈디렉토리내에 존재하는 *.bak파일을 모두 삭제하였습니다.

 



여기서 “-exec rm -f {}”에서 -exec는 찾아진 파일들을 모두 뒤에 나오는 명령어(rm -f {})로 실행한다는 의미이며 {}는 찾아진 3개의 파일들이 하나씩 차례대로 치환됨을 의미합니다. , 위의 “-exec rm -f {}”는 아래와 같은 3개의 명령어가 차례대로 실행된 것입니다.

 

rm -f /home/test01/www/tesfile1.bak
rm -f /home/test01/www/tesfile2.bak
rm -f /home/test01/www/tesfile3.bak

만약 찾아진 파일갯수가 100개였다면 위의 명령어가 100번 실행되었을 것입니다.

여기서 중요한 것을 다시한번 말씀드린다면 -exec는 찾은 파일들을 대상으로 뒤에나오는 명령어를 실행하라는 의미이며 {}는 찾아진 파일들을 하나씩 대입됨을 의미합니다. 그리고 찾아진 파일의 개수만큼 -exec뒤의 명령어가 실행됩니다.  find명령어의 꽃이 -exec의 사용에 있으며 이것을 사용하지 못한다면 find로는 파일찾기기능 이외의 사용은 하지 못합니다. 따라서 이것을 정확하게 이해하시기 바라며, 리눅스 서버관리자로서 일취월장(日就月將)하시려면 반드시 기필코 정확한 의미를 이해하시고 익혀두시기 바랍니다.

 

 

 

6 : 지정한 소유자의 모든 파일을 찾아서 확인하기


다음은 특정사용자 소유의 모든파일을 찾아서 그 정보를 확인하는 예를 보도록 하겠습니다.  find에서 -exec를 사용하는 또 다른 예로서 특정 사용자의 소유파일을 찾아서 “ls -l”로 그 정보를 모두 확인하는 예입니다.

 

, 아래의 예는 test01이라는 사용자의 소유(-user test01)로 되어있는 모든(/)파일을 찾아서 그 정보(ls -l)를 확인한 것입니다.




이 예는 find명령어로 찾은 파일들을 -exec를 이용하여 “ls -l {}”로 그 정보를 확인한 것으로서 매우 빈번하게 사용되는 것입니다.

 

 

 

ㅇ 제작자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 성수

 

ㅇ 본강좌의 자세한 정보 : http://www.superuser.co.kr/linuxcommandbible/

 

 

Posted by 크롭바디