如何找出 unix 命令执行的位置?
How to find out the location where a unix command executes from?
有什么方法或命令可以找出执行标准命令的路径吗?示例 ls
、mkdir
、mysql
、hadoop
等。
我知道它们的来源可以从$PATH
变量中找到,并且应该在/bin
目录之一中。但是如何从命令运行的地方正确获取目录?
which
命令 returns 可执行文件的完整路径,例如:
mureinik@comupter ~ $ which mkdir
/usr/bin/mkdir
如果您确实需要该目录,您可以随时对其应用 dirname
:
mureinik@conmputer ~ $ dirname `which mkdir`
/usr/bin
阅读 OP 的问题,我注意到有针对性地排除了依赖 PATH
的方法,并忽略了 which
的明显答案(因为这正是它所做的)。顺便说一下,which
程序最初是一个 C-shell 脚本,尽管还有其他实现(FreeBSD, and bash for instance). Solaris, for instance, has a version little changed from 4.2BSD,其手册页指出
Both aliases and path are taken from the user's .cshrc file.
如果您不使用 C-shell,则 which
的原始版本的用处有限。因为没有标准版本,结果(和工具的功能)可能因系统而异。某些 shell(例如 ksh
)具有相似的特征,但名称不同,例如 whence
在 ksh
的情况下(bash 提供 ksh 别名type
但不是 `whence 关键字)。
我不经常使用 which
,有更好的工具 (conflict and path)。但是忽略了显而易见的问题,措辞上的问题很容易提出一个更有趣的问题:一个应用程序如何确定另一个应用程序所在的目录 运行。不是显而易见的 "where is the executable?",而是 "what was the working directory when the program was run?"。最近有一个类似的问题涉及相对路径名。
在某些支持 /proc
伪文件系统的系统上,有一个 cwd
节点给出给定进程的当前工作目录。问题 Find out current working directory of a running process? 对此进行了详细说明。
xterm 的可选功能 "spawn-new-terminal"(2007 年在 patch #225 中添加)使用此信息在与用户当前 [=40] 相同的工作目录中创建一个新的终端实例 运行 =]shell 工作目录.
脚本可以通过从相关命令的进程 ID 开始并检查 /proc
树中相应的 cwd
节点来使用它。
有什么方法或命令可以找出执行标准命令的路径吗?示例 ls
、mkdir
、mysql
、hadoop
等。
我知道它们的来源可以从$PATH
变量中找到,并且应该在/bin
目录之一中。但是如何从命令运行的地方正确获取目录?
which
命令 returns 可执行文件的完整路径,例如:
mureinik@comupter ~ $ which mkdir
/usr/bin/mkdir
如果您确实需要该目录,您可以随时对其应用 dirname
:
mureinik@conmputer ~ $ dirname `which mkdir`
/usr/bin
阅读 OP 的问题,我注意到有针对性地排除了依赖 PATH
的方法,并忽略了 which
的明显答案(因为这正是它所做的)。顺便说一下,which
程序最初是一个 C-shell 脚本,尽管还有其他实现(FreeBSD, and bash for instance). Solaris, for instance, has a version little changed from 4.2BSD,其手册页指出
Both aliases and path are taken from the user's .cshrc file.
如果您不使用 C-shell,则 which
的原始版本的用处有限。因为没有标准版本,结果(和工具的功能)可能因系统而异。某些 shell(例如 ksh
)具有相似的特征,但名称不同,例如 whence
在 ksh
的情况下(bash 提供 ksh 别名type
但不是 `whence 关键字)。
我不经常使用 which
,有更好的工具 (conflict and path)。但是忽略了显而易见的问题,措辞上的问题很容易提出一个更有趣的问题:一个应用程序如何确定另一个应用程序所在的目录 运行。不是显而易见的 "where is the executable?",而是 "what was the working directory when the program was run?"。最近有一个类似的问题涉及相对路径名。
在某些支持 /proc
伪文件系统的系统上,有一个 cwd
节点给出给定进程的当前工作目录。问题 Find out current working directory of a running process? 对此进行了详细说明。
xterm 的可选功能 "spawn-new-terminal"(2007 年在 patch #225 中添加)使用此信息在与用户当前 [=40] 相同的工作目录中创建一个新的终端实例 运行 =]shell 工作目录.
脚本可以通过从相关命令的进程 ID 开始并检查 /proc
树中相应的 cwd
节点来使用它。