locate vs find
Locate 명령어와 Find 명령어는 리눅스 시스템 내 존재하는 특정 파일 및 디렉토리를 검색하는 명령어이다.
같은 목적을 가진 두 명령어의 차이점은 무엇인지 알아보자.
정리
명령어 | 특징 | 이용사례 |
---|---|---|
locate | Find 보다 빠른 검색 속도 Find 보다 한정적인 검색 옵션 파일이나 디렉토리를 DB화하여 파일 검색 updatedb 명령어를 통한 DB 갱신 필요 |
파일이 존재하는 것은 알고 있으나 파일 위치가 어디인지 모르는 경우 |
find | Locate 보다 느린 검색 속도 Locate 보다 다양한 검색 옵션 Real System에서 파일 검색하여 경로 출력 Always up-to-date 접근 제한 파일 및 디렉토리는 검색 불가 |
검색과 더불어 다른 작업들을 수행할 때 (퍼미션 변경,찾은 파일 모두 삭제 등 ..) |
Locate 명령어
# 사용방법
$ locate [Option] [Pattern]
Locate 명령어는 이미 생성된 데이터베이스를 통해 검색을 진행하기에, 파일 검색 측면에서 빠른 속도를 보임. 그러나 파일이나 데릭터리를 데이터베이스화 하여 사용하므로, 정보를 갱신하지 않는다면 부정확한 데이터를 출력할 가능성이 존재한다.
- Locate 명령어는 /cat/lib/mlocate/mlocate.db 파일에 관련 정보를 담아서 관리함.
- 사용하기 전에 sudo updatedb 명령어를 실행 후 검색을 하는 것을 권장
만약 서버에서 NFS를 사용하는 경우 update 명령어로 인해 마운트된 영역이 느려질 수 있고 최악의 경우 eviction까지 이루어짐. 그렇기에 NFS 환경에서는 updatedb 명령어를 지양하는 편이 좋다
만약 NFS 환경에서 updatedb를 사용해야한다면 아래처럼 updatedb.conf를 수정해주자.
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: 경로를 지정하여 제외함
Find 명령어
# 사용방법
$ find [Options] [Path] [Expression]
path 이하 모든 디렉토리에서 파일 검색. Path가 지정되지 않은 경우 현재 디렉토리가 기준이 된다.
- Find 명령어는 단순히 파일을 찾는 역할만을 하는 것이 아닌, 찾은 파일에 대하여 특정 작업까지도 수행할 수 있다.
- 현재 디렉토리부터 하위 디렉토리까지 주어진 여러 조건을 가지고 파일 및 디렉토리를 찾아서 해당 경로를 출력해준다.
- Find 명령어는 다양한 방법으로 파일을 찾을 수 있도록 많은 옵션과 방법들을 제공한다.
Find는 리눅스에서 가장 강력한 찾기 명령이지만, 접근 제한된 파일이나 디렉토리에 대해서는 Permission Denied 의 메시지 출력과 함께 찾기에 실패한다.