我正在查看软件包列表dselect
,但Return错误地按了两次,从而使其确认并退出该[S]elect
选项。
当我转到该[I]nstall
选项时,它现在建议安装一些我不想要的新软件包(并且与我最初寻找的软件包无关)。
由于我还没有继续安装本身,有没有办法将选择重置为选择新软件包之前的选择,而无需逐一浏览列表并按-
每个软件包? (无论是通过dselect
还是通过其他相关命令完成都没有关系。)
编辑:(添加示例)
我已经在另一台dselect
安装了的机器上尝试过。我们假设gnugo
未安装该软件包(这只是一个示例)。
- 启动
delect
并选择[S]elect
获取列表。 gnugo
在此列表中搜索(/如果您不熟悉,请使用dselect
)。- 用 来选择它+。
- 按Return验证建议,然后Return再次验证返回主菜单(我犯的错误)。
去
[I]nstall
。现在它会说:Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed gnugo:i386 libgpm2:i386 libncurses5:i386 libreadline6:i386 libtinfo5:i386 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 1,926 kB of archives. After this operation, 9,634 kB of additional disk space will be used. Do you want to continue [Y/n]?
此处选择不继续(
n
)。- 辞职
dselect
。 dpkg --get-selections | grep gnugo
什么也不产生。- 再次启动
dselect
,直接再次进入[I]nstall
,仍然会选择软件包进行安装。
当然,我可以返回列表[S]elect
,搜索gnugo
,按_取消选择它,但在更复杂的情况下,您可能必须一一浏览新的软件包列表。
[I]nstall
indselect
显然是 的前端apt-get install
,但我不确定它从哪里获得选择。看来dpkg --get-selection
不是。就目前而言dselect
,我想将其重置为使用 制作的所有内容***
都保持原样的状态,但现在标记为 only **
(尚未安装)的内容将返回到__
,而无需手动浏览建议列表从[I]nstall
菜单中。
编辑2:
这显然与 的内容相关/var/lib/dpkg/status
,其中包含以下条目:
Package: gnugo
Status: install ok not-installed
Priority: optional
Section: games
如果我手动将其更改为Status: deinstall ok not-installed
,它就会从中的选择中消失dselect
(这是有道理的)。
我想要的是一种将所说的内容变成Status: install ok not-installed
的通用方法Status: deinstall ok not-installed
(让包裹说Status: install ok installed
不受影响)。
答案1
使用--set-selections
* 参数dpkg
:
echo "<package-name> purge" | dpkg --set-selections
然后您可以用来apt-get dselect-upgrade
应用您的包选择。
如果您需要查找已选择安装但尚未安装的软件包(以便您可以反转该选择),请使用以下命令:
dpkg --get-selections | awk '{ if ($2=="install") print $1}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')"
您可以稍微花哨一些,并将其通过管道返回到--set-selections
,从而自动取消选择尚未安装的任何内容:
dpkg --get-selections | awk '{ if ($2=="install") print $1,"deinstall"}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" | dpkg --set-selections
*您还可以用来dpkg --get-selections
列出所有显式选择。这还将向您显示所需的格式--set-selections
。
答案2
事实证明,dpkg --get-selections
它并没有列出标记为安装和尚未安装的内容,而是dpkg -l '*'
列出了这些内容,并以in
.
因此,以下行将重置这些选择:
dpkg -l '*' | grep '^in ' | awk '{ print $2 " deinstall" }' | dpkg --set-selections