我知道当您在shell上时,只能使用在PATH上某个目录中可以找到的命令。即使我也不知道如何查看PATH变量上的目录(这是另一个可以回答的好问题),我想知道的是:
我来壳写:
$ lshw
我想知道shell上的命令,该命令可以告诉我该命令位于何处。换句话说,此“可执行文件”位于何处?
就像是:
$ location lshw
/usr/bin
任何人?
我知道当您在shell上时,只能使用在PATH上某个目录中可以找到的命令。即使我也不知道如何查看PATH变量上的目录(这是另一个可以回答的好问题),我想知道的是:
我来壳写:
$ lshw
我想知道shell上的命令,该命令可以告诉我该命令位于何处。换句话说,此“可执行文件”位于何处?
就像是:
$ location lshw
/usr/bin
任何人?
Answers:
如果您使用的是Bash或zsh,请使用以下命令:
type -a lshw
这将显示目标是内置,函数,别名还是外部可执行文件。如果是后者,它将显示在中显示的每个位置PATH
。
bash$ type -a lshw
lshw is /usr/bin/lshw
bash$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
bash$ zsh
zsh% type -a which
which is a shell builtin
which is /usr/bin/which
在Bash中,对于函数,type -a
还将显示函数定义。您可以declare -f functionname
用来做相同的事情(您必须对zsh使用它,因为type -a
没有这样做)。
locate
它可以帮助查找文件。它使用由updatedb
cron作业运行的数据库来维护。由于locate
搜索数据库而不是整个文件系统,因此它比find
(可以用作最后手段)要快得多。
type -a
可能会造成混乱。例如,如果nvm
是bash函数,我需要做:type -a nvm | head -n1
找出确切的含义nvm
。
type -a
输出函数定义以及可执行文件的类型。使用的风险head
在于,如果名称具有多个类型,则不会输出其他类型。您可能要看看type -t
。
PATH
是环境变量,可以与echo命令一起显示:
echo $PATH
这是由冒号'分隔的路径列表:
”
该which
命令告诉您在运行命令时执行哪个文件:
which lshw
有时您得到的是通往符号链接的路径;如果您想将该链接跟踪到实际可执行文件所在的位置,则可以使用readlink
并将其输入以下内容which
:
readlink -f $(which lshw)
该-f
参数指示readlink
递归地遵循符号链接。
这是我机器上的一个例子:
$ which firefox
/usr/bin/firefox
$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh
Korn shell ksh
提供了whence
内置功能,该功能可以标识其他Shell内置功能,宏等。which
但是,该命令更便于移植。
whence -a
类似于Bash的type -a
。