如何将套餐选择状态设置为当前状态?

如何将套餐选择状态设置为当前状态?

我发出了dpkg --clear-selections命令,发现我的所有软件包都被选中进行删除。手册页说的是

--clear-selections :设置每个非必要包的请求状态以供卸载。

后来我知道,如果我这样做,sudo apt-get dselect-upgrade所有的包裹都会被删除。

我检查了Ask Ubuntu 中的这个问题,并阅读命令中各个标志的含义dpkg -l。其中说,第一列显示“所需包状态”或选择状态,第二列显示“当前状态”。

因为我现在没有依赖问题,我想设置我的选择状态作为期望状态在 dpkg 数据库中。我该怎么做?

由于输出量很大,我没有给出输出dpkg -l。输出是所有ri列。

当我执行命令时sudo apt-get dselect-upgrade,它给了我这个消息,

......... 需要删除一长串包名...
警告:以下基本软件包将被删除。
除非您清楚自己在做什么,否则不应这样做!
  apt ubuntu-keyring(归功于 apt)libapt-pkg4.12(归功于 apt)libstdc++6(归功于
  到 apt) gnupg (由于 apt) base-files bash
升级了 4 个,新安装了 0 个,删除了 1764 个,还有 1 个没有升级。
需要获取 0 B/1,359 kB 的档案。
此操作后,将释放3,078 MB的磁盘空间。
您即将要做一些可能有害的事情。
要继续,请输入短语“是的,按我说的做!”
 ?]

有什么办法可以将包的选择状态重置为当前安装状态?

答案1

尝试使用此命令来更改包状态 -

echo "<package-name> <status>" | sudo dpkg --set-selections

假设您已将包的状态设置zipdeinstall。要回滚到原始状态,install请运行以下命令:

echo "zip install" | sudo dpkg --set-selections 

要一次更改更多包,请使用此命令

dpkg --get-selections | sed -n 's/\<<current-status>$/<status>/p' | sudo dpkg --set-selections

例如,要将所有状态为卸载的软件包更改为安装,请使用 -

dpkg --get-selections | sed -n 's/\<deinstall$/install/p' | sudo dpkg --set-selections

答案2

好的,我只需要这样做。感谢@sarowar 提供的命令。为所有已安装的软件包编写脚本的步骤:

export IFS='
'
for i in $(dpkg -l |egrep '^[a-z]i.*' |awk '{print $2" install"}') ; do echo $i|dpkg --set-selections  ; done
unset IFS

相关内容