apt-get install 意外删除了 Firefox

Nic*_*end 8 package-management apt

我执行了命令:

$ sudo apt-get install ssh-import-id
Run Code Online (Sandbox Code Playgroud)

输出是(因为评论中的人要求完全提供它):

$ sudo apt-get install ssh-import-id
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gdbserver gstreamer1.0-gtk3 libabw-0.1-1 libatkmm-1.6-1v5 libbabeltrace1 libc6-dbg libcairomm-1.0-1v5 libcdr-0.1-1
  libcolamd2 libdw1 libe-book-0.1-1 libepubgen-0.1-1 libetonyek-0.1-1 libfreehand-0.1-1 libglibmm-2.4-1v5 libgtkmm-2.4-1v5
  libilmbase12 libmspub-0.1-1 libmwaw-0.3-3 libnuma1 libodfgen-0.1-1 libopenexr22 libpangomm-1.4-1v5 libsuitesparseconfig5
  libvisio-0.1-1 libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libxss1 libxvmc1 lp-solve vim-common x11-apps x11-session-utils
  xbitmaps xinit xserver-xorg-video-amdgpu-hwe-18.04 xserver-xorg-video-ati-hwe-18.04 xserver-xorg-video-fbdev-hwe-18.04
  xserver-xorg-video-intel-hwe-18.04 xserver-xorg-video-nouveau-hwe-18.04 xserver-xorg-video-qxl-hwe-18.04
  xserver-xorg-video-radeon-hwe-18.04 xserver-xorg-video-vesa-hwe-18.04 xxd
Use 'sudo apt autoremove' to remove them.
Recommended packages:
  openssh-server
The following packages will be REMOVED:
  brltty firefox gdb google-chrome-stable gparted irqbalance libcc1-0 libglu1-mesa libllvm6.0 libmagickcore-6.q16-3-extra
  libpagemaker-0.0-0 libproxy1-plugin-gsettings libreoffice-avmedia-backend-gstreamer libreoffice-base-core libreoffice-calc
  libreoffice-draw libreoffice-gnome libreoffice-gtk3 libreoffice-help-en-us libreoffice-impress libreoffice-math
  libreoffice-ogltrans libreoffice-writer libxatracker2 lshw printer-driver-brlaser printer-driver-splix thermald
  ubuntu-desktop ubuntu-minimal ubuntu-standard vim-tiny xorg xserver-xorg-video-all-hwe-18.04
  xserver-xorg-video-vmware-hwe-18.04 zeitgeist-core
The following NEW packages will be installed:
  ssh-import-id
