[Tutorials] remove,autoremove,purge区别,慎用 autoremove
Tofloor
poster avatar
andktan
deepin
2022-03-25 22:41
Author

慎用 apt-get autoremove !

(转自https://www.shuzhiduo.com/A/pRdB0gQDJn/)

apt-get 提供了一个用于下载和安装软件包的简易命令行界面。
卸载软件包主要有这3个命令

remove – 卸载软件包
autoremove – 卸载所有自动安装且不再使用的软件包
purge – 卸载并清除软件包的配置

apt-get remove的行为我们很好理解,就是删除某个包的同时,删除依赖于它的包
例如: A 依赖于 B, B 依赖于 C
apt-get remove 删除B的同时,将删除A(很好理解,A依赖于B,B被删了,A也就无法正常运行了)

apt-get autoremove的行为重点是卸载所有自动安装
例如:C 依赖于 B, D 依赖于B, 且D没有被其他手动安装的包依赖
apt-get remove C 将删除C, 同时提示你用apt-get autoremove去清除B,D apt-get autoremove C 将删除B, C, D aptitude remove C 将删除B, C, D
我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,
则可以判定B,D也是没必要的

apt-get purge的行为卸载并清除软件包的配置,很容易理解

依赖性永远是个噩梦,不要考虑用 apt-get autoremove 卸载自己不熟悉的软件包
apt-get remove卸载的是自己以及自己的下系

apt-get autoremove则是卸载与自己相关而没有被其他手动安装包所依赖的包,

如果你不是对一个包了解的话,有可能一用一下autoremove一下,你的系统就挂了。

Reply Favorite View the author
All Replies
joo
deepin
2022-03-25 23:03
#1

你应该把apt的文档看多两遍,去apt官方社区多问问,明显你的理解不准确。

Reply View the author
joo
deepin
2022-03-25 23:08
#2

你给的链接的文档的作者一知半解,绝对要打他屁股,升级软件不是先删除旧的版本,再安装新的版本,没时间给你解析,自己多看文档,多问问。

Reply View the author
SamLukeYes
deepin
2022-03-25 23:15
#3

apt 设计得比较糟糕的一点是所有的 remove 操作都默认会卸载掉依赖目标的其他包。假如 A 和 B 都依赖 C,pacman -R C 会报错不满足依赖关系,而 apt remove C 会默认把 A 和 B 也一起卸载了。如果要让 pacman 像 apt 的行为一样把 A 和 B 也一起卸载了,就要加个参数 -c。这个参数在 Arch Wiki 中明确说明了是危险参数,要慎用,却是 apt 的默认行为。

比起 autoremove,我认为更危险的是 -y 参数。万一 autoremove 的时候要把关键软件包给卸载了,不加 -y 的话还能看到卸载一大堆包肯定有鬼,选 n 终止操作就不会发生危险了,加了 -y 可能就来不及刹车了tail

Reply View the author
大多时候吃素
deepin
2022-03-26 00:04
#4
SamLukeYes

apt 设计得比较糟糕的一点是所有的 remove 操作都默认会卸载掉依赖目标的其他包。假如 A 和 B 都依赖 C,pacman -R C 会报错不满足依赖关系,而 apt remove C 会默认把 A 和 B 也一起卸载了。如果要让 pacman 像 apt 的行为一样把 A 和 B 也一起卸载了,就要加个参数 -c。这个参数在 Arch Wiki 中明确说明了是危险参数,要慎用,却是 apt 的默认行为。

比起 autoremove,我认为更危险的是 -y 参数。万一 autoremove 的时候要把关键软件包给卸载了,不加 -y 的话还能看到卸载一大堆包肯定有鬼,选 n 终止操作就不会发生危险了,加了 -y 可能就来不及刹车了tail

那就习惯不加y,看清楚先哈哈

Reply View the author
忘记、过去
deepin
2022-03-26 01:18
#5
大多时候吃素

那就习惯不加y,看清楚先哈哈

然而按照设计要求,升级或者商店安装卸载不需要用户干预,不加 -y 又过不去,没合适的办法就很烦

Reply View the author
新手小白
deepin
2022-03-26 02:22
#6
It has been deleted!
andktan
deepin
2022-03-26 03:13
#7
新手小白 It has been deleted!

这是啥

Reply View the author
charm
deepin
2022-03-26 04:19
#8

我用autoremove之前,都会把卸载的包名存在文件里,出现问题还有机会补救

Reply View the author
SamLukeYes
deepin
2022-03-26 05:08
#9
andktan

这是啥

Arch Linux 的包管理器

Reply View the author
enforcee
deepin
2022-03-26 05:32
#10

反对

joy

既然一个包已经不需要了,还留着他干啥,用autoremove的做法是没问题的,是楼主理解的不对。

deepin的问题是他只标记了为数不多的虚包为手动安装的包,比如说dde这一个包,而所有应用程序都是作为dde的依赖自动安装的,如果删掉这其中任何一个依赖库都会删除dde,这时再autoremove就会删除所有的应用程序。但是事实上引发问题的是“删除dde的依赖库”,根本不关autoremove的问题。如果楼主认为在apt的设计中用autoremove命令过于危险,楼主应该去要求改进删除重要软件包的警告,让管理员放心去用autoremove,而不是去用挂系统去吓唬用户。

Reply View the author
joo
deepin
2022-03-28 18:21
#11

他的问题出在升级软件是先卸载再安装,不想跟他解析。pacman一样的依赖逻辑,一样的升级方式,不解析。

Reply View the author
andktan
deepin
2022-03-29 00:41
#12
joo

他的问题出在升级软件是先卸载再安装,不想跟他解析。pacman一样的依赖逻辑,一样的升级方式,不解析。

🙂

Reply View the author