파일 검색(find)
- find 명령: 시스템 내에 있는 파일들 중에서 사용자가 원하는 파일(또는 디렉토리)을 찾음, 찾은 파일에 특정 명령을 실행할 수도 있음
- find는 디렉토리(하위 디렉토리를 포함하여) 트리 내에서 파일을 검색함
- find를 사용할때 지정하는 검색 경로는 절대 경로나 상대 경로를 사용, 결과에 영향(지정하는 경로대로 표현됨)
- find는 테스트, 액션, 옵션을 적용하여 검색할 수 있기 떄문에 특정 조건에 부합하는 파일을 찾아낼 수 있음
1. find 명령어 도움말(자세한 도움말은 man find를 통해 살펴 볼 것)
- path: 파일을 찾을 위치(기본값: 현재 디렉토리)
- expression: 찾을 파일의 이름이나 찾은 파일에 처리할 기능 지정 (기본값: -print)
- expression의 구성: 연산자(operator), 옵션(option), 테스트(test), 액션(action)
2. 테스트
1) 검색 대상 파일의 종류를 지정(-type c: c 형식의 파일 검색)
a. find가 지원하는 주요 파일 형식 테스트들
파일 형식 |
설 명 |
b |
블록 특수 파일 |
c |
문자 특수 파일 |
d |
디렉토리 |
f |
파일(일반 파일) |
l | 심볼릭 링크 파일 |
p | 명명된 파이프 |
s | 소켓 |
b. 예제
2) 검색 파일의 크기 지정(-size n: n 크기의 파일 검색)
- -size +n: 이상, n보다 큰 크기의 파일을 찾음
- -size n: 일치, n과 일치하는 크기의 파일을 찾음
- -size -n: 이하, n보다 작은 파일을 찾음
a. 파일 크기 단위
기호 |
크기 단위 |
b |
512바이트 단위의 블록(기본값) |
c |
바이트 |
w |
2바이트 크기의 워드 |
k |
킬로바이트(1,024바이트) |
M |
메가바이트(1,048,576바이트, 1024킬로바이트) |
G |
기가바이트(1,073,741,824바이트, 1024메가바이트) |
b. 예제
3) 검색 대상 파일 또는 디렉토리 지정(-name pattern: 지정된 와일드 카드 패턴과 일치하는 파일과 디렉토리를 검색)
- 예제
4) 검색 대상 파일의 소유주 또는 UID를 지정(-user name: name 사용자에 속한 파일 또는 디렉토리를 검색)
- name은 사용자 명이나 UID로 표현
- 예제
5) 검색 대상 파일의 소유 그룹 또는 GID 지정(-group name: name 그룹에 속한 파일 또는 디렉토리 검색)
- name은 그룹명이나 GID로 표현
- 예제
6) 주어진 접근권한을 가지는 파일을 검색(-perm mode: 지정된 mode로 퍼미션이 설정된 파일 또는 디렉토리를 검색)
- mode는 8진수나 기호로 표현
a. -perm 테스트 도움말
- -perm mode: mode로 명시한 접근 권한과 정확히 일치하는 파일이나 디렉토리를 검색
- -perm -mode: mode로 명시한 접근 권한을 모두 포함하는 파일이나 디렉토리를 검색(and)
- -perm /mode: mode로 명시한 접근 권한을 하나 이상 포함하는 파일이나 디렉토리를 검색(or)
- -perm +mode: -perm /mode와 같음, +대신 /로 변경됨
* 참고: world-writable 취약점을 가진 파일, 디렉토리 확인
공격자가 사용자의 시스템에 사용권을 얻어 시스템 파일이나 world-writable 파일들을 변경할 수 있게 되면 심각한 보안 허점 존재함
1. world-writable 취약점: 모든 사용자가 일고 쓸수 있는 파일 또는 디렉토리를 의미
2. 해결방안: world-writable 취약점을 가진 파일이나 디렉토리를 주기적으로 찾고 확인하여 불필요한 경우 파일이나 디렉토리리릴 삭제하거나 쓰기 권한을 제거해줘야 함
3. world-writable 취약점을 가진 파일 또는 디렉토리 찾기(확인) 명령
find / -perm -2 -ls
b. 예제
7) 파일이 읽힌 최근 시간을 지정하여 검색(-atime n:n*24시간 전에 마지막으로 읽힌 파일 또는 디렉토리를 검색)
8) 파일의 소유주나 권한이 바뀐 최근 시간(-ctime n: n*24시간 전에 마지막으로 내용이나 속성이 변경된 파일 또는 디렉토리를 검색)
9) 파일이 수정된 최근 시간(-mtime n: n*24시간 전에 내용만이 변경된 파일 또는 디렉토리를 검색)
3. 연산자(operator)
- find는 복잡한 논리적 관계를 설정할 수 있도록 논리 연산자를 사용하여 테스트들을 결합하는 방법을 제공
1) find의 논리 연산자
연산자 |
설 명 |
-and |
연산자를 기준으로 양쪽 테스트 조건이 모두 참인 경우 검색 -a로 줄여 쓸 수 있음 아무런 연산자가 사용되지 않았을 경우 -and가 기본값으로 적용 |
-or |
연산자를 기준으로 양쪽 테스트 중 하나라도 참인 경우에 검색 -o로 줄여 쓸 수 있음 |
-not |
연산자 다음에 나오는 테스트가 거짓인 경우에 검색 -!로 줄여 쓸 수 있음 |
( ) | 테스와 연산자를 조합하여 표현한 내용을 하나로 그룹화 할 때 사용 기본적으로 find 명령어는 왼쪽에서 오른쪽으로 계산 수행 필요한 상황이 아니더라도 명령어의 가독성을 높이기 위해 사용되기도 함 커맨드 라인에서 사용할 때는 반드시 인용 부호를 사용해야 find의 명령 인자로 인식될 수 있음 |
2) find의 AND/OR 연산자 로직
- expr1 -operator expr2 : 논리 연산자를 사이에 둔 표현식에서 모든 경우, expr1는 항상 실행 됨, 그러나 expr2에 대해서는 연산자가 그 수행 여부를 결정하게 됨 (검색 성능을 개선하기 위함)
expr1 수행 결과 |
연산자 | expr2 수행 결과 |
참 |
-and | 실행○ |
거짓 |
-and | 실행X |
참 |
-or | 실행X |
거짓 |
-or | 실행○ |
3) 예제
a. 예제 1
- 현재 디렉토리와 하위디렉토리에서 파일의 접근권한이 644로 설정되어 있지 않은지 그리고 디렉토리의 접근권한이 755로설정되어 있지 않은지 확인
b. 예제 2
- 현재 디렉토리와 하위 디렉토리에서 파일크기가 1블럭(512byte)보다 크고 70킬로바이트 보다 작은 일반 파일을 검색
4. 액션
- find는 검색 결과를 토대로 액션을 구현할 수 있음
- 액션은 미리 정의된 액션과 사용자 지정 액션이 있음 (사용자 지정 액션 설명은 생략...)
1) 미리 정의된 find 액션
액 션 |
설 명 |
-delete |
현재 검색된 파일을 삭제함 |
-ls |
검색된 파일에 대하여 ls -dils와 같은 명령을 실행, 출력은 표준 출력으로 전송 |
검색 결과의 전체 경로명을 표준 출력으로 출력, 별도의 액션을 설정하지 않을 경우 이 액션이 기본값 |
|
-quit |
검색 조건에 해당하는 결과가 하나라도 나올 경우 검색 종료 |
2) 예제
- 현재 디렉토리와 하위 디렉토리에서 .bak 확장자를 가진 파일을 삭제
- 논리 연산자가 액션에 영향을 주기 때문에 어떤 표현을 수행할지 잘 생각해서 순서대로 기입해야 함
5. 옵션
- find의 검색 범위를 설정할 때 사용, 표현식을 만들기 위해 다른 테스트와 액션과 함께 사용될 수 있음
- find 옵션
옵 션 |
설 명 |
-depth |
디렉토리 자체 이전에 디렉토리의 파일에 대하여 find를 우선 실행하도록 함 -delete액션이 지정될 때 자동적으로 적용 |
-maxdepth Levels |
테스트와 액션을 실행할 때, find 명령의 대상이 되는 디렉토리 최대 탐색 깊이를 숫자로 지정 |
-mindepth Levels |
테스트와 액션을 적용하기 전에, find 명령의 대상이 되는 디렉토리 최소 탐색 깊이를 숫자로 지정 |
-mount |
다른 파일시스템에 마운트된 디렉토리의 탐색은 제외시킴 |
-noleaf |
유닉스형 파일시스템을 검색한다는 가정하에서 find 최적화를 사용하지 않도록 함 DOS/윈도우 파일 시스템이나 CD-ROM을 탐색할 때 필요한 옵션 |
'보안 > System' 카테고리의 다른 글
[UNIX / Linux] 특수 권한(setuid, setgid, sticky bit) (18) | 2015.06.27 |
---|---|
[UNIX / Linux] 시스템 시작과 종료 (0) | 2015.05.10 |
[UNIX / Linux] 프로세스 응용 (0) | 2015.05.10 |
[UNIX / Linux] 디렉토리 및 파일 관련 명령어 (1) | 2015.05.02 |
[UNIX / Linux] 권한 관리(chmod, chown, chgrp, umask) (13) | 2015.04.30 |
[UNIX / Linux] 디렉토리 관리 (5) | 2015.04.29 |
[UNIX / Linux] 특수 문자(Shell Metacharacter) (0) | 2015.04.28 |
[UNIX / Linux] 파일링크(ln) (0) | 2015.04.27 |
[UNIX / Linux] 입출력 재지정, 파이프 (1) | 2015.04.26 |