리눅스에서 파일을 찾는 방법

이 글은 리눅스 환경에서 파일을 찾는 방법을 정리한 글이다. 리눅스 핵심 레퍼런스를 참고하여 작성하였다.

기준 환경:

Ubuntu 20.04.1 LTS (WSL2 by Windows 10 x64)


파일을 찾는 명령의 종류

Command Description
find 파일, 디렉토리 검색 중 가장 많은 옵션을 제공한다. 상대적으로 느리다.
locate (mlocate) 파일, 디렉토리 Index를 만들고, 해당 Index 로 검색을 수행한다.
which 셸의 탐색 경로 내에서 명령어의 위치를 찾는다.
type Bash 셸 내장 프로그램으로 which와 같은 기능이지만 더 빠르다.
whereis 매개변수로 주어진 디렉토리 목록에 대해 탐색한다.

find

find의 경우 Man Page가 굉장히 어려워 35 Practical Examples of Linux Find Command를 참고했다. 해당 페이지 제목에서도 알 수 있듯, 한 명령어 설명에 35개의 예제가 들어간다는 것부터 범상치 않음을 짐작할 수 있다. find는 정말 그 기능이 너무나 많다. 정말 강력하다고 할 수 있으나 인덱싱이 지원되지 않아 탐색 대상이 늘어나면 꽤 느려져서 전체 디렉토리 대상으로 수행할 거라면 Interactive한 일회성 작업에 적절할 것 같다.

아래의 모든 옵션은 직접 테스트 후 작성하였다.


1. 공통 기능

Option Description Example Output
! 옵션 앞에 !를 붙이면 NOT 조건이 된다. find ! -name "*.txt" “*.txt”에 매칭되지 않는 파일, 디렉토리만 출력

2. 이름 기반 검색

Option Example Ouput
(x) find 하위 디렉토리 전부 재귀적으로 출력 (grep 하려면 전체 방문을 기다려야 함)
-name find -name input.txt 하위 디렉토리에서 input.txt를 찾아 출력
-name “패턴” find -name "*.txt" *.txt에 매칭되는 파일/디렉토리 검색 (*만 사용 가능한지 모르겠음)
(폴더 명시) find /bin (options...) /bin 아래에서 검색을 수행
-type `find -type (f d)`

3. 권한 기반 검색

권한 비트 앞에 0, 1, 2 등 한 바이트가 더 표현할 수 있는데 SGID, Sticky Bit 등의 내용에 대해 잘 이해하고 있지 못해서 생략했다. 추후 보강하겠다.

Options Example Output
-perm 권한 find -perm 777 권한이 777인 파일, 디렉토리를 출력
-perm /권한 find -perm /u=r (이 부분은 스펙과 출력이 달라서 추후 갱신할 예정입니다.) user 권한이 r인 파일(Read-only), 디렉토리를 출력 (대신 첫 글자만 해석함. rw 등 안 됨)

4. 출력에 대해 다른 명령어 수행

-exec 옵션이 있는데, -exec COMMAND {} \;와 같이 표시하는 형태이다. {} 가 각 라인이 들어갈 placeholder인 듯하다. 다만 이는 Pipelining으로도 충분히 가능해보여서 (-exec은 스트리밍을 지원하는건가?) 설명은 생략한다.


5. 소유자 기반 검색

Option Example Output
-user 소유자명 find -user root root 소유의 파일, 디렉토리 출력
-group 그룹명 find -group sb sb 소유의 파일, 디렉토리 출력 (sb는 제 유저명입니다)

참고로 그룹의 목록은 /etc/group 파일에 텍스트로 저장돼있다 :)


6. 시간 속성 기반 검색

Option Example Output
-mtime N find ~ -mtime 1 1일 내에 변경된 ~ 내의 파일 출력
-atime 접근 시각 기준
-mtime +N -mtime -M find ~ -mtime +50 -mtime -100 N일보다 더 지나고 N일 보다 덜 지난 날짜 사이에서 변경된 ~ 내의 파일 출력
-cmin/mmin N find -cmin/mmin 60 현재 디렉토리 아래에 변경된 지 60분 이내의 파일 출력
-amin N find -amin 60 현재 디렉토리 아래에 접근한 지 60분 이내의 파일 출력

7. 파일 크기 기반 검색

Option Example Output
-size N find -size 50M 50M인 파일 출력
-size +N -M find -size +50M -100M 50M ~ 100M인 파일 출력 (초과, 미만)

locate

파일, 디렉토리 Index를 만들고, 해당 Index 로 검색을 수행한다.

기본 Index 파일이 생성되는 경로는 /var/lib/mlocate/mlocate.db 이다.

Index에서 검색하므로 가장 빠르다.

Options Example Output
-b \NAME (–basename) locate \input.txt input.txt와 일치하는 이름을 가진 모든 파일/디렉토리를 출력

which, type

셸의 탐색 경로 내에서 명령어의 위치를 찾는다.

Options Output
-a 명령어에 대한 모든 일치하는 바이너리 위치를 출력

whereis

매개변수로 주어진 디렉토리 목록에 대해 탐색한다.

whereis -bm ls tr -m gcc : ls, tr 검색어에 대해 Binary, ManPage 검색 + gcc 검색어에 대해 ManPage 검색

Options Description Output
-b (binary) 검색어에 대응되는 바이너리 검색을 한다
-B,M,S [directories…] -b/m/s 옵션으로 검색 시 탐색할 디렉토리
-m (manual) 검색어에 대응되는 매뉴얼 검색을 한다 (Man Page)
-s (sources) 검색에어 대응되는 소스파일 검색을 한다
-f -B, -M, -S 옵션 사용시 반드시 사용해야 함. 찾을 검색어와 옵션의 구분자 역할을 한다

TODO:

  • find 이외에는 문서가 자세하고 정확한 경우는 잘 없어서 조사가 더 필요할 것 같다.

리눅스에서 파일을 찾는 방법

https://jsqna.com/linux-how-to-find-files/

Author

Seongbin Kim

Posted on

21-03-28

Updated on

21-03-28

Licensed under

댓글