![查找路径内部或外部的命令位置](https://linux22.com/image/1166031/%E6%9F%A5%E6%89%BE%E8%B7%AF%E5%BE%84%E5%86%85%E9%83%A8%E6%88%96%E5%A4%96%E9%83%A8%E7%9A%84%E5%91%BD%E4%BB%A4%E4%BD%8D%E7%BD%AE.png)
上下文:我想让应用程序在我登录时自动启动。为此,我需要为该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
如果您使用apt
、apt-get
或 Ubuntu 软件中心安装该包,则可以使用以下命令查找完整路径:
dpkg -L screencloud | grep bin
假设你使用这个存储库,您应该能够screencloud
在 中找到/usr/bin/
。
完整路径为:
/usr/bin/screencloud
或者
/usr/bin/screencloud-*
但是,如果你使用snapcraft 商店根据您提供的链接在您的问题中,那么路径将位于以下目录下:
/snap/bin
另外,请记住 Ubuntu 区分大小写,因此您必须使用全部小写字母,不使用大写字母。