获取Linux命令的路径
1. 概述
我们在 shell 中键入的 Linux 命令可以是内置的、函数、别名或外部可执行文件。我们可以通过几个 Linux 实用程序(例如*which 、command 、type 、locate 、whatis *和whereis )找到它是什么以及它的路径。
在本文中,我们将探讨which、command、type和whereis实用程序,因为这些实用程序通常在大多数基于 Linux 的操作系统中都可以找到。
2. PATH环境变量
在我们跳转到实用程序的解释之前,我们需要知道应用程序(例如我们的 shell )从存储在名为 PATH 的环境变量中的目录列表中查找(并执行)命令。每个目录用冒号“:”分隔。
我们可以通过调用*echo *命令来显示这个变量中的内容:
$ echo $PATH
/home/blogdemo/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
这意味着当我们在系统上安装程序或应用程序时,为了能够从我们的 shell 中的任何目录调用可执行文件,我们需要确保PATH 变量 具有可执行文件的路径。
我们可以通过运行以下命令来临时更新 PATH 变量:
$ export PATH=$PATH:/sampledir/path
$ echo $PATH
/home/blogdemo/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin:/sampledir/path
PATH 将在重新启动时重置。
**但是,我们可以通过更新.bashrc文件 **来永久更新 PATH 变量:
export PATH=$PATH:/sampledir/path
3. which命令
大多数基于 Linux 的操作系统都安装了which命令。我们可以使用这个命令来获取 Linux 命令的路径:
$ which docker
/usr/bin/docker
这说明当我们调用docker 命令时,它会运行*/usr/bin/*目录下的 Docker 可执行文件。
此外,which命令有一个参数*-a*将打印所有匹配的路径名:
$ which -a docker
/usr/bin/docker
/bin/docker
所以我们在两个不同的目录中有两个可执行文件。shell 使用*/usr/bin/*目录中的那个,因为**该目录首先出现在 PATH 变量中,**并且该文件具有正确的权限。
否则,它将转到*/bin/*目录中的下一个可执行文件:
$ echo $PATH
/home/tenzin/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin:/sampledir/path
4. command命令
command命令是另一个实用程序,我们可以使用它来查找 Linux 命令的路径。
该实用程序告诉我们可执行文件 ( docker ) 或别名 ( ls )之间的区别:
$ command -v docker
/usr/bin/docker
$ command -V docker
docker is hashed (/usr/bin/docker)
我们需要传递*-v或-V*参数:
$ command -v ls
alias ls='ls --color=auto'
$ command -V ls
ls is aliased to `ls --color=auto'
否则,它将运行我们提供的 Linux 命令:
$ command ls
Android Downloads Pictures Templates
AndroidStudioProjects file123.txt 'Screenshot from 2021-06-14 16-11-31.png' Videos
...
5. type命令
type命令不仅可以显示 Linux 命令的路径,还可以判断目标是内置的、函数、别名还是外部可执行文件。 让我们显示一个 Linux 命令的路径:
$ type -P ls
/usr/bin/ls
如果没有参数,它将显示命令定义:
$ type ls
ls is aliased to `ls --color=auto'
如果我们使用*-a*参数,它会显示命令定义、可执行类型及其路径:
$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
我们还可以使用type -t来显示可执行文件类型:
$ type -t which
file
$ type -t command
builtin
$ type -t type
builtin
$ type -t whereis
file
$ type -t ls
alias
$ type -t docker
file
6. whereis命令
最后,我们来看看whereis命令。此命令定位给定命令的二进制文件、源代码和手册页的路径。
如果我们直接调用该实用程序,它会显示二进制文件、源代码和手册页的所有位置:
$ whereis docker
docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz
此外,我们可以使用-b*参数来显示二进制文件*:
$ whereis -b docker
docker: /usr/bin/docker /etc/docker /usr/libexec/docker
此外,如果我们只想显示源(此系统上不存在):
$ whereis -s docker
docker:
如果我们只想显示手册:
$ whereis -m docker
docker: /usr/share/man/man1/docker.1.gz