apt-get 命令原理


原文鏈接: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: python
Priority: important
Section: python
Installed-Size: 640
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Matthias Klose <[email protected]>
Architecture: all
Source: python-defaults
Version: 2.6.5-0ubuntu1
Replaces: python-base, python-xmlbase, python2.3 (<= 2.3.2-6)
Provides: python-ctypes, python-email, python-plistlib, python-wsgiref, python-xmlbase
Depends: 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.deb
Size: 147766
MD5sum: 457b6f467e45287b8430833ec7d2f9ec
SHA1: 3d67dd0ebf003ede05dbae034616c1f519ea5962
SHA256: 5aa5086459e04815980329b66f430321cf490d7d37c9550e30d43125dd2dc5fc
Description: 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/+filebug
Origin: Ubuntu
Supported: 5y
Task: 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 檢查是否有損壞的依賴



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章