리눅스 명령어 : find
# 파일 이름으로 찾기
find ./ -name filename : 파일 이름으로 찾기
# access time 으로 파일 찾기
find ./ -atime +5 // access time이 5일 이전인 파일 찾기. 즉, access한지 5일이 넘은 파일들
find ./ -atime -5 // access time이 5일 이내인 파일 찾기. 즉, access한지 5일이 넘지않은 파일들
# 수정한 시간으로 파일 찾기
find ./ -mtime +5 // 5일 이전에 수정된 파일 찾기. 즉, 수정된지 5일이 넘은 파일들
find ./ -mtime -5 // 5일 이내에 수정된 파일 찾기. 즉, 수정된지 5일이 넘지않은 파일들
# 퍼미션으로 찾기
find ./ -perm 777 // 퍼미션이 777인 파일 찾기
find ./ ( -perm 644 -o -perm 200 ) -print
# 파일 타입이 으로 파일 찾기
find ./ -type f // 파일 타입이 파일인 파일만 찾기(주의, 옵션에 "-"을 붙이지 않는다)
find /dev -type c -print // 파일 타입이 c인 파일들 찾기
[옵션]
f : 파일
d : 디렉토리
l : 심볼링크
s : 소켓파일
b : block special
c : character special
p : named pipe
# 파일 크기로 찾기
##[-size n] 파일 크기가 n 이상인 파일 찾기
##[-size n] 정확히 n x 512 byte 의 길이를 갖는 파일
find ./ -size 1 // 파일 크기가 512 byte인 파일 찾기
find ./ -size +1024 -print // 파일 블럭크기가 1024 이상인 파일 찾기
find ./ -name core -size +2048 -print // 파일 이름이 core이고 크기가 2048 이상인 파일 찾기
##[-links n] 링크된 갯수가 n인 파일 찾기
find ./ -links 5 // 링크된 갯수가 5개인 파일 찾기
##[-user username] 파일 소유권이 user인 파일 찾기
find ./ -user kosthb // 파일 소유권이 kosthb인 파일 찾기
##[-group groupname] 파일 그룹이 group인 파일 찾기
find ./ -group kosthb // 파일 그룹이 kosthb인 파일 찾기
########## 처리 방법 ##########
##[-print] 찾은 파일의 경로 출력
find ./ -name filename -print // filename의 경로를 보여준다
##[-exec cmd {} ;] 찾은 파일들에 대해 cmd 명령어를 실행한다.
find ./ -name filename -exec ls -al {} ;
## 30일 이전에 엑세스된 파일중 *.c 파일을 찾는다
## 엑세스 된지 30일이 넘은 파일들을 찾는다
find ./ -name *.c -atime +30 -exec ls -l {} ;
. 시스템 관리 명령 [3] - find
find 명령어는 시스템 관리 명령중 가장 많이 사용되는 명령어 중 하나이다.
이 명령어의 다양한 기능을 많이 알수록 관리자의 불필요한 삽질을 최대한 줄일수
있을것이다.
option :
-atime n : 정확히 n 일 전에 access 된 파일
-mtime n : 정확히 n 일 전에 수정된 파일
-newer [file] : file 보다 최근에 수정된 파일
-size n : 정확히 n x 512 byte 의 길이를 갖는 파일
-type c : 파일의 종류를 기술. f: 파일 d: 디렉토리
-fstype [filesystem] : 파일 시스템 종류
-name [pattern] : 파일 이름 검색
-perm p : 파일 접근 퍼미션이 p 인 경우
-user [user] : 파일 소유권이 user 인 파일
-group [group] : 파일 그룹이 group 인 파일
-nouser : 파일 소유자가 /etc/passwd 에 없는 경우
-nogroup : 파일 소유그룹이 /etc/group 에 없는 경우
-uid n : 파일 uid 가 n 인 경우
-gid n : 파일 gid 가 n 인 경우
단순히 위의 옵션되로 사용하면 그렇게 유용해 보이지 않을수 있겠죠.
예를 들어 누가 정확히 3일전에 접근한 파일들을 검색하겠습니까..?
하지만 +, - 기호를 이용하여 기간,시간,크기와 같은 수치들의 범위를
지정할수가 있습니다.
+ 는 ~~보다 큰 경우, - 는 ~~ 보다 작은 경우
-mtime +7 : 수정 된지 7일이 지난 파일
-mtime -7 : 수정 된지 7일이 안된 파일
-size +100 : 50kbyte 보다 큰 파일
-name 뒤엔 인용부호 (와일드 카드 문자) 를 같이 사용할수 있다.
-name *.dat : 확장자가 dat 인 모든 파일
이런 옵션들을 차례로 기술하여 파일을 찾을 경우 AND 연산이 적용된다.
하지만 -o 옵션을 이용하여 OR 을 적용할수도 있고 ( ) 를 이용하여 그
룹을 지어 적용할수도 있다. 이밖에 NOT 연산도 가능한데 옵션 앞에 !
부호를 달아 주면 된다. 밑의 몇가지 예를 살펴 보자.
# find ./ -atime +60 -mtime 120
( AND 논리연산으로 접근한지 60일 지난 파일중 수정한지 120 일 지난 파일 )
# find ./ ( -user design -o -group design )
(OR 논리연산으로 소유자나 그룹이 design 인경우 )
# find ./ ( ! -user design -o ! -group design )
(NOT 논리연산으로 소유자나 그룹이 design 이 아닌 경우 )
-perm 옵션은 숫자형태의 특정 접근 모드를 이용하여 파일을 검색하는 옵션이다.
옵션별 사용예를 들어 보자.
-perm 75 : permission = 755
-perm -002 : 모든 사람들이 기록할수 있는 파일
-perm -4000 : SUID 액세스 설정
-perm -2000 : SGID 액세스 설정
이밖에 지원 되는 내부 옵션이 있다.
-print : 대응되는 파일의 경로명을 출력
-ls : 대응되는 파일에 대한 긴 디렉토리 목록을 출력
-exec commands : 대응대는 파일에 대해 commands 명령 수행
-ok commands : 파일에 대한 commands 명령 수행전에 입력 대기 상태
-xdev : 검색 시작 디렉토리가 속해 있는 파일 시스템에 대해서만 검색 제한
-mount : IRIX 와 SCO UNIX 에서 -xdev 옵션
-prune : 서브 디렉토리는 검색을 하지 않음
-print 옵션은 근래는 기본으로 들어간다. 굳이 붙일 필요는 없고, -exec, -ok
옵션 사용시에는 반드시 마지막에 ; 으로 구문을 마감해야 한다.
예를 들어서 find 로 검색한 파일을 지우기 위해서는 다음과 같이 한다.
# find ./ -name *.* -exec rm -f {} ;
이와 같이 find 명령어를 이용한 시스템 관리 방법 예를 몇가지 들어 보겠다.
1. 파일 크기가10M 이상이며 한달 이상동안 수정되지 않은 파일을 찾는다.
# find / -type f -size +20480 -mtime +30 -ls
# find / -type f -size +20480 -mtime +30 -exec rm -f {} ;
(대응되는 파일삭제)
2. 보안에 관련된 팁이다. 모든 setuid, setgid 를 검색한다.
# find / -type f ( -perm -4000 -o -perm -2000 )
# find / -type f ( -perm -4000 -o -perm -2000 ) | diff - setuidlist
(찾아된 setuid,setgid를 기존에 작성한 목록과 비교하여 새로 추가 된것이 있는지
를 확인한다. )
# 기타 옵션
-amin N : N 분 이전 부터 access했던 file찾기
-atime N : N 시간 이전부터 access했던 file찾기
-ctime N : N 시간 이전에 상태가 변경된 파일 찾기
-mtime N : N 시간 이전에 내용이 변경된 파일 찾기
-empty : file의 크기가 0인 것을 찾기
-typec : 확장자가 c인 파일 찾기