Linux 中的“定位”和“查找”有什么区别?

zha*_*nwu 45 linux

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

小智 47

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

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

在任何情况下,man find并且man locate将进一步帮助你。

  • http://unix.stackexchange.com/questions/60205/locate-vs-find-usage-pros-and-cons-of-each-other 更详细地回答了这个问题。 (10认同)
  • ...和`updatedb` 大致类似于`find / -type f | gzip > locate.gz`。 (2认同)

小智 5

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

locate将在离线模式下工作:

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

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

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

因此,从性质上看,很明显locate比find更快,但find是实时的。

希望这将有助于理清这个想法。一切顺利。:)