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

Anw*_*war 4 package-management dpkg

我做了一个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) 基本文件 bash
4 升级,0 新安装,1764 删除,1 未升级。
需要获得 0 B/1,359 kB 的档案。
此操作后,将释放 3,078 MB 磁盘空间。
你即将做一些可能有害的事情。
要继续输入短语“是的,按我说的做!”
 ?] 

有没有办法将包选择状态重置为当前安装状态?

小智 12

试试这个命令来改变包状态 -

echo "<package-name> <status>" | sudo dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

假设您已将包的状态设置zipdeinstall. 要回滚到原始状态,请install运行此命令-

echo "zip install" | sudo dpkg --set-selections 
Run Code Online (Sandbox Code Playgroud)

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

dpkg --get-selections | sed -n 's/\<<current-status>$/<status>/p' | sudo dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

例如,要更改状态为 deinstall 的所有软件包以进行安装,请使用 -

dpkg --get-selections | sed -n 's/\<deinstall$/install/p' | sudo dpkg --set-selections
Run Code Online (Sandbox Code Playgroud)

  • @jarno 在 `grep` 和 `sed` 中的正则表达式末尾添加一个美元符号使其安全,因为它只在行尾匹配。 (2认同)
  • @Fritz 不太安全;还应该检查单词的开头。否则,通过 install$ 您也可以找到 deinstall$。 (2认同)