Answers:
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存储库中软件包的内容。是否安装任何特定的软件包都无关紧要。
sudo apt-file update
),并且仅列出您已配置的Apt存储库中软件包的内容。
dpkg -c
真好!
.deb
单独下载的文件。最初的问题虽然模棱两可。
使用--contents
代替-L
:
dpkg --contents PACKAGENAME
以这种方式使用时,dpkg
充当的前端dpkg-deb
,因此请使用man dpkg-deb
来查看所有选项。
您也可以使用存档浏览器查看软件包内容。
dpkg --contents google-chrome-stable_current_amd64.deb
并且列出了将要安装的所有文件(主要是/opt/google/chrome
),在我键入此文件时,这些文件当前都未安装在我的系统上。(如果需要的话,我正在运行Xubuntu 11.10。)
dpkg --contents
让您查看已卸载的软件包。如果.deb尚未在您的系统上,请执行
apt-get --download-only install pkgname
该软件包将下载到/var/cache/apt/archives
但未安装。
最好的方法是直接浏览软件包存储库:
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
安装)。
我接受了@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/$1/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/$1/filelist \
| sed -n -e '/<pre>/,/<\/pre>/p' \
| sed -e 's/<[^>]\+>//g' -e '/^$/d';
}
解释:
https://packages.ubuntu.com
或https://packages.debian.org
https://packages.ubuntu.com/trusty/all/curl/filelist
<pre>
和</pre>
标签之间的内容);第二个去除任何html标签;第三个删除任何空白行。注意:它不会搜索PPA,备用apt源码库,而仅查询可用于您正在运行的debian / ubuntu发行版的官方软件包。
对于所有仍可能在2017年1月谷歌搜索此问题的人,您可以在Debian 8.5中拥有一些很棒的apt和dpkg最新版本的东西,而无需下载任何内容。
列出Deb文件的内容而不下载:
首先找到deb文件的完整网址:
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 ......................
PS:可以达到相同的结果
root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")
从上述deb软件包中提取文件,无需下载。
例如,我们要阅读yade软件包的手册页,而无需安装此软件包,甚至不下载deb软件包。
deb软件包中的手册页文件名dpkg -c
是./usr/share/man/man1/yade.1.gz
要即时阅读手册页:
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
使用man应用程序正确显示手册页。
PS:以上管道不适用于ar命令。
root@debian:apt --version --> apt 1.4~beta2 (amd64)
root@debian:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
root@debian:man --version --> man 2.7.6.1
root@debian:tar --version --> tar (GNU tar) 1.29
似乎在先安装它或从.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命令将列出所有软件包文件:
dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")
卷曲参数:-s
-无声,-L
-跟随移动的链接。
如果您不知道URL,获取由:apt --print-uris
如
apt --print-uris install avis | grep avis