Engineering/Linux

[Linux] Locate 와 FIND 명령어 차이점

[앙금빵] 2021. 12. 31.

Locate 명령어와 Find 명령어는 리눅스 시스템 내 존재하는 특정 파일 및 디렉토리를 검색하는 명령어이다.

그렇다면 같은 목적의 이 두 명령어들의 차이점은 무엇인지에 대해 알아보자.

Locate vs Find 정리

 

Locate 명령어

사용법
$ locate [Option] [Pattern]

 

Locate 명령어는 이미 생성된 데이터베이스를 통해 검색을 진행하기에, 파일 검색 측면에서 빠른 속도를 보인다. 그러나 파일이나 데릭터리를 데이터베이스화 하여 사용하므로, 정보를 갱신하지 않는다면 부정확한 데이터를 출력할 가능성이 존재한다.

 

  • Locate 명령어는 /cat/lib/mlocate/mlocate.db 파일에 관련 정보를 담아서 관리한다.
  • 사용하기 전에 sudo updatedb 명령어를 실행 후 검색을 하는 것을 권장한다.

 

또한 만약, NFS 를 이용중인 경우 update 명령어로 인해 마운트된 영역이 느려질 수 있고 최악의 경우(거의 일어나진 않지만) eviction까지 이루어진다. 그렇기에 NFS 환경을 이용하는 경우 updatedb 명령어를 지양하는 것을 권장한다.

 

만약 NFS 환경에서 updatedb 명령어를 이용해야 할 경우

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"

 

PRUNEFS: 이곳에 NFS를 추가하면 updatedb 수행시 제외한다.

PRUNEPATHS: 경로를 지정하여 제외한다.

Prune = 가지를 치다.
FS = File System
PATH = 경로

 

Find 명령어

사용법
$ find [Options] [Path] [Expression]
path 이하 모든 디렉터리에서 파일을 찾는다. Path가 없으면 현재 디렉토리가 기준

 

  • Find 명령어는 단순히 파일을 찾는 역할만을 하는 것이 아닌, 찾은 파일에 대하여 특정 작업까지도 수행할 수 있다.
  • 현재 디렉토리부터 하위 디렉토리까지 주어진 여러 조건을 가지고 파일 및 디렉토리를 찾아서 해당 경로를 출력해준다.
  • Find 명령어는 다양한 방법으로 파일을 찾을 수 있도록 많은 옵션과 방법들을 제공한다.

 

Find는 리눅스에서 가장 강력한 찾기 명령이지만, 접근 제한된 파일이나 디렉토리에 대해서는 Permission Denied 의 메시지 출력과 함께 찾기에 실패한다.

 


참조

What is the difference between 'locate' and 'find' in Linux?

https://unix.stackexchange.com/questions/60205/locate-vs-find-usage-pros-and-cons-of-each-other

https://neo-orcl.tistory.com/108

 

댓글