Linux / 命令 / which、whereis、locate / 查找命令位置
在 Linux 中,which 主要用于查找 PATH 中的可执行文件,whereis 在预定位置查找相关文件,如可执行文件和手册。locate 搜索预先建立的文件名数据库,因此它也可以快速找到普通文件,但结果可能与当前状态不同。
应该使用哪个命令?
- 可执行文件路径: 使用
which find或 shell 的command -v find查看当前环境中可以找到哪些命令。 - 可执行文件和手册: 使用
whereis find检查程序及相关手册/源文件是否在已知位置。 - 按文件名搜索:
locate搜索已索引的路径,如果需要最新信息,可以使用find直接搜索指定目录。
搜索范围和结果取决于发行版、已安装程序、用户权限和设置。以下输出路径为说明示例,可能并非所有系统均相同。
使用 which 和 command -v 检查可执行文件
PATH 是一个环境变量,其中包含在查找要执行的命令时要搜索的目录列表。以下命令可找到名为 find 的可执行文件的路径。
which find
例如,可能会输出 /usr/bin/find。如果没有输出路径,请检查程序是否已安装并验证 PATH。然而,which 的实现方式和别名处理因系统而异,因此查看内置的 shell 命令以了解当前 shell 如何解析名称也是个好主意。
command -v find
type -a find
在 Bash 中,command -v 显示用于调用命令的名称或路径,而 type -a 显示找到的项目,例如别名、函数、内置命令以及具有该名称的可执行文件。Shell 内置命令或别名可能没有单独的可执行文件路径。您可以在 Bash 内置命令描述 中验证它们的行为。
使用 whereis 查找相关文件
whereis 在标准位置和配置的搜索路径中搜索程序的可执行文件、源文件和手册文件。
whereis find
结果列出了 find: 之后找到的路径。如果你只想查看可执行文件,可以使用 whereis -b find;如果你只想查看手册文件,可以使用 whereis -m find。如果文件未安装或在搜索路径之外,它将不会显示,因此没有输出不一定意味着系统上不存在该文件。
在 util-linux 中,whereis -l 显示搜索位置。有关搜索范围的详细信息,请参阅 util-linux whereis 文档 。
使用 locate 搜索文件名
locate 在 updatedb 创建的数据库中搜索匹配名称或路径的条目。例如,以下命令会查找索引路径中包含 find 的条目。
locate find
输出不仅可以包含可执行文件,还可以包含手册或其他名称的文件。选项可能因已安装的实现而异,因此请先检查 locate --help。例如,在 plocate 中,可以将结果限制为最多 10 个,如下所示。
locate -l 10 find
如果数据库过时,可能会缺少新文件,并且已删除的路径仍然存在。搜索中排除的路径和用户的访问权限也会影响结果。发行版可能会定期更新数据库,在允许系统管理的环境中,可以使用 sudo updatedb 直接更新它。由于这可能会扫描广泛的系统目录,请在运行前检查管理策略。实现及相关手册可以在 plocate 官方文档 中找到。
检查安装状态和最新文件
locate 可能未安装。例如,你可以使用 Ubuntu 24.04 plocate 软件包,在具有管理员权限并能访问软件包仓库的环境中,可以按如下方式安装它。
sudo apt update
sudo apt install plocate
在其他发行版或版本中,软件包名称和更新方法可能有所不同,因此请查阅对应发行版的文档。如果安装后数据库仍不存在或未更新,管理员可能需要初始化或更新它。
若要在不等待数据库的情况下直接在你的主目录中查找当前文件,请执行以下操作:
find "$HOME" -name 'example.txt'
此命令直接搜索指定的目录树,因此可能比 locate 花费更长时间,并且无法搜索您没有访问权限的目录。将 example.txt 替换为您要查找的实际文件名,并保留引号,以便搜索模式不会被 shell 预先扩展。




