如何获取软件包中已安装文件的列表?

我想知道在Ubuntu上使用软件包管理器安装应用程序后,我可以在哪里找到它。
我安装了RabbitMQ并运行了locate rabbitmq命令,得到以下结果:
/home/anupamg/.m2/repository/com/rabbitmq
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/_maven.repositories
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/amqp-client-1.7.2.jar
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/amqp-client-1.7.2.jar.lastUpdated
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/amqp-client-1.7.2.jar.sha1
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/amqp-client-1.7.2.pom
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/amqp-client-1.7.2.pom.lastUpdated
/home/anupamg/.m2/repository/com/rabbitmq/amqp-client/1.7.2/amqp-client-1.7.2.pom.sha1
/home/anupamg/Downloads/rabbitmq-server-generic-unix-2.4.0.tar.gz

什么应用程序?有些可以通过命令行访问,而其他一些则在应用程序菜单中拥有漂亮的图标。请更具体一点。 - Ragnar123
你想知道可执行文件和配置文件存放在哪里,还是想要运行它却不知道如何操作? - das_weezul
好的!我实际上想知道,在Windows中,如果我安装了一个应用程序,我可以在程序文件中看到它,类似地,在Ubuntu中,我应该去哪里找到已安装的应用程序...我刚刚安装了RabbitMq,并想知道它所在的位置,我需要配置它的run.sh文件。 - Anupam Gupta
@das_weezul:是的,我想知道当我在Synaptic软件包管理器中点击安装时,对我的系统做了哪些操作...我是Ubuntu的新手...所以欢迎任何链接。 - Anupam Gupta
1其中一个答案建议使用以下命令:dpkg-query -c <package_name.deb>。但是,你不能对deb文件执行这个操作。我猜测回答者的意思是要使用相同的参数dpkg-deb -c <filename.deb>来使用dpkg-deb命令,这样可以按预期列出文件。 - gazhay
Linux的软件包通常会将文件安装到各个地方,不像Windows大部分都在Program Files和一些在Users目录下。这就是为什么使用软件包管理器非常重要,它可以跟踪所有这些文件。如果你只想找到可执行文件,可以使用which rabbitmq命令。 - Rolf
相关:列出Debian软件包的命令 - Pablo Bianchi
6个回答

要查看软件包安装到您的系统上的所有文件,请按照以下步骤操作:
dpkg-query -L <package_name>

查看一个.deb文件将要安装的文件。
dpkg-deb -c <package_name.deb>

要查看未安装的软件包中包含的文件,请执行以下操作(如果您尚未安装apt-file):
sudo apt-get install apt-file
sudo apt-file update

那么

apt-file list <package_name>

查看更多关于这个问题的信息,请点击此链接

3正如上面gazhay所评论的那样,dpkg-query -c foo.deb失败了。但是dpkg-deb -c foo.deb却成功了。 - Camille Goudeseune
10更新apt-file真是一件痛苦的事情。 - sjsam
2请注意,dpkg -L 命令不会考虑使用 --path-exclude= 排除的文件。即使这些文件未被安装,它们也会被列出来。 - Steve

@drysdam dpkg -L <package_name> 可能是解决您当前问题的最佳方法,但您可能想阅读文件系统层次标准,该标准描述了不同类型文件在文件系统中的位置。

这并非绝对准确;它只是描述了事物的“大部分”情况。

对于Ubuntu来说更具体的是Ubuntu服务器指南,它会详细描述一切。(其他指南通常忽略太多细节,但这个应该更好。)


如果你只想要一个单独安装的软件包,你可以找到软件包的名称。
$ apt-cache search rabbitmq
...
librabbitmq-dev
...

然后使用 dpkg --listfiles
$ dpkg --listfiles librabbitmq-dev
/usr/lib/x86-64/librabbit... 
. . . 

可能会因版本而异,但我必须使用dpkg -L <package> - JimB
2dpkg -L 仅适用于已安装的软件包。 - kenorb

@Gilles给出的答案非常有用(实际上,这个答案随着时间的推移得到了改进)。

此外,我还有一个提示,适用于那些不想安装任何辅助软件包(如apt-file)的人:

  • 访问http://packages.ubuntu.com/
  • 进入搜索软件包目录部分;
  • 关键字字段中输入您的软件包名称,并选择仅显示完全匹配项
  • 选择您的发行版,然后点击搜索按钮;
  • 在下一个页面中选择所需的软件包;
  • 在页面底部,点击与您的架构名称相邻的文件列表链接;
  • 下一页将显示您的软件包的文件列表。

http://packages.ubuntu.com/trusty/amd64/multipath-tools/filelist为例。


5curl -s https://packages.ubuntu.com/$(lsb_release -cs)/$(dpkg --print-architecture)/<<PACKAGE NAME>>/filelist | sed '1,/pfilelist/d;/<\/div>/,$d' :-) 请注意,这是一个命令行指令,用于从 Ubuntu 软件包网站获取特定软件包的文件列表。您需要将 <<PACKAGE NAME>> 替换为您要查询的软件包名称。执行此命令将返回所需软件包的文件列表。请确保在运行此命令之前已安装了 curlsed 工具。 - Nicolas Melay
哈!谢谢你的提示。我在一个“元包”上使用了dpkg -L命令,惊讶地发现里面只有很少的文件(而且不明白为什么我有成千上万个文件明明是属于那个包的)。当我去Ubuntu软件包目录时,我立刻意识到除了元包中的文件外还有更多的文件存在。 - Gwyneth Llewelyn

以下是一种处理尚未安装的软件包的方法。只需将下面的"autoconf"替换为您想获取文件列表的软件包名称即可:
mkdir tmp
cd tmp
apt-get download autoconf
ar x *.deb
tar tf data.*
cd ..
rm -r tmp

由于https://unix.stackexchange.com/questions/669004/zst-compression-not-supported-by-apt-dpkg,像这样使用tar命令可以方便地探索尚未安装的软件包。 - John Vandenberg

使用synaptic-package-manager

enter image description here

假设我们想要找到autotools-dev软件包的文件,在“快速筛选”中输入autotools-dev以定位它。autotools-dev软件包会自动显示出来。点击选择它,然后按下“属性”。在弹出的对话框中,选择“已安装文件”选项卡。