使用--contents
代替-L
:
dpkg --contents PACKAGENAME
当以这种方式使用时,dpkg
作为dpkg-deb
的前端,所以使用man dpkg-deb
来查看所有选项。
我把@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标签;第三个删除任何空白行。对于那些在2017年1月可能还在搜索这个问题的人来说,你可以在Debian 8.5中使用最新版本的apt和dpkg,而不需要下载任何东西,就可以得到一些很酷的东西。
然后显示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:同样的结果也可以用
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包中提取一个文件,不下载。 * 例如,我们想在不安装这个包,甚至不下载deb包的情况下读取yade包的man page。
好像是先安装或者从.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
文件的URL,下面的shell命令会列出所有的包文件:
dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")
Curl params:curl
–沉默,dpkg --contents FILE
–跟随移动链接。