为什么 apt-get install python3 带有尾随连字符删除了很多包?

Met*_*4_1 7 command-line apt

在使用sudo apt-get install命令安装某些东西时,我不小心接受了命令

sudo apt-get install python3-
Run Code Online (Sandbox Code Playgroud)

(是的,我知道接受这一点很愚蠢,但我做了很多,我只是继续点击y)。

通过执行命令,我删除了整个 Ubuntu 可视化桌面(我只有普通的 shell,但我现在恢复了可视化桌面)。我不知道我是否只是愚蠢,但我想提醒您不要使用该命令。

如果您能向我解释为什么会发生所发生的事情,请随时向我解释。

hee*_*ayl 22

这不是错误;这在man页面中记录。Fromman apt-getinstall1节(强调我的):

如果将连字符附加到包名称(中间没有空格),则如果安装了已识别的包,则将删除该包。同样,加号可用于指定要安装的软件包。

所以,当你这样做时:

sudo apt-get install python3-
Run Code Online (Sandbox Code Playgroud)

你已经删除了这个python3包和所有的依赖包(包括你提到的包)。


使固定:

首先,您可以安装ubuntu-desktop元包以恢复默认桌面环境:

sudo apt-get install ubuntu-desktop
Run Code Online (Sandbox Code Playgroud)

现在,要重新安装已删除的软件包,请转到/var/log/apt/history.log,选择软件包并运行sudo apt-get install它们。

您可能还想查看/var/log/dpkg.log.


1如果你lessman寻呼机,你可以去install的部分man apt-get直接:

LESS='+/^[[:blank:]]+install' man apt-get
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,`sudo apt-get install ubuntu-desktop` 将通过一个命令恢复大部分桌面环境,而无需查找单个包名称。(当然,这不包括在默认设置之上手动安装的任何内容,但可以在比 Linux 控制台更熟悉的环境中进行进一步恢复)。 (6认同)

vid*_*rlo 11

不,你没有发现错误。来自man apt-get

如果将连字符附加到包名称(中间没有空格),则如果安装了已识别的包,则将删除该包。同样,加号可用于指定要安装的软件包。后面的这些功能可用于覆盖 apt-get 的冲突解决系统做出的决定。

这是故意的。我不确定这是一个好的设计,但在继续之前值得阅读 apt 提出的更改。

结合通配符,它有时可能会产生一些相当……壮观的结果。