在安装包之前重置 dselect 选择

在安装包之前重置 dselect 选择

我正在查看软件包列表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]nstallindselect显然是 的前端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

答案3

使用资质搜索能力获取列表。

aptitude -F '%p' search '~ainstall !~i'

将列表传递给 将dpkg --set-selections它们标记为要删除。

aptitude -F '%p deinstall' search '~ainstall !~i' | dpkg --set-selections

旁白:欢迎来到 21 世纪,我建议改用 Aptitude 而不是 Dselect。

相关内容