查找路径内部或外部的命令位置

查找路径内部或外部的命令位置

上下文:我想让应用程序在我登录时自动启动。为此,我需要为该path应用程序选择。

在此处输入图片描述

以下是我已经研究过的路径:

  • /sbin
  • /usr/sbin
  • /usr/local/bin
  • /usr/share/

如果这有帮助的话,我试图找到的应用程序叫做“屏幕云“我从 Ubuntu 软件中心下载了它。

但是我找不到它,有什么方法可以知道某个软件安装在哪里吗?因为即使我找到了这个,我也不想以后再遇到同样的问题。

答案1

查找可执行文件的路径

最好的办法

  • type executable

查看这个问题了解更多关于如何type更好的方法。(谢谢,评论!)

其他方法

  • whereis executable
  • which executable

这些命令仅在 PATH 变量中搜索(echo $PATH),因此在某些情况下它们无效(内置函数、别名或 bash 函数等)。

答案2

查找路径内部或外部的命令位置

假设您要查找列出系统信息的程序的位置uname。如果您想知道顶级命令存储在哪个目录中,您有多种选择:

$ which uname
/bin/uname

$ type -a uname
uname is /bin/uname

$ command -v uname
/bin/uname

$ locate uname
/bin/uname
    (... SNIP dozens of Windows files on C & D ...)
/usr/lib/klibc/bin/uname
/usr/lib/plainbox-provider-resource-generic/bin/uname_resource
/usr/share/man/man1/uname.1.gz
/usr/share/man/man2/oldolduname.2.gz
/usr/share/man/man2/olduname.2.gz
/usr/share/man/man2/uname.2.gz

定位优势

最后一个选项locate返回所有文件,uname不仅包含从命令提示符运行的程序。

优点locate是它会找到命令不在您的搜索路径。type -a(优于简单的type)并且which只会在您的搜索路径中查找命令。要查看您的搜索路径,请使用echo $PATH

以这个答案为例如何启动screencloud?

尝试...

/opt/screencloud/screencloud.sh

locate screencloud命令会找到它但是which screencloud找不到,type -a screencloud因为:

  • 全名是screencloud.sh并且仅locate命令搜索部分匹配。
  • /opt/screencloud可能不在搜索路径中。which并且type只在搜索路径中查找可执行文件。

笔记:这是一个较旧的答案。现代 ScreenCloud 被称为screencloud

与命令相比,Locate 的优势find在于它可以快数百甚至数千倍。此外,find从 开始运行/会出现许多权限错误,而使用 则不会遇到这些错误locate

找出缺点

如果您今天刚刚安装了该程序,您将需要使用它sudo updatedb来更新定位的数据库。

答案3

使用以下命令列出所有$PATH目录:

echo $PATH | sed 's/:/\n/g'

使用以下命令查找的完整路径screencloud

for i in $(echo $PATH | sed 's/:/\n/g'); do find $i/screencloud* 2>@1; done

如果您使用aptapt-get或 Ubuntu 软件中心安装该包,则可以使用以下命令查找完整路径:

dpkg -L screencloud | grep bin

假设你使用这个存储库,您应该能够screencloud 在 中找到/usr/bin/

完整路径为:

/usr/bin/screencloud

或者

/usr/bin/screencloud-*

但是,如果你使用snapcraft 商店根据您提供的链接在您的问题中,那么路径将位于以下目录下:

/snap/bin

更多信息

另外,请记住 Ubuntu 区分大小写,因此您必须使用全部小写字母,不使用大写字母。

相关内容