与“查找”相比,“定位”为什么速度如此之快?

与“查找”相比,“定位”为什么速度如此之快?

在我看来,两者locatefind找到一个文件,但是为什么locate运行这么快?

根据其文档,locate

描述:
locate 读取一个或多个由 updatedb(8) 准备的数据库,并将与至少一个 PATTERN 匹配的文件名写入标准输出,每行一个。

该数据库中有哪些文件?每个创建的文件是否都位于该数据库中?

答案1

在我看来,locate 和 find 都可以找到文件,但是为什么locate 运行得如此之快?

find搜索文件系统本身。它经过优化,可以告诉您有关特定路径的给定文件以及频繁写入的文件的所有内容(包括大小可达数 GB 的文件的内容)。

locate搜索先前索引文件系统生成的数据库。该数据库针对执行的搜索类型进行了优化locate

该数据库中有哪些文件?每个创建的文件是否都位于该数据库中?

数据库由updatedb。其中的文件由传递给 的选项决定updatedb。除非文件位于搜索区域之外或自updatedb上次运行以来已创建,否则它们将位于其中。

例如,我的 Ubuntu 默认安装有:

PRUNE_BIND_MOUNTS="yes"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS afs autofs binfmt_misc ceph cgroup cgroup2 cifs coda configfs curlftpfs debugfs devfs devpts devtmpfs ecryptfs ftpfs fuse.ceph fuse.cryfs fuse.encfs 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"

/etc/updatedb.conf文件中。

因此,它对除某些目录之外的所有内容进行索引,这些目录由于各种(但希望是相当明显的)原因和一堆不同类型的文件系统(通常包含秘密数据、远程文件系统上的数据和系统 API)而不应被索引。

相关内容