리눅스 파일 검색 도구 상자에 또 하나의 유용한 명령어를 추가해 보겠습니다. 바로 locate 명령어입니다.
locate 명령어는 이름을 기준으로 파일과 폴더를 찾기 위해 특별히 만들어진 도구입니다. 사용법이 간단하고 패턴(pattern)을 이용해 파일을 검색할 수 있어, 특정 확장자를 가진 파일이나 특정 유형의 파일을 찾을 때 특히 유용합니다.
locate 설치하기
시스템에 따라 locate가 기본적으로 설치되어 있지 않을 수 있습니다.
Debian/Ubuntu 기반 배포판에서는 다음 명령어로 설치합니다:
sudo apt install mlocate
Redhat/CentOS/Fedora 계열에서는 다음과 같이 설치합니다:
sudo yum install mlocate
Linux locate 명령어 문법
locate 명령어는 매우 빠릅니다. 그 이유는 파일 시스템을 직접 탐색하는 대신, 주기적으로 갱신되는 파일 데이터베이스를 검색하기 때문입니다. 덕분에 검색 속도가 훨씬 빨라집니다.
다만, 마지막 데이터베이스 갱신 이후에 파일이 이동되었거나, 이름이 변경되었거나, 삭제된 경우에는 여전히 결과에 나타날 수 있다는 점에 유의해야 합니다.
기본적으로 locate가 사용하는 데이터베이스는 매일 자동으로 갱신되도록 예약되어 있습니다. 하지만 파일 구조를 크게 변경한 후 최신 정보를 기반으로 검색하고 싶다면, 수동으로 데이터베이스를 갱신할 수도 있습니다.
데이터베이스 갱신하기
locate가 파일을 찾는 데 사용하는 데이터베이스를 갱신하려면 다음 명령어를 실행합니다:
sudo updatedb
파일 찾기
locate로 파일을 검색하는 기본 문법은 다음과 같습니다:
locate OPTIONS PATTERN
참고 사항은 아래와 같습니다:
- OPTIONS(옵션)은 선택 사항이며, 아래 표의 옵션들을 사용해 locate 명령어의 기본 동작을 변경할 수 있습니다.
- PATTERN(패턴)은 검색 결과로 간주될 파일 이름이 일치해야 하는 조건입니다.
- 일치하는 파일의 검색 결과는 기본적으로 전체 파일 시스템에서 조회됩니다. 현재 작업 디렉터리에 국한되지 않습니다.
- locate가 사용할 데이터베이스가 아직 생성되지 않았다면, 데이터베이스 생성을 요청하는 메시지가 표시될 수 있습니다.
- locate 명령어는 일치하는 파일을 찾으면 종료 코드 0을 반환하고, 파일을 찾지 못했거나 오류가 발생하면 1을 반환합니다.
명령어 옵션 정리
아래는 공식 문서에 기반한 locate 명령어의 자주 사용되는 옵션들입니다:
| 옵션 | 설명 |
|---|---|
| -b | 지정된 패턴을 경로 전체가 아닌 파일의 기본 이름(base name)과만 비교하여 일치시킵니다. |
| -c | 표준 출력에 파일 이름을 출력하는 대신, 일치하는 항목의 개수만 출력합니다. |
| -e | locate 실행 시점에 실제로 존재하는 파일에 해당하는 항목만 출력합니다. |
| -i | 패턴 매칭 시 대소문자를 구분하지 않습니다. |
| -l | LIMIT개의 항목을 찾으면 성공적으로 종료합니다. --count 옵션과 함께 사용하면 결과 개수 역시 LIMIT으로 제한됩니다. |
| -P | --existing 옵션으로 파일 존재 여부를 확인할 때, 끝에 붙은 심볼릭 링크(symbolic link)를 따라가지 않습니다. 이로 인해 깨진 심볼릭 링크도 일반 파일처럼 보고됩니다. |
| -q | 데이터베이스를 읽고 처리하는 중 발생한 오류에 대한 메시지를 출력하지 않습니다. |
| -r | 기본 정규 표현식(REGEXP)을 검색합니다. 이 옵션을 사용하면 PATTERN은 허용되지 않으며, 이 옵션은 여러 번 지정할 수 있습니다. |
| --regex | 모든 PATTERN을 확장 정규 표현식(extended regexp)으로 해석합니다. |
모든 옵션 목록을 확인하려면 다음 명령어로 locate의 사용자 매뉴얼을 열어보세요:
man locate
locate 명령어 사용 예제
locate의 가장 기본적인 사용법은 주어진 이름과 일치하는 파일을 찾는 것입니다:
locate filename
위 명령어를 실행하면 파일 시스템 전체에서 일치하는 각 파일의 전체 경로 목록이 반환됩니다.
앞서 설명했듯이, locate는 파일 시스템 자체를 직접 검색하지 않습니다. 대신 파일 시스템을 인덱싱하고 주기적으로 갱신되는 데이터베이스를 검색합니다. 이 방식 덕분에 속도가 빠르지만, 방금 많은 파일을 이동시킨 직후에는 데이터베이스가 아직 갱신되지 않아 원하는 결과를 얻지 못할 수 있습니다.
-e 옵션을 사용하면 locate가 결과 목록에 추가하기 전에 해당 파일이 실제로 파일 시스템에 존재하는지 확인하도록 강제할 수 있습니다:
locate -e filename
이 옵션은 새로 생성되거나 이동된 파일이 결과에 누락되거나 잘못된 위치로 표시되는 문제는 해결해 주지 못하지만, 이미 삭제된 파일이 결과에 나타나는 문제는 해결해 줍니다.
패턴을 지정하면 파일 확장자를 기준으로 손쉽게 검색할 수 있습니다:
locate *.mp3
위 예제는 데이터베이스에서 발견된 모든 mp3 파일을 반환합니다.
locate 명령어는 기본적으로 대소문자를 구분합니다. -i 옵션을 사용하면 이 동작을 무시할 수 있습니다:
locate -i FILENAME
-c 옵션을 사용하면 일치하는 파일의 개수를 세어 확인할 수 있습니다:
locate -c filename