解释
which和whereis都是Linux系统中用于查找文件的命令,但它们之间存在一些关键的区别。以下是两者之间的主要差异:
1. 搜索目的和范围
which
:主要用于查找用户输入的命令或可执行文件的绝对路径。它专注于在环境变量PATH中定义的目录中搜索可执行文件,并返回找到的第一个匹配项的完整路径。
whereis
:则更全面,它用于查找某个命令相关的二进制文件、源代码文件和手册页文件。除了搜索PATH环境变量中的目录外,whereis还会搜索默认的源代码(如/usr/src或/usr/local/src)和手册页(如/usr/share/man)目录。
2. 搜索方式和输出
which
:直接搜索PATH环境变量中的目录,输出结果是第一个匹配的命令路径。如果存在多个同名命令,它只显示第一个找到的路径。
whereis
:在搜索之前可能会使用updatedb命令来更新其数据库(这取决于系统的配置和whereis的实现),这意味着它依赖于一个定期更新的数据库来查找文件。输出结果包括所有找到的匹配文件,如果存在多个同名文件,它会列出所有找到的路径。
3. 选项和灵活性
which
:选项相对较少,但常用的有-a或–all,用于显示所有匹配的路径。
whereis
:提供了更多的选项,如-b、-s、-m等,分别用于指定查找特定类型的文件(二进制文件、源代码、手册页)。此外,whereis还允许用户通过-B、-M、-S等选项更改或限制搜索特定类型文件的位置。
4. 依赖性和更新
which
:不依赖于外部数据库,直接搜索PATH环境变量中的目录,因此更新较为即时。
whereis
:依赖于updatedb命令维护的数据库,如果数据库没有定期更新,可能会错过最近安装或更改的文件。
5. 使用场景
which
:适用于快速查找某个可执行文件的路径,特别是当你需要知道某个命令的确切位置以进行脚本编写或故障排除时。
whereis
:适用于需要全面了解某个命令或文件在系统中的存在情况,包括其二进制文件、源代码和手册页的位置。
综上所述,which和whereis在Linux系统中各有其用途和优势,用户应根据具体需求选择合适的命令。
案例
whereis
whereis python
python: /usr/bin/python3.8-config /usr/bin/python2.7 /usr/bin/python3.8 /usr/bin/python3.9 /usr/bin/python /usr/lib/python2.7 /usr/lib/python3.8 /usr/lib/python3.9 /etc/python2.7 /etc/python3.8 /etc/python3.9 /usr/local/lib/python2.7 /usr/local/lib/python3.8 /usr/local/lib/python3.9 /usr/include/python3.8 /usr/share/python /home/nvidia/miniconda3/bin/python3.12-config /home/nvidia/miniconda3/bin/python3.12 /home/nvidia/miniconda3/bin/python3.1 /home/nvidia/miniconda3/bin/python
which
which python
/home/nvidia/miniconda3/bin/python