如何从命令行找到应用程序的路径?


Answers:


123

如果它在您的路径中,则可以运行type gitwhich git。该which命令在获取正确的路径时遇到问题(环境和点文件之间的混淆)。对于type,您可以只获取带有-p参数的路径。

如果它不在您的路径中,则最好使用进行查找。它将locate -b git 找到名为“ git”的任何内容。这将是一长串的清单,因此最好使用进行限定locate -b git | fgrep -w bin


10
locate无休止地使用它(它非常快),但是对于那些不了解它的人来说,locate它的更新只是它的最新数据库更新,它是每天在我的Ubuntu上自动运行的。该刷新命令是sudo updatedb...还locate具有内置的正则表达式的能力,所以像这样的命令的工作原理:locate -br "^git$"... -b`手段限制搜索只是基本名称 ...或没有-b,它搜索的完整路径。也,它只会搜索您配置为搜索的路径。.除了正则表达式过滤器之外,没有命令行控件。
Peter.O 2012年

7
不想typewhichwhich容易感到困惑
吉尔斯2012年

@Gilles,这对我来说很有趣,其行为恰好相反:type是一个内置shell告诉我别名等信息,并且which是一个外部程序向我展示可执行文件的路径……尽管如果有一个内置程序进入该可执行文件不会被调用的方式。
quodlibetor 2012年

@quodlibetor的问题which是它不了解shell的内置函数和功能(当您想知道该命令将执行什么操作时,这是很重要的),并且$PATH在某些系统上使用了不同的内容。
吉尔斯2012年

48

POSIX标准要做到这一点的方式是command -v git。所有类似UNIX的系统都应支持此功能。


4
我知道这已经有一年多了,但这正是我一直在寻找的东西。惊讶的是这不是公认的答案。
Akoi Meexx


13

这里的其他答案似乎对Linux的现代版本在很大程度上面向,所以如果你使用git的是没有一个操作系统上locatewhereiswhich,或apropos(如Solaris,HPUX等),那么总有老的待机find

find / -name git 

上述系统的一个较旧版本,您可能需要-print提供一个选项find

find / -name git -print

如果确实使用locate,请确保updatedb定期运行。(locate.updatedb在某些BSD衍生产品上)


8
对于路径中的程序,请使用type ; 它可靠且可移植(30年以前的系统除外)。
吉尔斯2012年

谢谢@吉尔斯。我从来不知道type。:)这绝对是保留曲目!
蒂姆·肯尼迪

可能值得指出的是,find从您建立根目录的位置开始对文件系统进行全面的深度优先搜索。因此find / -name git将遍历您的整个系统。如果您知道该程序在您的路径上,您通常可以做IFS=":"; path=$PATH; set $path; for dir in $path; do find $dir -name git; done,尽管Unix文件系统足够允许,如果您的程序中包含奇怪的字符的话,可以用各种方式破坏它PATH
quodlibetor 2012年

实际上,我之前给出的命令将破坏您PATH的正确权限(与以前相同的警告)是IFS=":"; for dir in $PATH; do find "$dir" -name git; done。另外,重申一下,此答案只能由无法访问typeor which 或or的人使用 locate,即几乎没有人。@Arcege的答案是正确的。
quodlibetor 2012年

5

要获取安装程序的路径,请使用whereiswhich。如果您碰巧忘记了它的名称,则可以使用apropos实用程序的同义词或描述,例如apropos "version control"will find git。当然,紧随其后的是whatis用于简要概述程序功能的命令。但是,这并不适用于系统上的所有程序和功能。例如尝试whatis "the meaning of life, universe and everything"


2
我以为它会以“ 42”回来!大声笑。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.