리눅스 명령어 locate 사용법 및 4가지 옵션

리눅스 명령어 locate는 수천 개의 파일이 있는 시스템에서 특정 파일이나 디렉터리를 빠르게 찾아야 할 때 유용하게 사용할 수 있습니다. 이번 글에서는 locate 명령어와 업데이트 된 mlocate, plocate에 대해 알아보고, 이 명령어들을 어떻게 사용하는 것이 가장 효율적인지 설명하겠습니다.

리눅스 명령어 locate란?

locate 명령어는 리눅스 시스템에서 파일이나 디렉터리의 위치를 빠르게 찾을 수 있는 도구입니다. 이 명령어는 시스템에 있는 파일의 데이터베이스를 사용하여 검색을 수행하기 때문에 매우 빠르게 결과를 반환합니다. 데이터베이스에는 파일의 전체 경로와 이름이 저장되어 있어, 이를 바탕으로 검색이 이루어집니다.

locate 명령어의 기본 사용법

locate 명령어의 기본적인 사용법은 매우 간단합니다. 예를 들어, 특정 파일을 찾고자 할 때는 다음과 같이 명령어를 입력하면, 시스템에 저장된 데이터베이스를 기반으로 파일 이름이 포함된 경로를 모두 출력합니다.

locate 파일이름
ShellScript

locate 명령어의 작동 방식

locate/var/cache/locate/locatedb 파일에 저장된 데이터베이스를 사용합니다. plocate의 경우에는 /var/lib/plocate/plocate.db 파일을 사용합니다. 이 데이터베이스 파일은 updatedb 명령어를 실행해서 시스템의 파일 구조를 스캔하여 갱신됩니다. crontab을 이용해서 매일 정해진 시간에 데이터베이스를 업데이트되게 하거나, 수동으로 데이터베이스를 업데이트할 수 있습니다.

아래의 명령어는 시스템의 모든 파일을 다시 스캔하여 데이터베이스를 최신 상태로 유지합니다.

sudo updatedb
ShellScript

mlocateplocate의 차이점

locate 명령어의 변형으로는 mlocateplocate가 있습니다. 이 두 가지는 locate의 단점을 보완하거나 특정 상황에서 더 나은 성능을 제공하기 위해 개발되었습니다.

mlocate

mlocate는 “Merging Locate”의 약자로, locate의 업그레이드된 버전입니다. 가장 큰 차이점은 데이터베이스를 병합하는 방식입니다. mlocate는 새로운 파일 시스템 데이터베이스를 생성할 때 기존 데이터베이스를 폐기하지 않고, 기존 데이터베이스와 병합합니다. 이 덕분에 성능이 향상되며, 시스템 부하가 줄어듭니다. 또한, 파일 접근 권한을 고려하여 데이터베이스를 구성하기 때문에, 사용자는 자신이 접근할 수 없는 파일의 경로를 검색할 수 없으므로 보안상 우위에 있습니다.

plocate

plocate는 최근에 등장한 locate의 또 다른 변형으로, mlocate보다 더 빠른 검색 성능을 제공하는 것을 목표로 합니다. plocate는 데이터베이스를 보다 효율적으로 압축하여 디스크 공간을 절약하며, 검색 속도 또한 크게 향상됩니다. 특히 대용량 파일 시스템에서 plocate는 매우 유리한 선택이 될 수 있습니다.

Ubuntu 24.04에서는 아래와 같이 sudo apt install 명령어를 사용해서 plocate를 설치할 수 있습니다.

sudo apt install plocate
ShellScript

plocate를 설치하면 locate 명령어는 다음과 같이 plocate를 바라보고 있는 것을 확인할 수 있습니다. 즉, 기존 locate가 아닌 plocate를 사용하게 됩니다.

그림 1. 리눅스 명령어 locate의 실제 위치: plocate를 설치한 경우
그림 1. 리눅스 명령어 locate의 실제 위치: plocate를 설치한 경우

각 명령어의 선택과 활용

세 가지 명령어 중에서 어떤 것을 선택해야 할지 고민이 될 수 있습니다. 각 명령어의 장단점이 있기 때문에 사용 환경에 따라 적절한 도구를 선택하는 것이 좋습니다.

현재 제가 사용하는 Ubuntu 24.04의 경우에는 mlocate 패키지를 별도로 제공하지 않으며, locate와 plocate만 설치가 가능합니다. 특별히 기존 버전의 locate를 꼭 써야 하는 상황이 아니라면, plocate의 사용을 권합니다.

locate 명령어의 주요 옵션

locate 명령어에는 검색 결과를 필터링하거나 출력 형식을 조정할 수 있는 다양한 옵션이 있습니다.

-c 옵션: count

locate -c where
ShellScript

파일 경로에 where가 들어간 것의 개수가 119개인 것을 확인할 수 있습니다. 파일 이름 뿐 아니라 중간 경로로 있는 디렉터리의 이름에도 where가 들어가면 모두 집계됩니다.

그림 2. 리눅스 명령어 locate: -c 옵션으로 검색 결과 집계
그림 2. 리눅스 명령어 locate: -c 옵션으로 검색 결과 집계

