为什么移除gnome-core并不会移除所有它的依赖项?

我在Ubuntu上安装了gnome-core软件包(用于Beagle Bone的最小版本),它的大小接近600MB。然而,当我尝试卸载它时,使用的命令是
sudo apt-get autoremove gnome-core 

只删除了49 MB。有什么办法可以删除整个600 MB吗?
3个回答

gnome-core 是一个元包,而元包的情况是 --

它们会拉取其他软件包进行安装,但是卸载它们并不会移除所有被拉取的软件包

所以,除非你已经复制了由 gnome-core 安装的软件包的名称,否则几乎不可能完全移除这 600 MB 的软件。

但是,你可以通过以下命令获取被拉取的软件包的名称

apt-cache depends gnome-core 

并尝试逐个移除软件包。您应该始终检查是否移除了任何必要的软件包。

或者,您可以通过以下方式获得更有用的软件包列表:

apt-cache depends gnome-core | cut -f 2 -d ':'  | tr '\n' ' '

这将列出gnome-core软件包的所有依赖项,只忽略<>标记中的软件包名称。
如何知道是否正在删除任何系统软件包?
当您看到从命令中释放了大量空间(超过600MB)时,您应该知道您正在删除比您安装的更多内容。在删除之前,apt-get会告诉您将要释放多少空间,类似于以下消息。
After this operation, 384 kB disk space will be freed.

当你尝试移除必要的系统包时,apt-get会显示警告信息。

建议:我建议你从第一个命令中获取一个包列表,并尝试逐个删除它们。这样更安全。如果你看到警告,请跳过删除该包。我知道,gnome-core中的大多数包与图形界面相关,我猜移除这些包不会损坏你的系统(如果你不想要图形界面的话)

希望对你有帮助!


关于移除软件包的一些注意事项

当您移除主要软件包时,如何卸载所拉取的软件包?

当您安装一个软件包,而该软件包依赖于其他一些软件包时,这些依赖软件包也会被安装并标记为“自动”。这意味着,Apt系统将它们标记为“作为另一个软件包的依赖项而自动安装”。这有助于Apt系统识别不必要的软件包。

在您卸载主要软件包时,被拉取的软件包也会被标记为过时或不必要的软件包。您可以通过向apt-get提供autoremove选项来删除它们。(aptitude会随主要软件包自动删除它们)

这个规则的一个例外是,如果您后来安装了另一个依赖于这些被拉取软件包的软件包,当您移除第一个主要软件包时,被拉取的软件包不会被标记为过时。

例子:你安装了一个依赖于包Y的包X。当你安装X时,Y也会被安装并标记为自动安装。如果你不安装另一个依赖于Y的包Z,移除X将使Y变得无用,Apt系统会将其标记为过时,并可以使用autoremove选项将其移除。
但是,如果你在安装X之后安装了一个依赖于Y的包Z,那么仅移除X不会将Y标记为过时包,你无法使用autoremove选项将其移除。
但请注意,如果您在安装了包X之后删除包Y,那么它将同时删除包Y和包X,因为包X不能没有包Y存在,而您希望删除包Y,这意味着您也希望删除包X。与标记为过时以便稍后通过autoremove选项进行删除不同,Apt在删除包Y时会自动删除包X。
尝试以下示例:ubuntu-desktop包是一个元包,用于安装标准的Ubuntu桌面环境。尝试删除它,只有该包将被删除。
还可以尝试安装lubuntu-desktop包(您可能不想安装它,因为它是一个大型下载)。但是,当您尝试删除它时,只有小型的lubuntu-desktop包将被删除。
Apt以不同的方式处理元包。
元包(gnome-core, ubuntu-restricted-extras)也被称为虚拟包。它们之所以被称为虚拟包,是因为它们基本上是空包,依赖于其他包来实现功能。例如,在12.04版本中,ubuntu-restricted-extras依赖于以下包:
ubuntu-restricted-addons
ttf-mscorefonts-installer
unrar
gstreamer0.10-plugins-bad-multiverse
libavcodec-extra-53

在这里,ubuntu-restricted-addons本身是另一个元包。由于元包仅用于拉取软件包,因此安装它们不会将被拉取的软件包标记为自动安装,而是标记为手动安装。结果呢?仅删除主元包不会将被拉取的软件包标记为过时,也无法使用autoremove选项将其删除。这就是为什么您需要手动删除每个元包的被拉取软件包。
例如:您安装了一个依赖于软件包Y和Z的元包X。当您安装它时,软件包Y和Z不会被标记为自动安装(作为其他软件包的依赖项自动安装),而是标记为手动安装。稍后,当您想要删除X时,只有虚拟包X被删除。而Y和Z仍然存在于系统中,并且您无法使用autoremove选项卸载它们。

那真是很繁琐。但我猜这是唯一的出路,对吗? - Developer Android
你确定apt-cache depends在这里有用吗?我觉得tijybba提到的方法更适合这个目的。 - user25656
据我了解,是的。 - Anwar
@vasa1问题是我正在运行一个BeagleBone,几乎没有图形用户界面,即使使用VNC Viewer也没有。 - Developer Android
@Sab 我添加了另一个命令以在一行中获取列表。 - Anwar
是的,这很有帮助。非常感谢。只有一个最后的问题。有没有办法查看一个软件包是否有系统依赖? - Developer Android
@Sab 当你看到很多软件包被移除时,你可以猜测它们。apt-get会告诉你释放了多少空间。同时,如果你试图移除必要的系统软件包,它还会包含一条提示信息。这就是我知道的全部。我建议你从第一个命令获取软件包列表,然后逐个尝试移除。这样更安全。如果看到警告,请跳过移除该软件包。谢谢 - Anwar

