apt-get
而这个步骤全要用户亲力亲为可能又有些麻烦,懒是科技发展的重要推动力。所以软件厂商自己编译好了很多二进制文件,只要系统和环境对应,下载之后就能直接安装。

但是如果下载了很多软件我想要管理怎么办?

下载器中一个软件还需要依赖很多别的软件怎么办?

想要及时更新怎么办?

那么把自己下载的历史信息记录下来,软件也记录自己的版本信息和依赖包。

服务器也记录这些信息,这就是软件管理器了。

redhat主要是rpm和更高级的yum,debian主要是dpkg和更高级的apt。

源和软件仓库实际上是一个意思,厂商将编译后的二进制文件和软件信息存放至服务器,用户需要安装软件时,包管理器自动分析本机和容器(repository)内的信息,下载需要的包并自动安装,安装后将新安装的软件信息存放至本地数据库。如果有前置软件没有安装,rpm和dpkg会提示安装失败,也可以强制安装,yum和apt会自动安装全部需要的依赖包。更新和卸载也同理。
这些源的位置记录在/etc/apt/sources.list,我们可以手动修改这些文件,但是修改重要系统配置前先备份是一个好习惯(sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup)。

apt-get相关目录

  • /var/lib/dpkg/available
    文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 ubunt 安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包.

  • /var/cache/apt/archives
    目录是在用 apt-get install 安装软件时,软件包的临时存放路径

  • /etc/apt/sources.list
    存放的是软件源站点

  • /var/lib/apt/lists
    使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录

安装位置

而我自己编译,自己手动安装软件的时候,喜欢将该文件的根目录放到/usr/local下,这样安装的好处是卸载方便,直接删除就基本完成了,而且不同的软件泾渭分明,不会说大家的文件混一起不好找。如果是那样的话,只能使用locate或者find之类的命令辅助查询了。

但是手动这样安装也有不好的地方,就是会导致man命令和一些二进制命令不能直接使用,这也是为什么我们安装完以后需要配置PATH的原因。

man命令同理,如果有需要可以在/etc/manpath.config文件中定义,这样就能查询该软件的man手册了。

apt-get update

sudo apt-get update 执行这条命令后计算机做了什么?
无论用户使用哪些手段配置APT软件源,只是修改了配置文件——/etc/apt/sources.list,目的只是告知软件源镜像站点的地址。但那些所指向的镜像站点所具有的软件资源并不清楚,需要将这些资源列个清单,以便本地主机知晓可以申请哪些资源。

用户可以使用“apt-get update”命令刷新软件源,建立更新软件包列表。在Ubuntu Linux中,“apt-get update”命令会扫描每一个软件源服务器,并为该服务器所具有软件包资源建立索引文件,存放在本地的/var/lib/apt/lists/目录中。 使用apt-get执行安装、更新操作时,都将依据这些索引文件,向软件源服务器申请资源。因此,在计算机设备空闲时,经常使用“apt-get update”命令刷新软件源,是一个好的习惯。

 apt-get install

sudo apt-get install XXX 后计算机做了什么?

使用“apt-get install”下载软件包大体分为4步:

  • 扫描本地存放的软件包更新列表(由“apt-get update”命令刷新更新列表,也就是/var/lib/apt/lists/),找到最新版本的软件包;
  • 进行软件包依赖关系检查,找到支持该软件正常运行的所有软件包;
  • 从软件源所指 的镜像站点中,下载相关软件包,并存放在/var/cache/apt/archive;
  • 第四步,解压软件包,并自动完成应用程序的安装和配置。

apt-get upgrade

sudo apt-get upgrade 后计算机做了什么?

使用“apt-get install”命令能够安装或更新指定的软件包。而在Ubuntu Linux中,只需一条命令就可以轻松地将系统中的所有软件包一次性升级到最新版本,这个命令就是“apt-get upgrade”,它可以很方便的完成在相同版本号的发行版中更新软件包。

在依赖关系检查后,命令列出了目前所有需要升级的软件包,在得到用户确认后,便开始更新软件包的下载和安装。当然,apt- get upgrade命令会在最后以合理的次序,安装本次更新的软件包。系统更新需要用户等待一段时间。

