Linux 강좌 / 파일과 명령 찾기 - find, locate, which, whereis
파일을 실제 디렉터리에서 조건으로 찾으려면 find, 미리 만든 파일 이름 색인에서 빠르게 찾으려면 locate를 사용합니다. 실행할 명령의 위치가 궁금할 때는 which 또는 whereis를 쓰되, 별칭·함수까지 포함해 셸이 무엇을 실행할지 알려면 Bash의 type이나 command -v가 더 적합합니다. 이 강좌는 찾으려는 대상에 따라 도구를 구분합니다.
find로 현재 파일 시스템 검색하기
find는 지정한 시작 디렉터리 아래를 순회하며 이름, 종류, 크기 등 조건에 맞는 항목을 찾습니다. 다음 실습은 Bash와 GNU find를 가정합니다. ~/linux-course-11-practice가 이미 있다면 다른 이름을 고르세요. 첫 mkdir가 실패하면 뒤의 명령을 실행하지 마세요.
mkdir ~/linux-course-11-practice cd ~/linux-course-11-practice mkdir drafts archive touch drafts/notes.txt drafts/todo.md archive/old.txt
pwd로 실습 위치를 확인한 다음 .txt로 끝나는 일반 파일을 찾아 보세요. 따옴표는 셸이 *.txt를 먼저 펼치지 못하게 하여 패턴을 find에 그대로 전달합니다. -maxdepth 2는 시작점에서 두 단계까지만 살펴보는 GNU 옵션입니다.
pwd find . -maxdepth 2 -type f -name '*.txt'
출력 순서는 파일 시스템에 따라 다르지만 두 경로가 나와야 합니다.
./drafts/notes.txt ./archive/old.txt
-type f는 일반 파일을, -name은 이름 패턴을 지정합니다. 대소문자를 무시하는 이름 검색에는 GNU find의 -iname을 사용할 수 있습니다. 실제 운영 디렉터리에서는 권한이 없는 하위 경로 때문에 오류가 날 수 있으며, find가 출력한 경로만으로 파일 내용을 읽을 권한까지 확인한 것은 아닙니다.
locate로 파일 이름 색인 검색하기
locate는 현재 트리를 순회하는 대신 미리 구축된 파일 이름 데이터베이스를 검색합니다. 데이터베이스가 준비되어 있다면 넓은 범위의 이름 검색이 빠르지만, 마지막 갱신 뒤 생긴 파일은 아직 검색되지 않을 수 있고 이미 지운 이름이 잠시 남을 수도 있습니다. 구현과 설정에 따라 권한이 없는 경로의 표시 방식도 다릅니다.
locate hosts
검색 결과에 /etc/hosts가 포함될 수 있지만 다른 경로도 나올 수 있습니다. locate가 없거나 데이터베이스가 아직 없다면 설치된 배포판의 제공 도구와 색인 갱신 방식을 확인하세요. 예를 들어 GNU Findutils의 updatedb는 색인을 갱신하지만, 실행 위치와 권한은 시스템 설정에 따릅니다. 바로 지금 존재하는 파일을 확실히 확인하려면 find나 ls로 다시 검사하세요.
실행 파일의 경로 확인하기
which는 보통 PATH 환경 변수의 검색 경로에서 실행 파일을 찾습니다. 예를 들어 다음 명령은 ls 실행 파일의 경로를 보여 줄 수 있습니다. /usr/bin/ls나 /bin/ls처럼 결과는 시스템에 따라 다릅니다.
which ls
다만 which의 구현은 시스템마다 다르고, 셸 별칭이나 함수가 실제 입력을 가로채는 경우까지 같은 방식으로 반영한다고 가정하면 안 됩니다. Bash에서 현재 셸이 명령 이름을 어떻게 해석하는지 확인할 때는 다음 명령이 더 직접적입니다.
type -a ls command -v ls
type -a는 같은 이름의 별칭·함수·내장 명령·실행 파일 후보를 보여 줄 수 있고, command -v는 셸에서 그 이름을 찾을 수 있는지 확인할 때 유용합니다. 출력 형태는 현재 셸 설정에 따라 달라집니다.
whereis로 바이너리와 매뉴얼 위치 살펴보기
whereis는 명령 이름과 관련된 실행 파일, 소스, 매뉴얼 위치를 알려 주는 도구입니다. 예를 들어 whereis ls는 바이너리 경로와 매뉴얼 경로를 함께 보여 줄 수 있습니다. 모든 항목이 설치되어 있다는 뜻은 아니며, 탐색 위치도 구현과 설정에 따라 달라집니다.
whereis ls
| 궁금한 것 | 우선 사용할 도구 | 주의점 |
|---|---|---|
| 현재 디렉터리 트리의 조건에 맞는 파일 | find |
범위와 권한에 따라 검색 시간·오류가 달라짐 |
| 색인에 기록된 파일 이름 | locate |
색인이 오래되면 실제 상태와 다를 수 있음 |
| PATH의 실행 파일 경로 | which |
별칭·함수까지의 셸 해석과 구별 |
| 셸이 명령 이름을 해석하는 방식 | type -a, command -v |
현재 셸의 설정에 의존 |
| 명령의 바이너리·매뉴얼 위치 | whereis |
검색 대상과 결과는 환경에 의존 |
파일 이름 검색과 명령 해석 검색은 다른 문제입니다. find로 ls라는 파일을 찾았다고 해서 현재 셸에서 입력한 ls가 반드시 그 파일을 실행하는 것은 아닙니다. 혼동될 때는 type -a ls의 결과를 확인하세요.
공식 문서
GNU Findutils 매뉴얼에서 find와 locate를, GNU Bash 내장 명령 문서에서 type과 command를 확인할 수 있습니다. whereis의 구현별 옵션은 설치된 시스템의 man whereis를 참고하세요.









