如何找到在Ubuntu,Debian或Linux Mint上提供文件(无论是否安装)的软件包

在Ubuntu,Debian或Linux Mint中,有几种方法可以确定特定文件属于哪个软件包。本文介绍了两种方法,都是通过命令行。
来自同一系列:

  • 如何防止软件包在Ubuntu,Debian或Linux Mint上更新 [APT]
  • 如何在Debian,Ubuntu或Linux Mint中从命令行搜索可用软件包 [APT]
  • 如何列出Ubuntu,Debian或Linux Mint存储库中的所有软件包 [APT]

1.使用apt-file查找提供该文件的软件包(用于已安装或未安装的存储库软件包)

apt-file索引存储库中所有可用软件包的内容,并可以在所有这些软件包中搜索文件。
也就是说,使用apt-file来安装系统上已安装的DEB软件包,并从Debian(以及基于Ubuntu和Debian的Linux发行版)计算机上未安装的存储库中安装DEB软件包。例如,这在查找包含编译程序所需文件的程序包时很有用。
如果您不使用存储库下载并安装DEB软件包,则apt-file找不到提供该文件的软件包。要查找软件包,该软件包必须在apt-file存储库中可用。
apt-file可能未安装在您的系统上。要在Debian,Ubuntu,Linux Mint和其他基于Debian或基于Ubuntu的Linux发行版上安装,请使用以下命令:

sudo apt install apt-file

该工具使用数据库查找属于包的文件。要使用数据库,您需要对其进行更新。要更新apt-file数据库,请使用:

sudo apt-file update

现在,您可以使用apt-file查找提供该文件的DEB包。从存储库安装的软件包,或在存储库中可用但未安装在Debian / Ubuntu / Linux Mint系统上的软件包。为此,请执行以下操作:

apt-file search filename

交换 filename 要搜索的文件名。
此命令列出所有出现的事件 filename 包含在各种包装中。如果您知道确切的文件路径和文件名,则可以获取仅列出包含确切文件的软件包的搜索结果,如下所示:

apt-file search /path/to/filename

例如,仅运行 apt-file search cairo.h 列出大列表搜索结果。

$ apt-file search cairo.h
fltk1.3-doc: /usr/share/doc/fltk1.3-doc/HTML/group__group__cairo.html
ggobi: /usr/include/ggobi/ggobi-renderer-cairo.h
glabels-dev: /usr/include/libglbarcode-3.0/libglbarcode/lgl-barcode-render-to-cairo.h
glabels-dev: /usr/share/gtk-doc/html/libglbarcode-3.0/libglbarcode-3.0-lgl-barcode-render-to-cairo.html
gstreamer1.0-plugins-good-doc: /usr/share/gtk-doc/html/gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-plugin-cairo.html
guile-cairo-dev: /usr/include/guile-cairo/guile-cairo.h
guitarix-doc: /usr/share/doc/guitarix-doc/namespacegx__cairo.html
ipe: /usr/share/ipe/7.2.7/doc/group__cairo.html
libcairo-ocaml-dev: /usr/share/doc/libcairo-ocaml-dev/html/Pango_cairo.html
libcairo-ocaml-dev: /usr/share/doc/libcairo-ocaml-dev/html/type_Pango_cairo.html
libcairo2-dev: /usr/include/cairo/cairo.h
...

但是,例如,如果您知道文件路径,则想知道文件位于哪个包中。 /usr/include/cairo/cairo.h 属于并执行:

apt-file search /usr/include/cairo/cairo.h

这只会列出包含此文件的软件包。

$ apt-file search /usr/include/cairo/cairo.h
libcairo2-dev: /usr/include/cairo/cairo.h

在此示例中,包含搜索文件的软件包(/usr/include/cairo/cairo.h)是 libcairo2-dev
您还可以使用apt-file列出软件包中包含的所有文件(apt-file list packagename),正则表达式搜索等。参见其手册页(man apt-file)以及更多信息帮助(apt-file --help)。

2.使用dpkg查找提供文件的软件包(仅从任何来源安装的DEB软件包)

dpkg也可用于确定文件属于哪个软件包。它可以比apt-file更快地使用,因为它不需要安装任何东西,也没有数据库可以更新。
但是,dpkg只能搜索属于已安装软件包的文件,因此请使用apt-file搜索系统中未安装的软件包中的文件。另一方面,Dpkg可用于查找属于已安装软件包的文件,而无需使用存储库。此功能在apt-file中不可用。
要使用dpkg查找提供该文件的已安装DEB软件包, -S (或者 --search)标志后跟一个文件名(或模式),用于标识它属于哪个包:

dpkg -S filename

例如,在哪个包中 cairo.h 文件属于,使用 dpkg -S cairo.h

$ dpkg -S cairo.h
libgtk2.0-dev:amd64: /usr/include/gtk-2.0/gdk/gdkcairo.h
libcairo2-dev:amd64: /usr/include/cairo/cairo.h
libpango1.0-dev: /usr/include/pango-1.0/pango/pangocairo.h
libgtk-3-dev:amd64: /usr/include/gtk-3.0/gdk/gdkcairo.h

与apt-file一样,您可能会看到多个包含文件名的软件包。您可以输入文件的完整路径,以仅获取包含该特定文件的软件包。范例:

$ dpkg -S /usr/include/cairo/cairo.h
libcairo2-dev:amd64: /usr/include/cairo/cairo.h

在此示例中,Debian软件包(/usr/include/cairo/cairo.h)是 libcairo2-dev查找文件所属软件包的另一种值得注意的方法是使用Ubuntu和Debian提供的在线搜索:

在这两种情况下,您还可以选择搜索包含与输入关键字名称完全相同的文件,名称以关键字结尾或名称中包含关键字的文件的软件包。
Linux Mint 套餐搜索 网站上没有选项可搜索软件包中的文件,但是您可以使用Ubuntu或Debian在线软件包搜索Linux Mint从Debian / Ubuntu导入的软件包。

Sidebar