Dav*_*d Z 601 package-management
足够简单的问题:是否有一些 shell 命令(或 GUI 方法)我可以使用它,给定我系统上文件的路径,告诉我哪个包放在那里?假设文件确实来自一个包,即。
额外的问题:如果我的系统上没有安装一个文件怎么办?例如,是否有一个网站可以让我查找文件并查看提供了哪些软件包(如果有)?
Res*_*ssu 552
您可以使用dpkg命令找出哪个已安装的软件包拥有文件:
来自man dpkg:
-S, --search 文件名-搜索-模式...
从已安装的软件包中搜索文件名。
例子:
$ dpkg -S /bin/ls
coreutils: /bin/ls
Run Code Online (Sandbox Code Playgroud)
您可以使用完整路径或仅使用文件名进行搜索。
如果您希望搜索尚未安装在您的计算机上的文件,您可以使用Ubuntu Packages Search
或apt-file如不同答案中所述。
jbo*_*tie 324
该apt-file命令可以从命令行为您执行此操作。从源代码构建包时,我经常使用它。对于系统上已安装的软件包提供的文件,apt-cache是另一种选择。
要安装apt-file,请执行以下操作:
sudo apt-get install apt-file
Run Code Online (Sandbox Code Playgroud)
然后,您需要更新它的数据库:
sudo apt-file update
Run Code Online (Sandbox Code Playgroud)
最后,搜索文件:
$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h
Run Code Online (Sandbox Code Playgroud)
然而,更友好的方法是使用Ubuntu Packages Search网站。他们可以选择“搜索包的内容”以获取特定文件名。
小智 49
还有 apt-file 用于在未安装的包中查找文件。例如:
apt-file list packagename
Run Code Online (Sandbox Code Playgroud)
mob*_*ley 19
您可以在Ubuntu 软件包网站上搜索各种 Ubuntu 版本中包含的软件包内容。查看标题下的“搜索包的内容”。
例如,以下是在focal (20.04) 中libnss3.so 的搜索结果:
A.B*_*.B. 14
您的意思是,哪个包而不是哪个应用程序。该应用程序是您的包管理器,例如Software Center.
使用dpkg:
dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs
Run Code Online (Sandbox Code Playgroud)
例子
% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
Run Code Online (Sandbox Code Playgroud)
使用apt-file:
apt-file search /usr/lib/tracker/tracker-store
Run Code Online (Sandbox Code Playgroud)
或者也可能:
apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$
Run Code Online (Sandbox Code Playgroud)
例子
% apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
Run Code Online (Sandbox Code Playgroud)
或在线这里,在该部分Search the contents of packages。
例子
这是Alexx Roche 出色回答的延伸。我试图对该答案进行编辑,但它被拒绝了(虽然不是 Alexx)
我试图追踪which系统上安装的内容。经过一些工作,我创造了/usr/local/bin/apt-whatprovides
#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
BINARY="$(realpath $(which $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"
Run Code Online (Sandbox Code Playgroud)
虽然对于大多数已安装的东西,您可以只使用:
apt-file search $(realpath $(which THING)) | grep 'THING$'
Run Code Online (Sandbox Code Playgroud)
对于未安装的事物,您可以使用:
apt-file search THING | grep '/THING$'
Run Code Online (Sandbox Code Playgroud)
该apt-whatprovides脚本适用于系统上和不在系统上的文件。例如,我的系统缺少dig但有ping这样的结果:
pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping
pi@raspberrypi:~ $ apt-whatprovides dig
Searching for dig
dnsutils: /usr/bin/dig
epic4: /usr/share/epic4/script/dig
epic4-help: /usr/share/epic4/help/8_Scripts/dig
knot-dnsutils: /usr/bin/dig
Run Code Online (Sandbox Code Playgroud)
请注意,这Searching for是ping(已安装)的完整路径,而只是dig未安装的二进制名称。这帮助我发现我需要安装dnsutils而不需要去搜索https://packages.ubuntu.com/#search_contents
| 归档时间: |
|
| 查看次数: |
437477 次 |
| 最近记录: |