apt-get 命令原理

来源:互联网 发布:大数据修炼系统 顶点 编辑:程序博客网 时间:2024/05/21 11:36


原文链接:http://hackerxu.com/2014/12/03/apt_get.html


apt-get工作顺序

1 查询源列表

apt命令会访问/etc/apt/sources.list源列表.(这个源列表可以添加好多源,每次都选中开头的有效源)

deb http://mirror.neu.edu.cn/ubuntu/(网址) trusty main restricted   (版本号)

我的这个是东大的源.

2 查询Packages.gz

Main 的包的相关信息均在 dists/lucid/main/binary-i386/下。不是把包放在这里就行了,还需要生成Packages.gz的包文件,因为apt-get 每次都会读取这个文件,从而获取的包的信息。

从Packages.gz中获取到所有包的信息,然后apt-get就可以通过它找到所有的包并且自动下载安装了。

来看看Packages.gz都有什么吧(下面是python包的信息):

Package: pythonPriority: importantSection: pythonInstalled-Size: 640Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>Original-Maintainer: Matthias Klose <doko@debian.org>Architecture: allSource: python-defaultsVersion: 2.6.5-0ubuntu1Replaces: python-base, python-xmlbase, python2.3 (<= 2.3.2-6)Provides: python-ctypes, python-email, python-plistlib, python-wsgiref, python-xmlbaseDepends: python2.6 (>= 2.6.5), python-minimal (= 2.6.5-0ubuntu1)Suggests: python-doc (>= 2.6.5-0ubuntu1), python-tk (>= 2.6.5-0ubuntu1), python-profiler (>= 2.6.5-0ubuntu1)Conflicts: libboost-dbg (<< 1.34.1-15ubuntu3), libboost-python-dev (<< 1.34.1-15ubuntu3), libboost-python1.35-dev (<< 1.35.0-8ubuntu5), libboost1.35-dbg (<< 1.35.0-8ubuntu5), pitivi (<< 0.11.3-1ubuntu1), python-aubio (<< 0.3.2-2ubuntu3), python-base, python-bz2, python-central (<< 0.5.5), python-csv, python-freevo (<< 1.8.1-3ubuntu3), python-xmlbase, python2.1 (<= 2.1.2), python2.3 (<< 2.3.5-14), qmtest (<< 2.4-5ubuntu1), ufw (<< 0.27~r416)Filename: pool/main/p/python-defaults/python_2.6.5-0ubuntu1_all.debSize: 147766MD5sum: 457b6f467e45287b8430833ec7d2f9ecSHA1: 3d67dd0ebf003ede05dbae034616c1f519ea5962SHA256: 5aa5086459e04815980329b66f430321cf490d7d37c9550e30d43125dd2dc5fcDescription: An interactive high-level object-oriented language (default version) Python, the high-level, interactive object oriented language, includes an extensive class library with lots of goodies for network programming, system administration, sounds and graphics. . This package is a dependency package, which depends on Debian's default Python version (currently v2.6).Bugs: https://bugs.launchpad.net/ubuntu/+filebugOrigin: UbuntuSupported: 5yTask: minimal

包含的信息有:

包名,优先级,类型,维护者,架构,源文件(source),版本号,依赖包,冲突性信息,包大小,文件的下载路径,MD5sum,SHA1,包描述,Xul-Appid---应用程序id,Bugs信息,Origin,Supported

从以上可以看到包的下载地址为:

(http://mirror.neu.edu.cn/ubuntu/)pool/main/p/python-defaults/python_2.6.5-0ubuntu1_all.deb

3 下载包或者依赖

它会首先检查依赖,如果不存在则下载依赖包,这个依赖包或许还有依赖(递归下载),在完成了所有依赖包则可以进行下载,安装完成,中间任意一环没有完成则失败退出.这就是整个过程啦.

总结

  1. 更新Packages.gz解析安装包所依赖的文件
  2. 根据1的结果检查是否所需要的依赖都已经安装,假设没有安装,则下载(应该有自己的下载功能)这些依赖并进行安装,这个过程中会对每个依赖重复1、2这两个过程
  3. 解决依赖关系,下载指定软件并安装,2、3中如果找不到软件或者库,则失败.

Packages.gz已经包含所有所依赖的软件及其版本信息、以及下载地址.

apt-get常用命令

  • sudo apt-get install package 安装包
  • sudo apt-get remove package 删除包
  • sudo apt-get update 更新源
  • sudo apt-get upgrade 更新已安装的包
  • apt-get source package 下载该包的源代码

还有一些命令:

  • apt-cache search package 搜索软件包
  • apt-cache show package 获取包的相关信息,如说明、大小、版本等
  • sudo apt-get install package --reinstall 重新安装包
  • sudo apt-get -f install 修复安装
  • sudo apt-get remove package --purge 删除包,包括配置文件等
  • sudo apt-get dist-upgrade 升级系统
  • apt-cache depends package 了解使用该包依赖那些包
  • apt-cache rdepends package 查看该包被哪些包依赖
  • sudo apt-get build-dep package 安装相关的编译环境
  • sudo apt-get clean && sudo apt-get autoclean 清理无用的包
  • sudo apt-get check 检查是否有损坏的依赖



0 0