apt-get remove, apt-get autoremove和aptitude remove的区别
这篇文章的图片链接发生了问题,无法正常查看图片,所以我在CSDN转载一下,特此声明。
apt-getremove的行为我们很好理解,就是删除某个包的同时,删除依赖于它的包,例如:A依赖于B,
B依赖于C,apt-getremove删除B的同时,将删除A(很好理解,A依赖于B,B被删了,A也就无法正常运行了)
先说明下apt-getautoremove与aptituderemove是一样的效果的,我们先了解下这两者的瓜葛
|
1 |
apt-get一开始并没有记录auto-install的信息 |
||
|
2 |
在apt(0.6.44.2exp1)此版本时(06年),apt-get增加了类似于aptitude的auto-install记录(/var/lib/apt/extended_states). |
||
|
3 |
此后,aptitude在版本0.4.5.1(07年)转向使用apt-get的auto-install记录,而抛弃了自己原先的记录方式 |
||
|
4 |
再随后apt-get在版本0.7.7(07年)增加了autoremove的选项 |
||
依赖关系是一个复杂而交错的链条,我们把举几个例子来看看它们的行为
|
1 |
以下图中,绿色圆是为了满足依赖关系而apt-get或aptitude自动安装上的包 |
||
|
2 |
蓝色圆是管理员使用apt-getinstall或aptitudeinstall |
||
|
3 |
指定安装的包,简称为手动安装的包 |
||
例子1:
1.C依赖于或推荐B软件包(apt-get和aptitude在安装软件时除了安装必要的依赖包,默认也会安装Recommends关系的包)
2.B 依赖于或推荐A,A被其他手动安装的包依赖
|
1 |
apt-getremove C将删除C,同时提示你用apt-getautoremove去清除B |
||
|
2 |
apt-getautoremove C将删除B,C |
||
|
3 |
aptituderemove C将删除B,C |
||
我的理解:删除C,那么B这个包既是自动安装的,且没有其他手动安装的包依赖于它,
则可以判定B也是没必要的
例子2:
1.在例子1的基础上,D依赖于或者推荐B,且D没有被其他手动安装的包依赖
这样的情况一般出现在用apt-getremove某个手动安装的包之后.
|
1 |
apt-getremove C将删除C,同时提示你用apt-getautoremove去清除B,D |
||
|
2 |
apt-getautoremove C将删除B,C, D |
||
|
3 |
aptituderemove C将删除B,C, D |
||
我的理解:删除C,那么B,D这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,
则可以判定B,D也是没必要的
例子3:
1.在例子2的基础上,有个手动安装的包E推荐D(既ERecommends
D,手动安装E时,也会把D装上)
|
1 |
apt-getremove C将删除C,同时提示你用apt-getautoremove去清除B,D |
||
|
2 |
apt-getautoremove C将删除B,C, D |
||
|
3 |
aptituderemove C将删除B,C, D |
||
我的理解:删除C,那么B,D这两个包既是自动安装的,且没有其他手动安装的包依赖于它们,
则可以判定B,D也是没必要的
虽然D被ERecommend,但为啥是这么设计的,我也没猜出开发人员的想法
例子4:
1.在例子3的基础上,D变成依赖于B,E变成依赖于D
|
apt-getremove C将删除C |
|||
|
apt-getautoremove C将删除C |
|||
|
aptituderemove C将删除C |
|||
我的理解:只删除C,因为B被D依赖,D被E依赖,间接来说,E不能没有B,D而正常运行,所以B,D被保留
例子5:
1.的基础上,D变成推荐B,E依然依赖于D
|
apt-getremove C将删除C,同时提示你用apt-getautoremove去清除B |
|||
|
apt-getautoremove C将删除B,C |
|||
|
aptituderemove C将删除B,C |
|||
我的理解:删除C,而B没有被其他手动安装的包直接依赖或者间接依赖(我指那些一层层dependon的关系),D被E依赖
所以B不是必要的,可以删除,而D不能删除
apt-get remove, apt-get autoremove和aptitude remove的区别的更多相关文章
- Day07_39_集合中的remove()方法 与 迭代器中的remove()方法
集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...
- debian配置---->/etc/apt/sources.list apt基本源设置指南
yum或apt基本源设置指南 关于: 管理Linux服务器的运维或开发人员经常需要安装软件,最常用方式应该是通过Linux系统提供的包管理工具来在线安装,比如centos的yum,ubuntu或d ...
- 50. Remove Duplicates from Sorted Array && Remove Duplicates from Sorted Array II && Remove Element
Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that e ...
- leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点)
203题是在链表中删除一个固定的值,83题是在链表中删除重复的数值,但要保留一个:82也是删除重复的数值,但重复的都删除,不保留. 比如[1.2.2.3],83题要求的结果是[1.2.3],82题要求 ...
- C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总
在List<T>中删除主要有Remove().RemoveAt().RemoveRange().RemoveAll()这几个方法.下面一一介绍使用方法和注意点. 我们以List<st ...
- 100. Remove Duplicates from Sorted Array && 101. Remove Duplicates from Sorted Array II [easy]
这两题类似,所以放在一起,先看第一题: Description Given a sorted array, remove the duplicates in place such that each ...
- Java集合使用之next方法与remove方法 | Java集合使用之remove方法使用易错
Iterator接口的remove方法将会删除上次调用next方法时返回的元素. next方法和remove方法的调用具有相互依赖性,如果调用remove方法前没有调用next方法是不合法的. 错误使 ...
- 83. Remove Duplicates from Sorted List + 82. Remove Duplicates from Sorted List II
▶ 删除单链表中的重复元素. ▶ 83. 把重复元素删得只剩一个,如 1 → 1 → 2 → 3 → 3 → 3 → 4 → 5 → 5 变成 1 → 2 → 3 → 4 → 5.注意要点:第一个元素 ...
- dpkg, APT, aptitude常用命令
Install dpkg --install, -i [deb] apt-get install [package] aptitude install [package] Remove dpkg -- ...
随机推荐
- Infragistics UltraGrid的使用
OL SDK:http://help.infragistics.com/ 资料参考:http://blog.csdn.net/andy_212/article/details/4019895 http ...
- HDU 5640 King's Cake
King's Cake Problem Description It is the king's birthday before the military parade . The ministers ...
- C# Eval()和Bind()
Eval( " ")和Bind( " ") 这两种一个单向绑定,一个双向绑定,bind是双向绑定,但需数据源支持ASP.NET 2.0改善了模板中的数据绑定 ...
- 在JSP页面显示九九乘法表
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 【leetcode❤python】70. Climbing Stairs
#Method1:动态规划##当有n个台阶时,可供选择的走法可以分两类:###1,先跨一阶再跨完剩下n-1阶:###2,先跨2阶再跨完剩下n-2阶.###所以n阶的不同走法的数目是n-1阶和n-2阶的 ...
- socket 异步选择 WSAAsyncSelect 用法
WSAAsyncSelect 实现给异步socket给了另一种实现方式,就是通过窗口消息的方式来提醒对socket接收还是发送 msdn有非常全面的解释:https://msdn.microsoft. ...
- ThinkPHP 模型(Model)命名规范
一个小问题搞了好久:如果数据库的表名中有下划线,那么在用thinkphp做自动完成时注意Model类的命名要变成驼峰法,文件名和类名都要变.( 另外注意:只有使用create方法创建数据时才能调用到自 ...
- 如何设计点击点击一个div,其他div做出对应反应,以及获取一个节点下的子节点
<div id="show"> <div>1</div> <div>2</div> <div>3</d ...
- Hibernate——基础及XML配置
1.入门 hibernate是跟数据库打交道的,一般跟数据库打交道的都不简单 原始.底层直接的一些操作.编码量比较大.费时.用框架高效 把原来一点一点实现的东西,现在给个半成品,不用在这上边发时间,把 ...
- Python入门-引号
Python 接收单引号(' ),双引号(" ),三引号(''' """) 来表示字符串,引号的开始与结束必须的相同类型的. 其中三引号可以由多行组成,编写多行 ...