`updatedb`는 가능한 모든 것을 포착합니다

`updatedb`는 가능한 모든 것을 포착합니다

updatedb.findutilsupdatedb.mlocate가능한 모든 것을 포착 하지는 못하는 것 같습니다 . 모든 파일을 포함하도록 어떻게 지시할 수 있나요?

$ printf 'locate: %s, smaller than find: %s\n' "$(sudo locate '*' | wc -l | numfmt --grouping)" "$(sudo find / | wc -l | numfmt --grouping)"
locate: 9 348, smaller than find: 14 053

updatedb루트로 실행하십시오.

제목에서 알 수 있듯이 내가 원하는 것은모든 가능성을 붙잡아라. 나는 그것을 제한 locate하거나 그 범위 내로 updatedb제한하고 싶지 않습니다 .find

.conf파일을 수정할 수 없습니다 . 파일을 수정하지 않고 있는 그대로 작동하는 명령이 필요합니다.

대답은 여전히 ​​​​다른 결과를 제공합니다

$ printf 'locate.mlocate: %s, smaller than find: %s\n' "$(sudo updatedb.mlocate --prune-bind-mounts no --prunefs "" --prunenames "" --prunepaths ""; sudo locate.mlocate '*' | wc -l | numfmt --grouping)" "$(sudo find / | wc -l | numfmt --grouping)"
locate.mlocate: 13 598, smaller than find: 14 053
$ printf 'locate.findutils: %s, smaller than find: %s\n' "$(sudo updatedb.findutils --prunepaths="" --prunefs=""; sudo locate.findutils '*' | wc -l | numfmt --grouping)" "$(sudo find / | wc -l | numfmt --grouping)"
locate.findutils: 13 455, smaller than find: 14 053

답변1

sudo find /locate.updatedbupdatedb/proc/sys

mlocate버전에서는 다음과 같은 특정 파일 이름, 경로 및 파일 시스템 유형을 건너뛰는 /etc/updatedb.conf항목을 볼 수 있습니다 .updatedb

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph"
PRUNEFS="NFS afs autofs binfmt_misc ceph cgroup cgroup2 cifs coda configfs curlftpfs debugfs devfs devpts devtmpfs ecryptfs ftpfs fuse.ceph fuse.glusterfs fuse.gvfsd-fuse fuse.mfs fuse.rozofs fuse.sshfs fusectl fusesmb hugetlbfs iso9660 lustre lustre_lite mfs mqueue ncpfs nfs nfs4 ocfs ocfs2 proc pstore rpc_pipefs securityfs shfs smbfs sysfs tmpfs tracefs udev udf usbfs"

find /합계를 비교하려면 스캔할 파일 시스템을 정확히 알려야 locate '*'합니다 find. 예를 들어 별도의 /합계가 있는 경우 을 /home사용하십시오 sudo find / /home -xdev | wc -l.

updatedb더 많은 파일을 캡처 하려면 /etc/updatedb.conf필요에 따라 파일을 편집하거나 명령줄에서 구성을 재정의할 수 있습니다.

sudo updatedb --prune-bind-mounts no --prunefs "" --prunenames "" --prunepaths ""

다음 에 대해서도 findutils유사한 재정의를 수행할 수 있습니다 .

sudo updatedb --prunepaths="" --prunefs=""

시스템 데이터베이스를 덮어쓰지 않으려면 -o /path/to/file( mlocate) 또는 --output=/path/to/file( findutils)를 사용하여 출력 파일 이름을 지정할 수 있습니다.

updatedb/ locate및 모든 파일 에서 정확히 동일한 결과를 얻을 수는 없습니다 find /. 무엇보다도 /의 내용이 항상 변경되기 때문에 /proc이를 실행할 때 와 실행할 때 updatedb사이에 항상 변경 사항이 있습니다 find.

관련 정보