Shell - 查找文件命令之locate

Linux系统是由很多文件组成的,这些文件是通过文件系统组织起来。其结构是从类Unix系统继承而来,一代代的发展,具有一定的惯例。

我们所面对的,是Linux系统中的庞大数量的文件,这就为我们查找文件带来了难题。

那么为了找到我们想要的文件,最常用的两个工具就是:locate和find。

locate程序会根据路径名,在数据库中进行快速搜索,然后输出与给定子串匹配的每个名称。例如,我们要查找所有名称以 zip 开头的程序。由于我们要查找的是程序,因此可以假定包含程序的目录名以 bin/ 结尾。

因此,我们可以尝试使用下面方法来查找文件:

$ locate bin/zip

/usr/bin/zip

/usr/bin/zipcloak

/usr/bin/zipgrep

/usr/bin/zipinfo

/usr/bin/zipnote

/usr/bin/zipsplit

locate命令会搜索它的数据库的路径名,输出所有包含这个字符串“bin/zip”的路径。

如果搜索要求比较复杂,我们可以使用组合命令,比如grep,来设计更强大的搜索。

$ locate zip | grep bin

/bin/bunzip2

/bin/bzip2

/bin/bzip2recover

/bin/gunzip

/bin/gzip

/usr/bin/funzip

/usr/bin/gpg-zip

/usr/bin/preunzip

/usr/bin/prezip

/usr/bin/prezip-bin

/usr/bin/unzip

/usr/bin/unzipsfx

/usr/bin/zip

/usr/bin/zipcloak

/usr/bin/zipgrep

/usr/bin/zipinfo

/usr/bin/zipnote

/usr/bin/zipsplit

locate 程序已经存在了很多年,有几种常用的变体。现代 Linux 发行版中最常见的两个版本是 slocate 和 mlocate,不过它们通常是通过名为 locate 的符号链接访问的。不同版本的 locate 有相互重叠的选项集。有些版本包含正则表达式匹配和通配符支持。请在你的系统中查看 locate 的 man page,以确定安装的是哪个版本的 locate。

locate 数据库从何而来?

你可能会注意到,使用某些Linux发行版,刚把系统安装好,运行locate命令是没用的,但如果第二天再试一次,它就能正常工作了。这是什么原因呢?

locate 数据库是由另一个名为 updatedb 的程序创建的。通常,它是一个会定期运行的cron job(作业),也就是由 cron daemon(守护进程)定期执行的任务。大多数装有 locate 的系统每天运行一次 updatedb。由于数据库的更新不是实时的,因此在使用 locate 时,你会发现最新的文件是显示不出来的。要解决这个问题,可以通过成为超级用户并在提示符下运行 updatedb 来手动运行updatedb 程序。

猜你喜欢

转载自blog.csdn.net/guoqx/article/details/132054500