按 CTRL+Z 后如何恢复“apt-get remove”操作

Sor*_*tas 4 apt process

我错误地运行apt-get remove WRONG_PACKAGE,在意识到这一点后,我按CTRL+Z来中断该过程,因为删除该软件包开始删除大约 100 多个其他软件包。

现在,当我尝试运行apt-get install REMOVED_ONES它时:

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
Run Code Online (Sandbox Code Playgroud)

有什么办法可以恢复吗?

Lui*_*ado 11

实际上...

CTRL+Z暂停进程。

CTRL+c终止进程。

请注意,暂停进程会将其发送到后台,直到您再次调用它。由于它已暂停,您可以运行另一个程序。它会“看起来”好像已经消失但不是。它实际上会在进入后台之前告诉您已分配给它的进程 ID。

要知道哪些进程在后台运行,我们使用该jobs命令,该命令将在打开的终端上显示所有后台运行进程及其各自的后台编号。

要再次调用该过程(实际上是在离开它的地方继续该过程),请键入fg.

fg表示前景。如果您想了解背景,则将其从背景中带到前景。如果您碰巧有其他挂起的进程,您可以通过执行fg 1进程 1、fg 2进程 2 等来找到它们。

知道如果您使用CTRL+Z将进程发送到后台,您会将进程发送到后台,但它会被停止。要使其再次运行,只需运行bg后跟该进程的后台 ID 作业,就像bg 2后台作业 2一样。

应用于apt-get(或 aptitude 或任何其他包管理器)时的区别在于,在执行删除/升级/安装时不会删除锁定文件,或者 repo 文件可能会损坏。

您需要从字面上删除文件rm

在删除任何内容之前,请尝试包管理器的建议,在这种情况下:

sudo dpkg --configure -a或者sudo dpkg-reconfigure -a如果您进行了升级。在大多数情况下(对我来说在所有情况下)我必须首先删除锁定文件,如下所示:

sudo rm -fr /var/cache/apt/archives/lock
sudo rm -fr /var/lib/dpkg/lock

如果您想删除该进程(如果它仍然处于活动状态),您可以通过使用ps -e和查找 PIDkill -9 PID编号来查找它,然后使用其中 PID 是您找到或发出的编号sudo killall NAME_OF_PROCESS

或者你也可以这样做:

sudo fuser -cuk /var/lib/dpkg/lock
sudo fuser -cuk /var/cache/apt/archives/lock
sudo rm -fr /var/cache/apt/archives/lock
sudo rm -fr /var/lib/dpkg/lock

在所有这些之后,您可以使用我在开头提到的应用程序推荐的命令,也可以尝试重新安装您错误删除的软件包。我还建议做一个sudo apt-get updatejust 以确保一切正确。

请注意,如果该软件包删除了所有其他软件包,请先尝试安装该软件包。例如,如果你这样做:

sudo apt-get remove unity 错误地,然后首先尝试执行我提到的步骤,然后再次安装该精确包:

sudo apt-get install unity.

如果碰巧没有卸载,请执行以下操作:

sudo -apt-get install --reinstall unity

  • 很好的答案。你提到了杀死 apt-get,这让我想起了我的一个朋友,他在 apt-get 进行 dist-upgrade 时断开了计算机的电源 :) 沉重的东西。 (2认同)