【问题标题】:How to get full path name of a Linux command如何获取 Linux 命令的完整路径名
【发布时间】:2016-01-18 05:54:10
【问题描述】:

我想找出Linux中命令的文件路径,例如ls的文件路径为/bin/ls。如何找出某些命令的确切路径?

【问题讨论】:

  • 使用which 例如:which ls
  • which 是要走的路。但因为我还没有被提及:locate 有时也很有用。

标签: linux shell


【解决方案1】:

正如所指出的,which <progName> 会这样做。你也可以试试:

whereis -b <progName>

这将列出所有包含progName 的路径。即我机器上的whereis -b gcc 返回:

gcc: /usr/bin/gcc /usr/lib/gcc /usr/bin/X11/gcc

【讨论】:

  • 在我的机器上我有/bin/gcc/usr/bin/gcc(这两个都是链接,在许多链接之后指向实际程序/usr/bin/x86_64-linux-gnu-gcc-9),但前者未列在whereis gcc.
  • whereis -btype 不起作用是正常情况吗?
【解决方案2】:

您可以使用which,它会为您提供命令路径:

$ which ls
/bin/ls

你可以使用type:

 $ type ls
 ls is /bin/ls

【讨论】:

  • 使用type 做得很好,它通常是内置的,如果 POSIX 没有提供的话。 type -p(如果该选项可用)将返回一个可以分配并用作命令的修剪结果。例如myprog=$(type -p someexename).
  • @DavidC.Rankin 是的,谢谢您的信息。
【解决方案3】:

您可以使用which 命令。如果您的$PATH 中有命令,它将显示完整路径:

mureinik@computer ~ $ which cp
/usr/bin/cp

它还会显示别名的详细信息:

mureinik@computer ~ $ which ls
alias ls='ls --color=auto'
    /usr/bin/ls

【讨论】:

  • 我的 Ubuntu v16.04 上没有别名的详细信息。
【解决方案4】:

是的,您可以使用which 命令找到它

which <command>

例如which cat

/bin/cat

【讨论】:

    【解决方案5】:

    您没有指定您将使用哪个 shell,但我强烈建议您使用 which,因为它不一定如您所愿。这里有两个例子,结果可能不是你所期望的:

    (1) bash 示例,命令echo:

     which echo
    

    会输出/usr/bin/echo,但如果您在 bash 脚本中使用echo 命令,/usr/bin/echo 将执行。而是执行内置命令echo,这与此类似,但在行为上并不相同。

    (2) zsh 示例,命令which:

    which which
    

    将输出消息which: shell built-in command(这是正确的,但肯定不是您要求的文件路径),而

    /usr/bin/which which
    

    将输出文件路径/usr/bin/which,但是(如在 bash 示例中)这不是您只需键入 which 时执行的内容。

    在某些情况下,当您确定知道(因为您了解您的应用程序)时,which 会产生正确的结果,但请注意,一旦内置命令、别名和 shell涉及到函数,您首先需要决定如何处理这些情况,然后根据您使用的 shell 类型选择合适的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-07
      • 2018-12-02
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多