如何找出文件属于哪个(未安装)包?

如何找出文件属于哪个(未安装)包?

在 Debian 系统(及其衍生系统)上:

$ dpkg --search /bin/ls
coreutils: /bin/ls

也就是说,该文件/bin/ls属于名为coreutils.

但这仅在安装了该软件包后才有效。如果不是怎么办?

答案1

apt 文件

apt-file提供搜索提供二进制文件的包的功能(例如德班或者乌班图),它不是默认安装的,而是安装在存储库中的。

apt-file search <path-to-file>

您可能需要在搜索之前更新一次...

apt-file update 

例如,让我们搜索未安装的二进制文件mysqldump

$ apt-file search /usr/bin/mysqldump

mysql-client-5.1: /usr/bin/mysqldump
mysql-client-5.1: /usr/bin/mysqldumpslow
mysql-cluster-client-5.1: /usr/bin/mysqldump
mysql-cluster-client-5.1: /usr/bin/mysqldumpslow

还可以列出(未安装的)包的内容:

$ apt-file list mysql-client-5.1

mysql-client-5.1: /usr/bin/innochecksum
mysql-client-5.1: /usr/bin/innotop
mysql-client-5.1: /usr/bin/myisam_ftdump
mysql-client-5.1: /usr/bin/mysql_client_test
...

yum已在很大程度上被dnf基于 Fedora/RedHat 的现代 Linux 发行版所取代;见下文。

yum接受命令whatprovides(或provides)来搜索已安装或未安装的二进制文件:

yum whatprovides <path-to-file>

再次,未安装mysqldump

$ yum whatprovides /usr/bin/mysqldump

mysql-5.1.51-2.fc14.i686 : MySQL client programs and shared libraries
Repo        : fedora
Matched from: 
Filename    : /usr/bin/mysqldump

mysql-5.1.51-1.fc14.i686 : MySQL client programs and shared libraries
Repo        : fedora
Matched from: 
Filename    : /usr/bin/mysqldump

dnf

dnf有一个repoquery子命令,您可以类似地使用它yum whatprovides

dnf repoquery --whatprovides /path/to/file

例如:

$ dnf repoquery --whatprovides '*/mysqldump'
mariadb-3:10.5.22-1.el9_2.alma.1.x86_64
mysql-0:8.0.36-1.el9_3.x86_64

齐普

zyppersearch与选项一起使用时,命令可以检查文件列表-f

zypper se -f /bin/mksh
Loading repository data...
Reading installed packages...

S | Name | Summary           | Type   
--+------+-------------------+--------
  | mksh | MirBSD Korn Shell | package

网络针提供基于网络的解决方案,甚至还有脚本对于命令行。

软件包文件

适用pkgtoolspacman基于系统的系统。提供与上面其他类似的搜索功能:

$ pkgfile -si /usr/bin/mysqldump

Name      : mysql-clients
Version   : 5.1.54-1
Url       : http://www.mysql.com/
License   : GPL
Depends   : libmysqlclient
...

答案2

为此的标准工具是apt 文件。运行apt-file update以下载索引文件。这是输出:

Downloading complete file ftp://ftp.is.co.za/debian/dists/squeeze/Contents-i386.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16.6M  100 16.6M    0     0  33191      0  0:08:47  0:08:47 --:--:-- 38951

之后,运行apt-file search search_term

答案3

如果您无权访问机器或无法使用前面答案中给出的命令,您还可以使用基于网络的 Debian 软件包搜索引擎(第二种形式,“搜索包内容”)。

答案4

apt-file 可以产生许多结果。借助它的 perl 正则表达式,它几乎能够执行该任务...只要验证该文件安装在 $PATH 中的某个位置...

apt-file find --regexp "/$COMMAND$" | grep -E "($(tr : '|' <<< "$PATH"))/$COMMAND$""

相关内容