0 upgraded, 1 newly installed, 36 to remove and 0 not upgraded.
Need to get 10,4 kB of archives.
After this operation, 595 MB disk space will be freed.
Do you want to continue? [Y/n] Y
Get:1 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 ssh-import-id all 5.7-0ubuntu1 [10,4 kB]
Fetched 10,4 kB in 1s (14,5 kB/s)                      
(Reading database ... 127288 files and directories currently installed.)
Removing brltty (5.5-4ubuntu2.0.1) ...
Removing firefox (68.0.1+build1-0ubuntu0.18.04.1) ...
Removing gdb (8.1-0ubuntu3) ...
Removing google-chrome-stable (76.0.3809.100-1) ...
Removing gparted (0.30.0-3ubuntu1) ...
Removing irqbalance (1.3.0-0.1ubuntu0.18.04.1) ...
Removing libcc1-0:amd64 (8.3.0-6ubuntu1~18.04.1) ...
Removing ubuntu-desktop (1.417.3) ...
Removing xorg (1:7.7+19ubuntu7.1) ...
Removing libglu1-mesa:amd64 (9.0.0-2.1build1) ...
Removing xserver-xorg-video-all-hwe-18.04 (1:7.7+19ubuntu8~18.04.2) ...
Removing xserver-xorg-video-vmware-hwe-18.04 (1:13.3.0-2build1~18.04.1) ...
Removing libxatracker2:amd64 (19.0.2-1ubuntu1.1~18.04.2) ...
Removing libllvm6.0:amd64 (1:6.0-1ubuntu2) ...
Removing libmagickcore-6.q16-3-extra:amd64 (8:6.9.7.4+dfsg-16ubuntu6.7) ...
Removing libreoffice-ogltrans (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-impress (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-draw (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libpagemaker-0.0-0:amd64 (0.0.4-1) ...
Removing libproxy1-plugin-gsettings:amd64 (0.4.15-1) ...
Removing libreoffice-avmedia-backend-gstreamer (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-help-en-us (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-writer (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-calc (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-base-core (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-gnome (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-gtk3 (1:6.0.7-0ubuntu0.18.04.8) ...
Removing libreoffice-math (1:6.0.7-0ubuntu0.18.04.8) ...
Removing ubuntu-standard (1.417.3) ...
Removing lshw (02.18-0.1ubuntu6.18.04.1) ...
Removing printer-driver-brlaser (4-1) ...
Removing printer-driver-splix (2.0.0+svn315-6fakesync1) ...
Removing thermald (1.7.0-5ubuntu2) ...
Removing ubuntu-minimal (1.417.3) ...
Removing vim-tiny (2:8.0.1453-1ubuntu1.1) ...
Removing zeitgeist-core (1.0-0.1ubuntu1) ...
Selecting previously unselected package ssh-import-id.
(Reading database ... 126362 files and directories currently installed.)
Preparing to unpack .../ssh-import-id_5.7-0ubuntu1_all.deb ...
Unpacking ssh-import-id (5.7-0ubuntu1) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Processing triggers for libreoffice-common (1:6.0.7-0ubuntu0.18.04.8) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Processing triggers for cups (2.2.7-1ubuntu2.6) ...
Updating PPD files for cups-filters ...
Updating PPD files for foomatic-db-compressed-ppds ...
Updating PPD files for openprinting-ppds ...
Updating PPD files for c2esp ...
Updating PPD files for foo2zjs-common ...
Updating PPD files for gutenprint ...
Updating PPD files for hpcups ...
Updating PPD files for m2300w ...
Updating PPD files for postscript-hp ...
Updating PPD files for ptouch ...
Updating PPD files for pxljr ...
Updating PPD files for sag-gdi ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for gnome-menus (3.13.3-11ubuntu1.1) ...
Processing triggers for dbus (1.12.2-1ubuntu1.1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Setting up ssh-import-id (5.7-0ubuntu1) ...
Run Code Online (Sandbox Code Playgroud)

之后,尽管我的 Firefox 在上述操作期间正在运行,但它还是被删除了。好吧,我看到一些软件包将被删除,但甚至无法想象 Firefox 也在其中。

所以问题:

  1. 为什么命令namedinstall要删除一些东西?
  2. 为什么apt-get决定不再需要 Firefox?
  3. 如何使用apt-get才不会自动删除我需要但不想删除的应用程序和包?
  4. 我在哪里可以阅读与此问题相关的主题?

UPD

火狐已被删除。它仍在工作,但在我关闭它后,我无法再次启动它,因为它不再存在于我的应用程序中。然后我重新安装了它(通过 Ubuntu 软件应用程序)并需要从头开始调整它,因为我以前的设置没有保留。

正如评论中所问:

$ apt-cache policy firefox
firefox:
  Installed: (none)
  Candidate: 59.0.2+build1-0ubuntu1
  Version table:
     68.0.1+build1-0ubuntu0.18.04.1 -1
        100 /var/lib/dpkg/status
     59.0.2+build1-0ubuntu1 500
        500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)

不好了!似乎 VI 也被删除了:

$ sudo vi /etc/apt/sources.list
sudo: vi: command not found
$ which vi
<nothing>
Run Code Online (Sandbox Code Playgroud)

它在讨论的操作之前起作用。

可能重复

建议的可能重复如何恢复默认存储库?不回答这里提出的问题。但它有助于消除所讨论问题的根本原因。在“更新”选项卡中启用“重要安全更新”和“推荐更新”后,软件包安装问题停止了。

结论

mook765 完全回答了这个问题。

moo*_*765 11

在使用aptor安装软件包之前,apt-get您应该确保软件包缓存是最新的并且系统已升级。

sudo apt update    
sudo apt upgrade
sudo apt install <package-name>
Run Code Online (Sandbox Code Playgroud)

apt管理deb-packages 和包的依赖关系。这意味着如果你安装一个依赖于其他包的包,apt将处理它并安装依赖项。

有些包不能在系统中同时共存(被安装),它们会相互冲突。apt也将处理这种情况,如果您安装package1package1与安装在您系统中的package2冲突,apt将删除package2以便安装package1

如果涉及到依赖项,这将非常复杂,如果要删除已安装包的依赖项,则依赖包也将被删除。由于版本冲突,如果这些系统和包缓存是不是最新的这可以很容易地发生,或者您添加第三方软件库(PPA的)到/etc/sources.list/etc/sources.list.d/

apt 总是会告诉你会发生什么,所以在你的情况下,你只需要仔细阅读:

The following packages will be REMOVED:
  brltty firefox gdb ...
Run Code Online (Sandbox Code Playgroud)

并且您有机会通过键入N并点击来中止操作Enter。所以请花点时间仔细阅读命令输出,如果出现问题,您将失去更多时间进行故障排除。

当我install ssh-import-id在我的系统 (18.04.3) 上安装时,它不会删除软件包:

~$ sudo apt install ssh-import-id
阅读包裹清单...完成
构建依赖树       
读取状态信息...完成
将安装以下附加软件包:
  ncurses-term openssh-server openssh-sftp-server
推荐套餐:
  莫莉卫士monkeysphere rssh ssh-askpass
将安装以下新软件包:
  ncurses-term openssh-server openssh-sftp-server ssh-import-id
0 个升级,4 个新安装,0 个删除,0 个未升级。
需要获取 637 kB 的档案。
此操作后,将使用 5,316 kB 的额外磁盘空间。
你要继续吗?[是/否] 否
中止。

因此,您的系统不是最新的,或者对存储库进行了更改,我们无法从您提供的输出中看到这一点。

这些软件包apt告诉您不再需要它们,您应该使用sudo apt autoremove上一个操作的剩余部分删除它们,您之前从系统中删除了其他软件包,并且遗留了一些软件包。

更新:

由于您最近提供了完整的命令输出,我建议您在执行任何其他操作之前重新安装已删除的 36 个软件包,其中有一些必不可少的软件包,如果您在重新安装之前关闭它们,您可能最终会导致系统损坏.


use*_*733 5

为什么名为 install 的命令要删除某些内容?

冗长的删除看起来像是先前不完整(错误、中止等)包管理器操作的保留。Apt 会记住您告诉它要做的事情,并将在下一次会话期间继续尝试完成它。任何 apt 操作都会触发重试,包括告诉 apt 安装不相关的软件包。

为什么 apt-get 决定不再需要 Firefox?

这取决于之前的 apt 会话,而我们对此一无所知。您可以在 /var/log/apt/history.log 中查看您告诉 apt 执行的操作。您(或无人值守升级)可能尝试运行autoremove。有很多可能性。

如何使用 apt-get 使其不会自动删除我需要但不想删除的应用程序和软件包?

Apt 没有通灵能力,不知道你的意图。它是一种工具,例如锯子或锤子。为包装管理带来智慧是人类的职责。

幸运的是,这并不困难:

  1. 在同意 apt 提议的操作之前阅读您的输出。这就是开发人员将continue?提示放在那里的原因。

  2. 正确使用 apt-marking。Apt 会跟踪您明确告诉它要安装的软件包(“手动”),以及仅作为依赖项拖入的软件包(“自动”)。Apt不会自动删除任何“手动”软件包。您必须明确告诉 apt 删除“手动”包。

Ubuntu 的桌面安装程序使用 apt 标记来防止基本系统的大规模自动删除,方法是在安装过程中将所有基本系统软件包标记为“手动”。

由于 ubuntu-desktop、ubuntu-minimal 和 ubuntu-standard 元包都符合自动删除的条件,因此您可能使用 Netboot 映像(或一些类似的最小映像)来构建系统,从而绕过了额外的保护层。

您可以使用 来查看您的“手动”包apt-mark showmanual。这些是您的顶级包 - 系统中的其他所有内容都取决于这些顶级项目之一。当您删除一个软件包时,所有不再需要的依赖的孤立软件包都将符合自动删除的条件。

这种大规模删除偶尔会发生在不熟练的用户进行最小安装的情况下。好吧,这种情况发生一次,然后用户会对其密钥包进行 apt 标记以防止再次发生。


以下是大规模自动删除如何发生的示例(根据许多 AskUbuntu 的故事,某些人已经发生过这种情况):

  1. 用户使用 Netboot 映像安装系统。
  2. 用户安装ubuntu-desktop元包。这是现在唯一的“手动”包。所有基本系统包和桌面环境堆栈都是这个单独包的“自动”依赖项。
  3. 用户尝试删除他们不使用的桌面应用程序之一(例如 Shotwell)。Apt 拒绝,因为shotwell它是 的依赖项ubuntu-desktop。这会让用户感到困惑,因为他们不了解其中的关系。
  4. 在摆弄来自各个网站的不良建议时,用户删除了shotwellubuntu-desktop。整个桌面堆栈和基本系统仍然存在,但现在已成为孤立的并且可以自动删除。不再有任何“手动”包锚定桌面包。但系统仍然有效。
  5. 有一天,用户了解了“孤儿”,决定尝试这个漂亮的新“自动删除”命令来删除膨胀......并立即将整个系统卸载回最小映像。