这篇文章的图片链接发生了问题,无法正常查看图片,所以我在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的区别的更多相关文章

  1. Day07_39_集合中的remove()方法 与 迭代器中的remove()方法

    集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...

  2. debian配置---->/etc/apt/sources.list apt基本源设置指南

    yum或apt基本源设置指南   关于: 管理Linux服务器的运维或开发人员经常需要安装软件,最常用方式应该是通过Linux系统提供的包管理工具来在线安装,比如centos的yum,ubuntu或d ...

  3. 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 ...

  4. 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题要求 ...

  5. C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总

    在List<T>中删除主要有Remove().RemoveAt().RemoveRange().RemoveAll()这几个方法.下面一一介绍使用方法和注意点. 我们以List<st ...

  6. 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 ...

  7. Java集合使用之next方法与remove方法 | Java集合使用之remove方法使用易错

    Iterator接口的remove方法将会删除上次调用next方法时返回的元素. next方法和remove方法的调用具有相互依赖性,如果调用remove方法前没有调用next方法是不合法的. 错误使 ...

  8. 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.注意要点:第一个元素 ...

  9. dpkg, APT, aptitude常用命令

    Install dpkg --install, -i [deb] apt-get install [package] aptitude install [package] Remove dpkg -- ...

随机推荐

  1. SQL与C#结合完整修改 删除信息

    --SQl中--建立ren的数据库,插入一条信息 create database ren go use ren go create table xinxi ( code ) primary key,- ...

  2. 利用JDBC处理mysql大数据--大文本和二进制文件等

    转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...

  3. 【leetcode❤python】Sum Of Two Number

    #-*- coding: UTF-8 -*- #既然不能使用加法和减法,那么就用位操作.下面以计算5+4的例子说明如何用位操作实现加法:#1. 用二进制表示两个加数,a=5=0101,b=4=0100 ...

  4. linux设置tomcat开机自启动

    本文假设jdk环境安装成功,如何安装JDK请参考这个链接: http://www.cnblogs.com/yoyotl/p/5395208.html 1. 下载apache的安装包,例如本例下载了ap ...

  5. 历史命令history

    历史命令在用户注销之后会保存在用户家目录下的-/.bash_history中 history #查看系统中实时缓存的历史命令,与.bash_history中的内容并不完全相同 history -c # ...

  6. EditPlus添加到右键菜单

    1.Alt+R 键打开“运行” 2.“运行”中输入:regedit 打开注册表    (1.在 "我的电脑HKEY_CLASSES_ROOT*" 下新建项 shell: (2.在 ...

  7. GridSplitter的一个简单例子

    GridSplitter可以在Grid布局中根据鼠标发生移动(可拖拽的分隔栏) XAML: <Window x:Class="Layout.MainWindow" xmlns ...

  8. 移动端图表插件jChart.js的修改

    bug1: 折线图,设置datasetGesture : true时,Y轴的刻度值居然会变.会变也就算了,居然没地方设置不能变. bug2: 折线图,设置tap.point事件,和datasetGes ...

  9. views中的公共代码放在一起

    在views中建立一个common.php文件,然后把views中的index.php和about.php公共代码放进去 <!doctype html> <html lang=&qu ...

  10. 关于C++类中的成员

    突然发现,如果C++的类成员中存在共有的成员,则可以通过指针的偏移来访问私有的成员变量,当然前提是对内存对齐比较清楚.只要骗过了编译器就可以为所欲为了. #include <cstdio> ...