例如,如果我运行以下命令,dpkg -l ‘*compiz*’
输出如下:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
pi compiz 1:0.9.12.2+1 all OpenGL window and compositing man
ii compiz-core 1:0.9.12.2+1 amd64 OpenGL window and compositing man
un compiz-core-ab <none> <none> (no description available)
[more output deleted]
输出结果有点晦涩难懂。askubuntu 上有几个详细的解释,其中:例子,就是其中之一。同样,man dpkg
和也man dpkg-query
给出类似的解释。
在上面的示例输出中,第一个字段中的第一个字符“p”表示包裹的期望状态。这是包装系统认为包裹应该处于的状态。
所需状态的根本含义是什么?即为什么打包管理系统知道包应该处于什么状态?我可以看到,如果包仅用作已删除父包的依赖项,智能系统会建议(或希望)清除包。但是,在我们的示例中并非如此。
在我们的示例中,安装了软件包“compiz”,但是dpkg
认为应该清除该软件包,或者至少认为最好清除该软件包,这是为什么呢?此外,这个特定字段通常如何工作?即系统如何确定软件包的“所需状态”以及此功能的根本原因是什么?
答案1
我不知道您是否曾经使用过诸如aptitude
或之类的工具synaptic
,甚至是较低级别的命令,例如:dpkg
等dpkg-purge
。
使用诸如 之类的工具aptitude
,我可以标记许多需要删除的包,一些需要清除的包,一些需要安装、降级等的包,然后我可以运行单个命令来执行所有必要的操作来获得我想要的东西(触发待处理的操作)。
所需字段用于确定我应该对包做什么。
让我们安装axel
:
sudo apt install -y axel
现在让我们看看它的状态:
$ dpkg -l axel
ii axel 2.5-2
我可以将其标记为purge
:
$ echo axel purge | sudo dpkg --set-selections
现在所需的操作是:
$ dpkg -l axel
pi axel 2.5-2
我也可以使用其他工具将包标记为“清除”:
sudo dpkg-purge axel
现在如果我运行:
sudo aptitude install
或者
sudo apt-get dselect-upgrade
它问我是否要删除axel
...
这些数据来自哪里:
/var/lib/dpkg/status