Linux中的软件大部分是零碎的,其粒度比windows的小很多,软件之间的依赖关系很强烈,下面是自己的一些理解:

一、Linux中的软件依赖
Linux中的软件依赖关系成一颗拓扑树结构,比如A直接或间接依赖B,那么B就不可能直接或间接依赖A。试想从时间上A、B必然有一个先出现,而先出现的不可能依赖于后出现的;并且如果A与B互相依赖则就是“鸡与蛋”的问题,因此必然有一个先出现而另一个依赖于先者。

二、Linux的软件安装与卸载
(1)安装软件A必须率先安装A依赖的所有软件;卸载软件A则必须率先卸载依赖A的所有软件。如下图:
a\
   b\
   c\
b,c依赖于a,那么安装b或c都先要确保a的存在;同时卸载a必须确保b和c都已经被卸载。
(2)卸载A不代表同时卸载A所依赖的所有无用软件,比如:B<--A,卸载A以后B就没用了(因为没有其他软件再依赖B了),Linux默认不卸载B,但可以使用特殊的参数让系统这么做。
Ubuntu下,apt-get remove就是一般的卸载,而apt-get autoremove则是同时卸载其所依赖的无用软件
--------------------------------
autoremove的伪代码:
autoremove_soft(entity x) {
    remove x;
    for each p in x->parent {
        p->child_num--;
        if(p->child_num == 0)
            autoremove_soft(p);
    }
}
----------------------------------
sudo apt-get autoclean 清理旧版本的软件缓存
sudo apt-get clean 清理所有软件缓存
sudo apt-get remove softname1 softname2 ...
sudo apt-get --purge remove softname1 softname2 ...(同时清除配置)
sudo apt-get autoremove 删除系统不再使用的孤立软件

转自:http://www.linuxidc.com/Linux/2010-08/27972.htm

Linux软件间的依赖关系(转)的更多相关文章

  1. Mint Linux 安装 DotnetCore 遭遇无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

    evlon@evlon-ThinkPad-T530 ~ $ apt install dotnet-dev-1.0.0-preview2-003121 正在读取软件包列表... 完成 正在分析软件包的依 ...

  2. E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

    安装terminator等一些软件等时候,遇到了这样等问题 leo@leo:~$ sudo apt-get install terminator [sudo] password for leo: 正在 ...

  3. Prism 4 文档 ---第3章 管理组件间的依赖关系

     基于Prism类库的应用程序可能是由多个松耦合的类型和服务组成的复杂应用程序,他们需要根据用户的动作发出内容和接收通知进行互动,由于他们是松耦合的,他们需要一种方式来互动和交流来传递业务功能的需求. ...

  4. Ubuntu 14.04—无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系 解决办法

    在Ubuntu中使用sudo apt-get install安装是有时候会出现: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系   解决办法 这样的错误,这是因为更新源 ...

  5. Ubuntu 16.04安装qt5-default报错:qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。(此类问题终极解决方法)

    切记:没事不要进行sudo apt-get upgrade 错误: qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间 ...

  6. linux下查看动态链接库依赖关系的命令 x86: ldd *.so arm: arm-linux-readelf -d *.so 实际例子: 以项目中用到的库librtsp.so分析: lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librtsp.so arm-hisiv100nptl-linux-ld:

    linux下查看动态链接库依赖关系的命令 x86:ldd    *.so arm:arm-linux-readelf    -d    *.so 实际例子:以项目中用到的库librtsp.so分析:l ...

  7. Ubuntu安装SSH服务器故障分析及解决办法(错误1:E:软件包 openssh-server 还没有可供安装的候选者,错误2:E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系)

    •    微博: 小样儿老师2015 Windows下做Linux开发需要SSH强大功能的支持.安装SSH的过程会出现了很多问题,看完这篇文章可以让你少走些弯路,PS:折腾一下午的成果. Ubuntu ...

  8. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  9. JAVA 设置模块间的依赖关系

    项目目录概况 Demo01项目 Test01.java package com.sam.demo01; public class Test01 { public void ShowTest01() { ...

随机推荐

  1. C++ DLL注册

    今天项目中需要用C++实现对几个DLL文件的注册,查了许多资料,总结如下: #include <SHLWAPI.H> #pragma region DLL 注册与反注册 add by wh ...

  2. GridView隔行样式

    <AlternatingRowStyle BorderColor="#FF99CC" BorderStyle="Solid" />

  3. 征服 Redis + Jedis + Spring —— 配置&常规操作

    Spring提供了对于Redis的专门支持:spring-data-redis.此外,类似的还有: 我想大部分人对spring-data-hadoop.spring-data-mongodb.spri ...

  4. 注意:只有xcode5.1创建的项目会自动适配iphone6,iphone6p

    注意:只有xcode5.1创建的项目会自动适配iphone6,iphone6p

  5. C#实现多态之一抽象

    1. 抽象类.抽象方法.抽象属性的特点 (1)      关键字:abstract (2)      抽象类只能是其他类的基类 (3)      抽象成员必须存在于抽象类中,但抽象类可以没有抽象成员, ...

  6. VS2013无法链接到TFS (转)

    VS2013无法链接到TFS(Visual studio online),错误TF31001,TF31002   TF31002: Unable to connect to VisualStudio ...

  7. zoj3229

    题目大意: 一个XX用n天要给m个女神拍写真.这n天里每个女神i分别至少要拍Gi张照片,XX在第j天会给指定Cj个女神最多拍Dj张照片,每个女神第j天拍照数在lj到hj张照片.问XX是否安排完成他的任 ...

  8. 搭建Hadoop集群 (一)

    上面讲了如何搭建Hadoop的Standalone和Pseudo-Distributed Mode(搭建单节点Hadoop应用环境), 现在我们来搭建一个Fully-Distributed Mode的 ...

  9. linux杂记(六)档案权限

    [KANO@kelvin ~]$ ls -al 总用量 drwx------. KANO KANO 10月 : . drwxr-xr-x. root root 9月 : .. drwxrwxr-x. ...

  10. linux使用wget纯命令下载JDK的方法(凑字数)

    linux使用wget纯命令下载JDK的方法 linux使用wget纯命令下载JDK的方法 Oracle官网上下载jdk,需要点击accept licence的才能下载,所以一般的直接使用wget下载 ...