컴퓨터 Unix에서 파일 찾기 (find)
2008.02.05 09:57
[팁]find 명령어의 유용한 옵션
다들 많이 쓰고 많이 아는 명령어 입니다.
주로 쓰는 옵션으로는
-name : 이름으로 찾을 때
-iname: name은 정확한 대소문자 구성을 알아야 되지만 iname은 대소문자 구분을 하지 않습니다.
-perm : 권한으로 찾을때
find . -perm 700 -print (권한이 700인 파일)
find . \ ( -perm 400 -o -perm 200 ) -print
파일 권한이 400인 파일과 200인 파일을 찾아준다.
(주의 : "\"의 앞뒤에 space 가 반드시 있어야 한다.)
-user , -group : 소유주나 그룹으로 찾을때
find . -user unix01 -print (파일 소유자가 unix01인 파일을 찾아준다. )
-empty : file의 크기가 0인 것을 찾기
-size : file의 크기 (block 수)로 찾기
find . -size +1024 -print (파일의 블럭 크기가 1024 이상인 파일을 찾아준다.)
-type c : 확장자가 c인 파일 찾기
-mount : 현재 파티션에서만 파일을 찾습니다. mount된 파티션에서는 검색하지 않죠. 전 데이타용 파티션을
크게 잡아서 따로 마운트해서 쓰고 있는데 보통 여기를 뒤질 필요는 없기 때문에 -mount 옵션으로 현재
파티션에서만 검색하곤 합니다.
-regex : 정규식도 사용할 수 있습니다. POSIX 정규식이겠죠?
-iregex: 대소문자 비구분 정규식으로 파일 찾기
-exec : 명령어 실행
find ./ -name \*.[cSh] -exec grep -H "찾고자하는문자열" {} \;
찾고자하는 문자열을 현제 디렉토리 부터 서브디렉토리까지 확장자가 c, S, h 인 파일에서 찾는 것입니다.
[cSh]가 정규식의 문자 클래스와 같은 역할을 하는 거죠. 소스화일로부터 원하는 문자열 찾을 때 유용합니다.
활용해 보세요. 끝에 리다이렉션( > 기호로 출력방향 전환) 붙여서 파일로 저장해도 좋고요.
만약 파일 이름은 한번만 나오게 하고 싶으면
find . -type f -name \*.[chS] -exec grep "찾을문자열" {} \; -print
하면 됩니다.
또, *.[chS]에서 *를 escape하지 않고(\* 하지 않고 그냥 *만 한다면), 현재 디렉토리에 c 파일들이
있으면, 셸에서 파일 이름 확장이 되버려서 원하는 결과를 얻을 수 없게 되죠.
시스템이 옮겨지면서 방대한 양의 파일들의 날짜가 모두 미래라서 컴파일이 안될 때가 있었습니다.
이걸 손수 다 읽었다 썼다를 하는데 힘이 들더군요. touch 명령 실행하기.
touch로 살짝 건드려 주기만 해도 날짜가 바뀐다는 것을 알아냈습니다.
다음에 find 의 -exec 옵션을 이용해서 모두 어루만져 주었습니다.
find ./ -exec touch {} \; -print
그 외의 옵션들
-amin N : N 분 이전 부터 access했던 file찾기
-atime N : N 시간 이전부터 access했던 file찾기
find . -atime +30 -print (30일 이전에 억세스되었던 파일을 찾는다.)
-ctime N : N 시간 이전에 상태가 변경된 파일 찾기
-mtime N : N 시간 이전에 내용이 변경된 파일 찾기
find . -mtime -7 -print (7일 이내에 수정된 적이 있는 파일을 찾는다.)
위에 있는 시간관련 옵션들은 보안상 위험한 백도어 같은 파일을 찾을때 유용하게 쓸 수
있습니다. 관리자가 자리를 비우거나 휴가를 간 사이에 접근해서 내용이나 상태를 변경시킨
게 있다면 누군가 침입을 해서 건드린 것 일 확률이 높으니 이것들을 찾는 용도로 많이
쓰입니다.
유닉스 시스템에서 어떤 큰 화일이 시스템을 소비하는지 알고 싶을 때, 즉
파일 크기 순서대로 Sorting하는 것.
find /var -mount -ls -xdev | /usr/bin/sort -nr +6 | more
매주 일요일 새벽 2시에 access한 날짜가 2일 이상인 파일을 /tmp 에서 지우려면
0 2 * * 0 find /tmp -atime +2 -exec rm {} ;
find 명령 외에 파일 검색에 쓰이는 명령어로는
whereis : 명령어, 원본소스,메뉴얼 파일을 찾을때
which : shell과 명령어의 위치를 찾을때 (PATH가 걸려 있는 범위내 에서만)