-i 옵션: 대소문자 구분 없이 검색

-i 옵션은 데이터베이스에서 파일 경로에 대해 대소문자를 구분하지 않고 검색합니다.

locate -i wh
ShellScript

소문자 wh를 검색했을 때에는 1633개, 대문자 WH를 검색했을 때에는 738개, 대소문자 구분없이 검색했을 때에는 2598개가 검색되었습니다. 대소문자 구분이 없는 경우는 wH, Wh도 포함이 되어서 개수가 더 많은 것을 알 수 있습니다.

그림 3. 리눅스 명령어 locate: 대소문자 구분 없이 검색한 결과
그림 3. 리눅스 명령어 locate: 대소문자 구분 없이 검색한 결과

-r 옵션: Regex

정규표현식은 특정 패턴에 맞는 파일만 검색하고 싶을 때 유용합니다. 정규표현식을 사용해서 특정 디렉터리 하위에서만 파일을 검색할 수도 있습니다. 아래 명령어는 /etc/ 디렉터리에서 .conf로 끝나는 모든 파일을 검색합니다.

locate -r '^/etc/.*conf$' 
ShellScript

파이프라인과 grep 명령어를 함께 사용하면 해당 결과에서도 원하는 결과만을 추출할 수 있습니다. 아래에서는 /etc/ 디렉터리의 하위에 있는 모든 .conf 파일을 검색하면서도 결과에 systemd가 들어간 것들만 추렸습니다.

그림 4. 리눅스 명령어 locate: 파이프라인과 grep을 함께 사용하여 필터링한 결과
그림 4. 리눅스 명령어 locate: 파이프라인과 grep을 함께 사용하여 필터링한 결과

-n 옵션: 검색 결과 개수 제한

-n 옵션은 검색 결과 출력물의 개수를 제한해야 할 때 유용하게 사용할 수 있습니다. 아래의 명령문은 README 파일을 최대 10개까지만 출력합니다.

locate -n 10 'README'
ShellScript

아래 그림에서는 검색 결과 중 10개만 보여진 것을 알 수 있습니다.

그림 5. 리눅스 명령어 locate: -n 옵션으로 검색 결과 개수 제한
그림 5. 리눅스 명령어 locate: -n 옵션으로 검색 결과 개수 제한

–statistics 옵션

그리고 아래 옵션은 locatedb에 대한 통계치를 제공합니다. 이 옵션은 locate에서는 지원하지만 plocate에서는 지원되지 않습니다.

locate --statistics
ShellScript

아래 그림과 같이 locatedb 파일의 경로를 확인할 수 있으며 GNU LOCATE02 포맷을 사용한 것을 알 수 있습니다. 또한 최종 수정 일시와 Locate 데이터베이스 크기와 모든 파일이름의 갯수, 그리고 압축률이 83.19%인 것을 확인할 수 있습니다.

그림 6. 리눅스 명령어 locate: --statistics 옵션 사용 결과
그림 6. 리눅스 명령어 locate: –statistics 옵션 사용 결과

만약 plocate를 설치한 경우에는 다음과 같이 “locate: unrecognized option ‘–statistics'” 메시지로 알려줍니다.

그림 7. 리눅스 명령어 plocate: --statistics 옵션 미지원
그림 7. 리눅스 명령어 plocate: –statistics 옵션 미지원

주의사항

locate 명령어를 사용할 때 알아두어야 할 몇 가지 주의사항이 있습니다.

데이터베이스 갱신

데이터베이스는 실시간으로 갱신되지 않습니다. 만약 최근에 파일을 생성하거나 이동했다면, updatedb 명령어를 사용해 데이터베이스를 수동으로 갱신해야 합니다.

효율성

너무 자주 데이터베이스를 갱신하면 시스템 자원을 많이 소모할 수 있습니다. 시스템을 가장 사용하지 않는 시기에 crontab을 이용해서 갱신 스케줄링을 해 두면, 보다 쾌적하게 시스템을 사용할 수 있습니다. sudo 명령어를 함께 사용해서 crontab을 설정해주셔야 updatedb가 제대로 실행됩니다.

sudo crontab -e
ShellScript

아래와 같은 설정은 매일 오전 5시 정각에 updatedb를 실행하게끔 합니다.

0 5 * * * updatedb
Plaintext

정리

리눅스 시스템에서 파일을 효율적으로 찾는 것은 매우 중요한 작업입니다. 리눅스 명령어 locate, mlocate, plocate는 각각의 장단점이 있으며, 상황에 맞게 적절히 선택하여 사용하는 것이 중요합니다. mlocate은 locate를 개선했으며, plocate 역시 성능을 개선해서 대규모 파일 시스템에서 높은 성능을 제공합니다. 또한, locate 명령어의 다양한 옵션을 통해 검색을 더욱 정밀하게 할 수 있습니다. 데이터베이스 갱신과 보안 측면에서는 locate 보다는 mlocate나 plocate를 이용하는 편이 도움이 됩니다. 이러한 도구들을 적절히 활용하여 리눅스 시스템에서의 파일 검색을 더욱 빠르고 효율적으로 수행해 보세요.

참고자료

관련 포스트

Leave a Comment