Linux 中‘locate’和‘find’有什么区别?

Linux 中‘locate’和‘find’有什么区别?

Linux中为什么有两个如此相似的命令?通常在什么情况下使用它们?

答案1

find在真实系统中搜索。速度较慢但始终保持最新,并且具有更多选项(大小、修改时间……)

locate使用以前构建的数据库(命令updatedb)。速度更快,但使用“较旧”的数据库,并且仅搜索名称或名称的一部分。

无论如何,man find都会man locate进一步帮助您。

答案2

locate和命令都find可以查找文件,但是它们的工作方式却截然不同。

locate将在离线模式下工作:

  • 简单来说,Unix系统中的文件索引数据库叫定位将列出 Unix 系统附带的所有文件的位置。执行时locate,它将使用该数据库来搜索特定文件。问题是,locate如果您刚刚创建了一个现在想要搜索的文件,定位不会起作用,因为定位数据库不是最新的。为了解决这个问题,你可以使用updatedb更新定位数据库。locate再次执行将找到新创建的文件。因此,许多 Linux 系统管理员使用作业cron定期更新定位数据库。

find将以在线/“实时”模式工作。

  • 它实际上会搜索所有目录来查找指定的特定文件,并逐个检查每个文件。因此,它需要大量的 I/O 调用。

因此根据性质,很明显locate比find快,但是find是实时的。

希望这能帮助你理清思路。祝一切顺利。:)

答案3

locate只是查看其数据库并报告文件位置。

find不使用数据库,它遍历所有目录及其子目录并查找符合给定条件的文件。

答案4

使用 find 的替代方法是使用locate命令。此命令通常更快,并且可以轻松搜索整个文件系统。您可以使用apt-get安装该命令:

sudo apt-get update
sudo apt-get install mlocate

之所以locate比find快是因为它依赖于文件系统上的文件数据库。数据库通常使用cron脚本每天更新一次,但您可以通过输入以下内容手动更新:

sudo updatedb

现在运行此命令。请记住,如果您想查找最近获取或创建的文件,数据库必须始终保持最新。

相关内容