apt-get原理的更多相关文章

  1. APT工作原理

    两篇好的文章:http://blog.csdn.net/newjueqi/article/details/6679857 http://blog.csdn.net/buguyiqie/article/ ...

  2. ubuntu APT-GET工作原理

    转 http://kurenai.elastos.org/2013/05/02/ubuntu-apt-get%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86/   先介绍几个和 ...

  3. Linux学习笔记(一)----Ubuntu下的apt命令

    一.原理与目录 先介绍几个和apt-get相关的目录: /var/lib/dpkg/available文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 Debian 安装源中的所有软件包,其 ...

  4. AS 注解处理器 APT Processor MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 9-2 yum,dnf和apt

    yum, CentOS: yum, dnf YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具 ...

  6. yum安装命令的使用方法

    yum安装常用软件的命令 #yum check-update #yum remove 软件包名 #yum install 软件包名 #yum update 软件包名 yum命令常见使用方法 yum - ...

  7. Android 查阅博客2_APT

    https://mp.weixin.qq.com/s/3zrAzOUGpovRRbuYnce3uw APT(Annotation Processing Tool) 即注解处理器,是一种注解处理工具,用 ...

  8. (转)Android性能优化——工具篇

    Android性能优化是Android开发中经常遇见的一个问题,接下来将对Android性能优化方面的知识点做一个简单的梳理和总结,将从工具和代码两方面进行梳理.所谓工欲善其事必先利其器,本文首先来看 ...

  9. 【Linux】- apt-get命令

    apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统. Advanced Package Tool,又名apt-g ...

  10. [旧][Android] ButterKnife 浅析

    备注 原发表于2016.05.08,资料已过时,仅作备份,谨慎参考 前言 自上星期写 Retrofit 写吐之后 ... 我问大队长能不能换个其他什么东西写,大队长就说了个单词 ButterKnife ...

随机推荐

  1. android开发检测用户是否使用了虚拟定位

    在应用开发中,如果有签到打卡之类的功能,你是否会遇到检测用户是否使用了虚拟定位软件来进行打卡?如果有,那么请仔细阅读这篇文章.该文章会带你认识什么是虚拟定位.什么是应用分身,以及如何通过代码来检测用户 ...

  2. Elasticsearch 监控指标解析

    1.集群监控 集群监控主要包括两个方面的内容,分别是集群健康情况和集群的运行状态. 集群健康状态可以通过以下api获取: http://ip:9200/_cluster/health?pretty 关 ...

  3. CSS类的操作

    CSS类的操作 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  4. 使用Advanced Installer打包工具如何设置是否安装预安装程序包

    要保证我们的程序能在目标机器上正常运行,便需要保证目标机器上提供了程序运行的必要组件. 而在使用Advanced Installer打包工具制作程序安装包时,我们可以通过配置“需求-运行环境-程序包- ...

  5. webpack 插件 ProvidePlugin 的使用方法和 eslint 配置

    ProvidePlugin:自动加载模块,而不必到处 import 或 require .(点击查看官方文档) 使用方法: 配置 webpack.config.js文件里 plugins 属性 new ...

  6. MPV源码探究:源码结构和调用层次

    源码结构和调用层次 源码结构 从 Github 上拉取最新的源码,目录结构大致如下: H:\MPV ├─.github ├─audio │ ├─decode │ ├─filter │ └─out ├─ ...

  7. c++11多线程笔记

    1 thread类thread f;线程等待join()线程分离detach() thread类不可拷贝复制 std::this_thread::yield(); 2 bind 与lambda表达式 ...

  8. 设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务

    设置openwrt路由器的防火墙_允许从外网访问内网的ipv6服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-02. 参考文章: IPv6"内网"设备 ...

  9. dedecmsV5.7 插入记录并返回刚插入数据的自增ID

    //插入一条数据 $sql = "INSERT INTO `table_name` (`name`,age) VALUES ('小明','23')"; $dsql->SetQ ...

  10. 腾讯云大学 x CODING | 当 DevOps 邂逅云原生

    2019 年经济减速的阴云笼罩了所有行业,势如破竹的发展势头被打破,小微创新型企业生存艰难.越来越多的企业更加关注客户和业务之间的交付价值,精益化公司运营,降低成本,驱动业务发展.是否要拥抱云原生?开 ...