sudo dpkg --install some_stuff_all.deb
安装文件中的软件包some_stuff_all.deb
。
sudo dpkg --remove some_stuff_all.deb
显示消息:
dpkg: error: you must specify packages by their own names, not by quoting the names of the files they come in
...
Type dpkg-deb --help for help about manipulating *.deb files;
然后列出各个文件:
dpkg-deb --contents some_stuff_all.deb
如何列出.deb
文件中的包?
答案1
要获取有关包文件的信息:
dpkg -I some_stuff_all.deb
这为您提供有关该文件的所有可用信息,包括包:、版本:、依赖项:、说明:等。
请参阅dpkg --help
参考资料 选项摘要和man dpkg
详细信息。请注意,这-I
实际上是一个dpkg-deb
选项,但当您为其提供选项时,它会为您dpkg
运行。见且也。dpkg-deb
dpkg-deb
dpkg-deb --help
man dpkg-deb
答案2
一个文件中只有一个包.deb
。
如果命名了包文件example_1.234.deb
,则该包也被命名example
。(至少通常是这样。理论上有人可以重命名该文件。)
如果你想使用 dpkg 删除一个包,你必须使用
dpkg --remove example
并不是dpkg --remove example_1.234.deb
因为您要删除已安装的软件包,而不是软件包文件。
答案3
假设您的包被命名为,您可以使用以下选项foo.deb
提取包的实际名称(以及 输出中列出的所有其他字段dpkg-deb -I foo.deb
):dpkg-deb
-f
dpkg-deb -f foo.deb Package
-f foo.deb Package
Package
:从包中提取字段foo.deb
;
user@user-X550CL ~/tmp % ls -l
totale 46316
-rw-rw-r-- 1 user user 47425034 ott 5 05:55 foo.deb
user@user-X550CL ~/tmp % dpkg-deb -f foo.deb Package
google-chrome-stable
dpkg-deb -f foo.deb Package
扩展此功能,您可以使用在命令内运行的命令替换直接删除有问题的包dpkg -r
:
sudo dpkg -r $(dpkg-deb -f foo.deb Package)
答案4
如果您不在基于 Debian 的系统上并且无法访问这些dpkg
工具,您仍然可以提取信息,因为deb
文件使用开放格式。它们本质上是ar
包含几个压缩tar
档案的档案,其中一个包含control.tar
一个文件,其中包含control
有关包的所有元数据(dpkg -I
返回的内容(本身调用dpkg-deb -I
以获取信息))。
当前可以control.tar
使用gzip
或进行压缩xz
。
libarchivebsdtar
支持所有这些存档格式(ar
、tar.gz
、tar.xz
),因此您可以执行以下操作:
bsdtar xOf file.deb 'control.tar*' |
bsdtar xOf - ./control |
grep -Pom1 '^Package: \K.*'
第一个在标准输出上bsdtar
提取control.tar
文件以提供给第二个bsdtar
提取./control
成员。grep
(这里假设 GNU grep
)提取包名称。