find 

파일 및 디렉토리의 이름, 생성 날짜 등의 지정한 조건에 부합하는 파일 및 디렉토리를 검색하는 명령어이다. 아래 옵션 이외에도, 다양한 옵션들이 존재한다.

 

 

1) find [경로] -name 옵션

지정한 이름과 부합하는 디렉토리 및 파일을 검색한다.

 

/ 최상위 디렉토리에서부터 sevas 라는 이름을 가진 파일 및 디렉토리를 검색해보자.

 

디렉토리만을 검색하고 싶은 경우, -type d 옵션을 함께 사용한다. ls -ld 명령어로 sevas 가 디렉토리임을 확인할 수 있다.

 

파일만을 검색하고 싶은 경우, -type f 옵션을 함께 사용한다.

 

2) find [경로] -newer [파일 및 디렉토리]

target 파일이 생성된 후, 수정된 모든 디렉토리및 파일을 검색한다.

 

test1 파일이 생성된 후 /find 디렉토리에 test2, test3 라는 파일이 생성되었기에, /find 디렉토리와 test2, test3 파일이 검색된 것을 확인할 수 있다.  

 

3) find [경로] -atime & -mtime & -ctime 옵션

-atime +n 옵션 : 파일에 접근한지 +n일 이상 지난 파일 검색 (-n 일 경우, n일 이내) 
-ctime +n 옵션 : 파일을 생성한지 +n일 이상 지난 파일 검색 (-n 일 경우, n일 이내)
-mtime +n 옵션 : 파일이 수정된지 +n일 이상 지난 파일 검색 (-n 일 경우, n일 이내)
-amin +n 옵션 : 파일에 접근한지 +n분 이상 지난 파일 검색 (-n 일 경우, n분 이내)
-cmin +n 옵션 : 파일을 생성한지 +n분 이상 지난 파일 검색 (-n 일 경우, n분 이내)
-mmin +n 옵션 : 파일 내용을 수정한지 +n분이상 지난 파일 검색 (-n 일 경우, n분 이내)

 

test1, 과 test2 는 생성된 지 1분이 지났으며, 1분 이내에 /find 디렉토리에 test3 가 생성되었음을 확인할 수 있다. 또한, 일정시간이 지난 후 명령어를 다시 수행했을 때 1분 이내에 생성되거나 속성이 변화한 파일 및 디렉토리가 없음을 확인할 수 있다.

 

-newer 옵션과 함께 사용하면 해당 파일 및 디렉토리를 기준으로 특정 시간 이후에 변화가 일어난 파일 및 디렉토리를 검색할 수 있다.

 

4) find [경로] -perm [권한]

지정한 허가권과 부합하는 파일을 검색한다. 지정한 비트와 모두 일치하는 파일을 찾는 경우에는 - 를 사용하며, 지정한 비트를 하나라도 포함하는 파일을 찾는 경우에는 / 를 사용한다.

 

/bin/passwd 파일의 허가권을 살펴보면 사용자 권한에 Set-UID 가 설정되어있다. 따라서, -perm -u+s 옵션을 통해 사용자 권한에 Set-UID 가 설정된 파일을 검색하였을 때 하단에 /usr/bin/passwd 파일이 검색된 것을 확인할 수 있다.

 

검색 중 나타나는 에러 메시지들을 리다이렉션을 통해, 화면에 출력하지 않을 수 있다. (2>/dev/null)

 

5) find [경로] -exec [명령]

패턴에 부합하는 파일을 찾으면 수행될 명령을 지정한다. 이때, {} 는 출력될 결과 내용, \ 는 줄바꿈 문자, ; 은 종결자이다.

 

정규표현식을 통해 test* 이름을 가진 모든 파일이 검색되면, 해당 파일들에 대해 ls -l 명령이 수행된 것을 볼 수 있다. 또한, 해당 파일에 대한 rm 명령이 수행되어, 모든 파일들이 삭제된 것도 확인할 수 있다. 

 

6) 다중 검색 -o (or), -a (and) 옵션

여러 파일 및 디렉토리를 한 번에 검색하기 위한 옵션으로, -o 옵션은 OR 연산자 -a 옵션은 AND 연산자 기능과 동일하다.

 

OR 연산인 -o 옵션을 함께 사용하여 login.defs 나 inittab 이라는 이름을 가진 파일들을 검색하였음을 확인할 수 있다.

 

AND 연산인 -a 옵션을 함께 사용하여 정규표현식을 사용한 *log*, *defs* 가 모두 포함된 파일이 검색되었음을 확인할 수 있다.

 

 

그룹 명령 기능

제어 연산자와, 논리 연산자 사용을 통해 한 번에 여러 명령어를 입력할 수 있다.

 

; 연산자 : 나열한 순서대로 명령어를 실행하고자 할 때 사용한다.

&& 연산자 : 앞에 위치한 명령어의 실행이 성공한 경우, 뒤에 위치한 명령어를 수행한다.

|| 연산자 : 앞에 위치한 명령어의 실행이 성공하면 그 결과를 출력하고, 실패하면 그 다음 명령어를 수행한다.

 

 

 

 

 

공부하면서 정리한 내용을 글로 작성하였습니다.

혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)

COMMENT