此命令只能列出已安装软件包的内容,

dpkg -L PACKAGENAME


,但是如何列出未安装软件包的内容,以预览/检查软件包?

评论

在Ubuntu上类似:askubuntu.com/questions/32507/…

#1 楼

dpkg -c(或--contents)列出了.deb软件包文件的内容(这是dpkg-deb的前端。)

dpkg -c package_file.deb


直接使用软件包名称而不是名称打包文件,可以使用apt-file。 (您可能需要先安装apt-file软件包。)

sudo apt-file update        
apt-file list package_name


如第一条评论所述,apt-file列出了已配置的Apt存储库中软件包的内容。 。是否安装任何特定软件包都无关紧要。

评论


apt-file也需要更新(sudo apt-file更新),并且仅列出您已配置的Apt存储库中软件包的内容。

–嘎嘎吉qua德
2010-1-28在22:54

@quackquixote:在Ubuntu 12.04中是自动的

–confiq
2012年5月13日上午10:43

Apt文件答案假定您的软件包来自配置的存储库,而不是单独下载的.deb文件。最初的问题是模棱两可的。

– Zoredache
2013年1月15日23:27

@confiq,不是经过我的测试。我正在运行12.04.4,它仍然显示“ E:缓存为空。您需要先运行'apt-file update'。”

–马修·弗拉申(Matthew Flaschen)
14年6月28日在20:48

apt-file列表对我不起作用。

–icando
2014年10月10日18:24

#2 楼

使用--contents代替-L

dpkg --contents PACKAGENAME


以这种方式使用时,dpkg充当dpkg-deb的前端,因此请使用man dpkg-deb查看所有选项。 />
还可以使用存档浏览器查看包内容。

评论


除非我先安装然后再将其卸载,否则这将无法工作。

–谢耶利
09年12月15日在14:07

如果给它一个.deb文件作为参数,它应该可以正常工作(而不是PACKAGENAME,给它PACKAGE-DEB-FILE)。

–嘎嘎吉qua德
09年12月15日在22:11

这个答案是错误的。您必须先安装该软件包。如果没有安装,则没有.deb文件。

–尼尔
2012年5月1日,凌晨2:14

此命令对我有用。例如,我从Google下载了google-chrome-stable_current_amd64.deb。然后发出命令:dpkg --contents google-chrome-stable_current_amd64.deb,它列出了将要安装的所有文件(主要是/ opt / google / chrome),当我键入此文件时,这些文件当前都未安装在我的系统上。 (如果重要的话,我正在运行Xubuntu 11.10。)

– quux00
2012年8月4日在21:11



@Neil,答案是正确的。仅仅因为您有一个deb文件,并不意味着它已安装。 apt-file需要整个build-essential软件包。 。

– d -_- b
2012年10月15日10:00

#3 楼

dpkg --contents将让您查看已卸载的软件包。如果.deb尚未在您的系统上,请执行

apt-get --download-only install pkgname


该软件包将下载到/var/cache/apt/archives,但尚未安装。

评论


我可以只列出内容而不下载吗?如果我的连接速度很慢,并且软件包太大而无法下载。如果.deb文件具有目录列表所在的文件头,我想可能不需要下载整个程序包。这可能吗?

–谢耶利
09年12月15日在14:06

如果已安装有冲突的软件包,则--download-only不能很好地工作。当提供--download-only时,它将要删除有冲突的软件包。

–坦率
20/11/15在8:25

#4 楼

最好的方法是直接浏览软件包存储库:

http://packages.debian.org/[distro name]/all/[package name]/filelist

示例:

http://packages.debian.org/wheezy/all/transmission-common/filelist

评论


为了避免离开终端机,您可以使用lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^ /(前提是您已经安装了lynx)。

–俄罗斯
18年8月17日在11:40



#5 楼

我接受了@baldoz的http想法,并将其推广到Ubuntu和Debian,并添加了一点sed并将其包装在bash函数一线式中:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu https://packages.ubuntu.com ' -e 's Debian https://packages.debian.org ')/$(lsb_release -sc)/all//filelist | sed -n -e '/<pre>/,/<\/pre>/p' | sed -e 's/<[^>]\+>//g' -e '/^$/d'; }


用法:

$ deb_list curl
/usr/bin/curl
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/copyright
/usr/share/doc/curl/NEWS.Debian.gz
/usr/share/man/man1/curl.1.gz


多行具有相同的功能:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu https://packages.ubuntu.com ' \
                      -e 's Debian https://packages.debian.org '
              )/$(lsb_release -sc)/all//filelist \
      | sed -n -e '/<pre>/,/<\/pre>/p' \
      | sed -e 's/<[^>]\+>//g' -e '/^$/d';
}


解释:


lsb_release -si返回“ Ubuntu”或“ Debian”,并将其替换为基本URL https://packages.ubuntu.comhttps://packages.debian.org

lsb_Release -sc返回代号(例如“ trusty”,“ sid”等)使用来构建完整的URL:https://packages.ubuntu.com/trusty/all/curl/filelist

使用curl获取该URL,并通过三个sed命令将html传递给管道。首先只捕获文件列表(在<pre></pre>标记之间)。第二个去除任何html标签;第三个删除所有空行。

注意:它不搜索PPA,备用apt源码仓库,仅查询可用于运行debian / ubuntu发行版的官方软件包。

评论


我需要运行红宝石吗?

–安瓦尔
15年7月1日在7:03

@Anwar,我最初使用Ruby是因为我很懒,并且多行正则表达式会吸收sed / awk / grep。但是我将其重写为使用两个sed命令,不需要Ruby。

–通知者
2015年7月1日于16:01

真好!这是我一直在寻找的答案

–安瓦尔
15年7月1日在16:37

#6 楼

对于所有仍可能在2017年1月谷歌搜索该问题的人来说,您可以在Debian 8.5中拥有一些最新版本的apt和dpkg的好东西,而无需下载任何内容。

列出不下载的Deb文件内容:

首先找到deb文件的完整URL:

root@debian:apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4


PS:--print-uris开关打印deb软件包的URL,但是deb未下载。

然后显示deb软件包的内容而不下载它: >
root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb -c /dev/stdin
drwxr-xr-x root/root         0 2016-12-10 22:18 ./
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/bin/
-rwxr-xr-x root/root     13184 2016-12-10 22:18 ./usr/bin/yade
.........................more files listed bellow ......................


从上面的deb软件包中提取文件,而无需下载。
例如,我们要阅读yade软件包的手册页而不安装此软件包,甚至不下载deb软件包。

根据dpkg -c的建议,deb软件包中的手册页文件名为./usr/share/man/man1/yade.1.gz

要即时读取手册页:

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")


使用man应用程序可以正确显示手册页。

PS:以上管道无法使用ar命令。

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb --fsys-tarfile /dev/stdin |tar -xO ./usr/share/man/man1/yade.1.gz |man /dev/stdin


评论


此说明适用于仅使用“ apt”且没有较旧的“ apt-x”命令的系统!

–琼·瓦特(Jon Watte)
19年8月9日在20:11

#7 楼

试试:

apt-get download packages-name
dpkg --contents *.deb


#8 楼

在第一次安装它或从.deb文件提取列表之前,似乎不可能。

尝试以下命令:

dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']\+"))


用包名更改language-pack-en

它基本上读取.deb文件通过curl提取并在其上运行dpkg --contents FILE


您也可以在不下载软件包文件的情况下检查内容。

因此,如果您知道.deb文件的URL ,则以下shell命令将列出所有软件包文件:如果您不知道URL,请通过以下方式获取:-s,例如

dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")