介绍:

要完全使用命令行删除程序,您有以下选项:

使用apt-get删除程序和配置文件,但不删除依赖项。

sudo apt-get --purge remove <Package Name>

使用apt-get命令删除未使用的依赖项和配置文件。
sudo apt-get --purge autoremove

当在Ubuntu 12.04上安装GNOME时,它会安装一些必需的软件包和库,以及一些可选的软件包。但是,如果卸载GNOME,并不会删除所有这些软件包和库。一些软件包(例如epiphany-browser和gnuchess)并不会被卸载。快速卸载
这并不推荐,因为它将删除所有与GNOME一起正常安装的软件包。这可能包括您之前安装的软件包(例如epiphany-browser或gnuchess),或者由其他应用程序之前安装的软件包。
注意:此卸载命令假设GNOME是在干净的Ubuntu 12.04上安装的。1 只需按下键盘上的Ctrl+Alt+T即可打开终端。打开终端后,运行下面的命令。(该命令非常长且为单行)
sudo apt-get purge --auto-remove alacarte bogofilter bogofilter-bdb bogofilter-common browser-plugin-gnash cheese  cheese-common cups-pk-helper dconf-tools desktop-base ekiga epiphany-browser  epiphany-browser-data epiphany-extensions evolution evolution-common  evolution-plugins evolution-webcal fonts-cantarell gdebi gdebi-core gdm  gedit-plugins gimp gimp-data gir1.2-accountsservice-1.0 gir1.2-caribou-1.0  gir1.2-clutter-1.0 gir1.2-cogl-1.0 gir1.2-coglpango-1.0 gir1.2-folks-0.6  gir1.2-gdesktopenums-3.0 gir1.2-gee-1.0 gir1.2-gjsdbus-1.0 gir1.2-gkbd-3.0  gir1.2-gucharmap-2.90 gir1.2-json-1.0 gir1.2-mutter-3.0  gir1.2-networkmanager-1.0 gir1.2-panelapplet-4.0 gir1.2-polkit-1.0  gir1.2-telepathyglib-0.12 gir1.2-telepathylogger-0.2 gir1.2-upowerglib-1.0  gir1.2-xkl-1.0 gjs glchess glines gnash gnash-common gnect gnibbles gnobots2  gnome gnome-applets gnome-applets-data gnome-backgrounds gnome-contacts  gnome-core gnome-dictionary gnome-games gnome-games-extra-data  gnome-icon-theme-extras gnome-icon-theme-full gnome-js-common gnome-panel  gnome-panel-data gnome-session-fallback gnome-shell gnome-shell-common  gnome-themes-standard gnome-video-effects gnotravex gnotski gnuchess  gnuchess-book gtali hamster-applet iagno imagemagick imagemagick-common  indicator-applet-complete inkscape libbabl-0.0-0 libblas3gf libbonobo2-0  libbonobo2-common libbonoboui2-0 libbonoboui2-common libboost-iostreams1.46.1  libboost-program-options1.46.1 libboost-signals1.46.1 libboost-thread1.46.1  libcapi20-3 libcaribou-common libcaribou0 libcdt4 libcheese-gtk21 libcheese3  libclutter-1.0-0 libclutter-1.0-common libclutter-gst-1.0-0 libclutter-gtk-1.0-0  libclutter-imcontext-0.1-0 libcluttergesture-0.0.2-0 libcogl-common  libcogl-pango0 libcogl9 libept1.4.12 libevolution libgc1c2 libgdict-1.0-6  libgdict-common libgegl-0.0-0 libgfortran3 libgimp2.0 libgjs0c libglade2-0  libgnome2-0 libgnomecanvas2-0 libgnomecanvas2-common libgnomeui-0  libgnomeui-common libgnomevfs2-extra libgraph4 libgsl0ldbl libgtkhtml-4.0-0  libgtkhtml-4.0-common libgtkhtml-editor-4.0-0 libgtkmm-2.4-1c2a libgvc5  libilmbase6 liblapack3gf liblqr-1-0 libmagick++4 libmagickcore4  libmagickcore4-extra libmagickwand4 libmozjs185-1.0 libmusicbrainz4-3 libmutter0  libmx-1.0-2 libnetpbm10 libodbc1 libopal3.10.2 libopenexr6 libpanel-applet--0  libpathplan4 libpst4 libpt2.10.2 libseed-gtk3-0 libwmf-bin liferea liferea-data  lightsoff menu menu-xdg mutter-common netpbm notification-daemon odbcinst  odbcinst1debian2 perlmagick python-gmenu python-gnome2 python-lxml python-numpy  python-pyorbit python-uniconvertor quadrapassel sound-juicer swell-foop synaptic  unixodbc

如何完全删除软件包的更好方法: 1)打开aptitude日志文件(/var/log/apt/history.log)。 2)找到已安装的文件。 3)使用1删除这些文件。
sudo apt-get remove --auto-remove <file names>

1来源:如何完全卸载/移除GNOME


安装 gnome-core 将会带来大量软件包和依赖,因为它是一个元软件包。

一种方法是手动删除它,但您需要知道哪些软件包需要被删除而不会导致任何后效错误。

所包含的软件包列表在这里列出 Package: gnome-core (1:3.0+6ubuntu3) [universe]

前往Synaptic 管理器(如果不存在,请安装),从左下角选择中单击,参考图像。

enter image description here

选择要删除的软件包,请参考上面的链接。
注意:如果您不知道要删除哪些软件包,请不要按照此方法操作。这可能会导致依赖错误。