Linux中locate、which和find命令的区别
有许多 Linux 实用程序可用于在 Linux 安装中定位文件,其中最常见的三个是 find、locate 和 which。所有这三个实用程序都具有相似的功能,但以不同的方式工作和返回数据。在本文中,我们将讨论这三个有用且功能强大的命令行实用程序来搜索特定文件。
定位命令
locate是一个 Unix 实用程序,用于在文件系统上查找文件。它搜索由 updatedb命令生成的文件系统上所有文件的预建本地数据库。请注意,更新数据库至关重要,因为默认情况下,保存在 24 小时以内的最近文件不会更新到数据库中,并且数据库会在 24 小时内更新一次。
句法:
locate [OPTION]... PATTERN...
例如:让我们在桌面上创建一个名为findme.txt的文件。在不更新数据库的情况下使用 locate 命令不会返回任何输出,但是在更新文件系统上所有文件的本地数据库后,我们终于能够找到该文件。
- 创建一个新文件 findme
echo "findme" >> findme
- 使用定位 findme
- 无法找到该文件。更新文件系统上所有文件的本地数据库。
- 再次尝试定位命令定位 findme
- 显示文件位置。因此,在使用 locate 命令之前更新数据库是必不可少的。
哪一个
which命令在 $PATH 环境变量中定义的目录中搜索给定的文件名。如果找到匹配项,则返回可执行文件的完整路径
句法:
which [-a] filename ...
例如:
which aircrack-ng
返回 aircrack-ng 可执行文件的路径。
找
find命令是比 locate或which更积极的搜索工具。 Find 能够递归搜索各种文件的任何给定路径。使用 file 命令,我们可以按名称、所有者、组、权限、类型、大小、修改时间、日期和各种其他条件搜索文件。 find 命令非常高效,但这种效率是以时间为代价的。
句法:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
-H 、 -L和-P选项控制符号链接的处理。如果需要,选项 -H -L -P -D -O 必须出现在第一个路径名之前。起始点列表之后的命令行部分是表达式。这是一种查询规范,描述了我们如何匹配文件以及我们如何处理匹配的文件。
输入文件或文件。将显示当前目录和所有子目录中所有文件的路径名。默认目录是当前目录,默认表达式是-print 。
. represents current directory
/ represents root directory
- 按名称搜索文件
# find / -name findme
- 仅搜索文本文件
# find / -name "*.txt"
- 搜索文件忽略大小写。
# find / -iname fIndMe
- 仅搜索文件。
# find / -type f -name findme
- 仅搜索目录。
# find / -type d -name find
- 根据权限搜索文件。
# find / -type f -perm 0777 -print
- 更改文件的权限。
# find / -type f -perm 0777 -exec chmod 755 {} \;
- 文件修改超过 10 天。
# find / -mtime 10
- 文件修改时间少于 10 天。
# find / -mtime -10
- 文件修改时间超过 1 分钟。
# find / -mmin 1
- 文件修改时间不到 1 分钟。
# find / -mmin -1
- 大小超过 10MB 的文件。
# find / -size 10M
- 搜索空文件和目录
# find / -empty
结论:locate 和 find 的最终区别
- 使用 locate 代替 find 命令来查找文件名有利有弊。 locate 命令可以更快地查找文件,因为它搜索数据库,而不必实时搜索整个文件系统。缺点是 locate 命令无法找到自上次创建数据库以来添加到系统中的任何文件。
- 并非文件系统中的每个文件都存储在数据库中。 /etc/updatedb.conf 文件的内容通过删除选择的挂载类型、文件系统类型、文件类型和挂载点来限制收集哪些文件名。例如,文件名不是从远程安装的文件系统(cifs、nfs 等)或本地安装的 CD 或 DVD 收集的。包含临时文件 (/tmp) 和假脱机文件 (/var/spool/cups) 的路径也会被修剪。您可以添加项目以根据需要修剪(或删除一些您不想修剪的项目)定位数据库。
- 作为普通用户,您将无法从 locate 数据库中看到您在文件系统中通常看不到的任何文件。例如,如果您无法键入 ls 来查看 /root 目录中的文件,则您将无法定位存储在该目录中的文件。
- 如果在 updatedb 运行后向系统添加文件,则在 updatedb 再次运行之前您将无法找到这些文件。要让数据库包含当前时刻的所有文件,您只需以 root 身份从 shell 运行 updatedb。
- find 命令是基于各种属性在文件系统中搜索文件的最佳命令。当您运行 find 时,它会实时搜索您的文件系统,这会导致其运行速度比 locate 慢,但可以为您提供最新信息-Linux 系统上文件的时刻视图。但是,您也可以告诉 find 从文件系统中的特定点开始,这样可以通过限制正在搜索的文件系统的区域来加快搜索速度。