apt 仅卸载某个包而不卸载其依赖

2017-11-28 13:34:44 +08:00
 cnt2ex

操作系统是 debian 9。

当初安装系统的时候没有选择图形界面,而是镜像安装完之后通过 apt install gnome 来自动安装对应的依赖。 最近突然发现很多依赖其实都没必要,于是想卸载一些东西。比如卸载 gnome-weather 之类的。但是这些是通过 gnome 依赖安装进来的,没法直接卸载。

其中依赖关系大概是 gnome -> gnome-weather, gnome-core 如果我直接卸载 gnome-weather 会导致 gnome 的依赖被破坏,而 apt 就会决定把 gnome 也会卸载掉,而卸载 gnome 就会把通过 gnome 安装进来的依赖 gnome-core 给卸载掉。但是我想保留 gnome-core 而卸载 gnome-weather。

所以现在我打算先卸载 gnome 然后保留 gnome 所有的依赖,再继续卸载 gnome-weather。其实就是想卸载一个包而不卸载其依赖。

网上找到的方法是 dpkg -r --force-all

但我现在还能想到的就是

  1. hold 所有 gnome 的依赖再卸载 gnome
  2. 将 gnome 的依赖全部标记为 manual 的。然后再卸载 gnome。

不过我都不知道以上的后果是什么,所以问问有没有人比较熟悉类似的操作的。

8652 次点击
所在节点    Linux
22 条回复
jyf007
2017-11-28 14:53:43 +08:00
emerge -C app-shells/bash
jmc891205
2017-11-28 16:07:11 +08:00
卸载 gnome-weather 之后呢?还要把 gnome 装回来?这样应该不行吧。。。
forestyuan
2017-11-28 16:22:05 +08:00
强行卸载会出问题吧
sundayhk
2017-11-28 16:25:30 +08:00
强行将依赖卸载掉的话,重启后你就知道麻烦了。这坑是自己挖。
jasontse
2017-11-28 16:42:04 +08:00
直播作死
YumeMichi
2017-11-28 16:45:46 +08:00
总有人喜欢挑战 linux 的包依赖关系(滑稽
henglinli
2017-11-28 19:53:10 +08:00
@jyf007 zsh 好用,我卸载了 bash
402645707
2017-11-28 20:36:20 +08:00
要是依赖了 python 全家桶(善意的微笑
chinanala
2017-11-28 21:06:33 +08:00
我也是 Debian9 stable- Gnome。系统安装后默认自带 Gnome 一大堆用不着的小工具,我都在 gnome-software 中卸载了,没遇到你说的依赖问题。不是在命令行中卸载,是在 Software GUI 程序中卸载
Gonejack
2017-11-28 21:44:10 +08:00
Linux 这些太脏了,很容易玩挂
cnt2ex
2017-11-28 22:20:44 +08:00
问题解决了。
最后还是用了第三种方法,把 gnome 依赖的所有包标记成手动安装,然后再卸载的 gnome 和 gnome-weather,gnome-core 和其他依赖依然保留着。

@jmc891205
没有把 gnome 安装回来。其实 gnome 包里本身没有什么内容,主要是 gnome 包依赖了其他包。

@chinanala
我并不是默认安装,装的时候把桌面环境给取消了。装好之后只有字符界的那种,在里面自己装的 gnome。
依赖问题的话,我猜测可能是默认安装的把所有依赖安装的包都标记为手动安装的了。或者你卸载的那几个软件并非是 Depends 这样的依赖而是 Recommends 或者 Suggests 这样的依赖。
msg7086
2017-11-28 22:41:49 +08:00
没记错的话 apt-get 卸载包不会自动卸载依赖包。
7654
2017-11-28 22:49:27 +08:00
下载 deb 包,然后压缩软件打开,按照里面的路径,手动 rm
楼主是有多大的强迫症?
0Y89tX3MgR4I
2017-11-28 22:50:43 +08:00
有这时间干啥不好
slack
2017-11-28 23:07:53 +08:00
用 aptitude 吧,apt 在某些方面可能会破坏依赖关系的
linuap
2017-11-28 23:11:06 +08:00
强迫症老哥别用 linux 当桌面吧....

linux 就是把太多东西给你看了,还给了你想怎么玩怎么玩的权限

像 ios 之类的,你看到的都删不了,别提那些你看不到的了 /doge
zeny620
2017-11-29 00:04:52 +08:00
借楼问下如何只装必要依赖,不装 suggest 包
feather12315
2017-11-29 00:07:00 +08:00
`apt autoremove --purge <package>`
feather12315
2017-11-29 00:07:50 +08:00
@zeny620 #17 `man apt`,有个 `no-recommend`之类的参数
cnt2ex
2017-11-29 12:46:11 +08:00
@msg7086
这个我倒不清楚了,因为官方文档里推荐从 apt-get 换成 apt,而我也更习惯使用 aptitude。用 aptitude 的时候会卸载自动安装的依赖。
不过 debian 系的那堆包管理工具对我来说很乱,从 dpkg 的一堆到 apt-get, apt-cache, apt-file, apt-mark 再到 aptitude。我不是很清楚是怎么分类的。只是一般倾向于使用 aptitude/apt 而不是 apt-get,因为 aptitude 的 search 支持 search term,比如'~c'可以搜索哪些包还有 conffiles 没被删除,'~o'可以搜索过时的包。

@7654
这样不好。
光我所知道的,dpkg 和 apt 都会记录一些包的相应的状态。比如 dpkg 会记录(/var/lib/dpkg)某些包安装了哪些文件和他们的 md5sum,而 apt 还会记录某些包是自动安装的还是手动安装的,以及一些其他状态。
你通过 rm 删的话,这些对应的状态没改过来显然是不行的。

@zeny620
debian 的包有几种依赖方式 pre-depends/depends/recommends/suggests
pre-depends/depends 是必须满足的依赖。而用 apt 安装的时候,suggests 的包是默认不会被安装的,recommends 的包是默认会安装的。不安装 recommends 就是前面 @feather12315 说的那个参数。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/410179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX