我发出了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
假设您已将包的状态设置zip
为deinstall
。要回滚到原始状态,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