有些文件可能会出现重名。因此,应该弄清楚被调用的是哪个可执行文件以及一个文件是编译过的二进制代码还是脚本。

实战演练

whichwhereisfilewhatis命令可以给出文件和目录的相关信息。

which

which命令用来找出某个命令的位置。

  1. $ which ls
  2. /usr/bin/ls

我们通常在使用命令时,无需知道可执行文件所在的位置。根据对PATH变量的定义,你可以直接使用/bin/usr/local/bin/opt/PACKAGENAME/bin目录下的命令。

当输入命令时,终端会在一组目录中搜索并执行所找到的第一个可执行文件。这些目录由环境变量PATH指定:

  1. $ echo $PATH
  2. /root/go/go1.17.6/bin:/root/workspace/golang/bin:/usr/local/libexec/git-core:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib

我们可以添加搜索目录并导出新的PATH。如果要将/opt/bin添加到PATH中,可以使用以下命令:

  1. $ export PATH=$PATH:/opt/bin
  2. # 将/opt/bin添加到PATH中

whereis

whereiswhich命令类似,它不仅会返回命令的路径,还能够打印出其对应的命令手册以及源代码的路径(如果有的话):

  1. $ whereis ls
  2. ls: /bin/ls /usr/share/man/man1/ls.1.gz

whatis

whatis会输出指定命令的一行简短描述。这些信息是从命令手册中解析得来的:

  1. $ whatis ls
  2. ls (1) - list directory contents

file
file 命令可以用来确定文件的类型,其语法如下:

  1. $ file FILENAME

该命令返回的文件类型可能是几个单词也可能是一大段描述:

  1. $ file /etc/passwd
  2. /etc/passwd: ASCII text
  3. $ file /bin/ls
  4. /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1
  5. (SYSV), dynamically linked (uses shared libs), for GNU/Linux
  6. 2.6.15, stripped

apropos

有时候我们需要搜索与某个主题相关的命令。apropos可以搜索包含指定关键字的手册页:

  1. $ apropos topic