摘要:軟件廠商先在他們的系統上面編譯好了咱們用戶所須要的軟件,而後將這個編譯好並可執行的軟件直接發佈給用戶安裝。不一樣的 Linux 發行版使用不一樣的打包系統,通常而言,大多數發行版分別屬於兩大包管理技術陣營: Debian 的」.deb」,和 Red Hat的」.rpm」。也有一些重要的例外,比方說 Gentoo, Slackware,和 Foresight,但大多數會使用這兩個基本系統中的一個。這裏將要介紹的是Debian系列發行版的dpkg與apt-*的詳細使用方法。html
1、dpkg
一、簡介linux
dpkg - package manager for Debian (debian系統的包管理工具)。數據庫
dpkg is a tool to install, build, remove and manage Debian packages,dpkg是Debian的一個底層包管理工具,主要用於對已下載到本地和已安裝的軟件包進行管理。ubuntu
dpkg這個機制最先由Debian Linux社區所開發出來的,經過dpkg的機制,Debian提供的軟件就可以簡單的安裝起來,同時能提供安裝後的軟件信息,實在很是不錯。只要派生於Debian的其它Linux distributions大多使用dpkg這個機制來管理,包括B2D,Ubuntu等。緩存
二、deb軟件包名規則服務器
格式爲:Package_Version-Build_Architecture.deb網絡
如:nano_1.3.10-2_i386.deb架構
* 軟件包名稱(Package Name): nanoide
* 版本(Version Number):1.3.10工具
* 修訂號(Build Number):2
* 平臺(Architecture):i386
三、dpkg軟件包相關文件介紹
/etc/dpkg/dpkg.cfg dpkg包管理軟件的配置文件【Configuration file with default options】 /var/log/dpkg.log dpkg包管理軟件的日誌文件【Default log file (see /etc/dpkg/dpkg.cfg(5) and option --log)】 /var/lib/dpkg/available 存放系統全部安裝過的軟件包信息【List of available packages.】 /var/lib/dpkg/status 存放系統如今全部安裝軟件的狀態信息 /var/lib/dpkg/info 記安裝軟件包控制目錄的控制信息文件
四、dpkg數據庫
dpkg 使用文本文件做爲數據庫來維護系統中軟件,包括文件清單, 依賴關係, 軟件狀態, 等等詳細的內容,一般在 /var/lib/dpkg 目錄下。 一般在 status 文件中存儲軟件狀態和控制信息。 在 info/ 目錄下備份控制文件, 並在其下的 .list 文件中記錄安裝文件清單, 其下的 .mdasums 保存文件的 MD5 編碼。
例:查詢dpkg數據庫(顯示全部已安裝的Deb包)。
lzb@lzb:~$ dpkg -l 指望狀態=未知(u)/安裝(i)/刪除(r)/清除(p)/保持(h) | 狀態=未安裝(n)/已安裝(i)/僅存配置(c)/僅解壓縮(U)/配置失敗(F)/不徹底安裝(H)/觸發器等待(W)/觸發器未決(T) |/ 錯誤?=(無)/須重裝(R) (狀態,錯誤:大寫=故障) ||/ 名稱 版本 體系結構: 描述 +++-==============-============-============-================================= ii a11y-profile-m 0.1.10-0ubun amd64 Accessibility Profile Manager - U ii account-plugin 0.12+16.04.2 all GNOME Control Center account plug ii account-plugin 0.12+16.04.2 all GNOME Control Center account plug ii account-plugin 0.12+16.04.2 all GNOME Control Center account plug ii accountsservic 0.6.40-2ubun amd64 query and manipulate user account ii acl 2.2.52-3 amd64 Access control list utilities ii acpi-support 0.142 amd64 scripts for handling many ACPI ev ii acpid 1:2.0.26-1ub amd64 Advanced Configuration and Power ii activity-log-m 0.9.7-0ubunt amd64 blacklist configuration user inte ii adduser 3.113+nmu3ub all add and remove users and groups ii adium-theme-ub 0.3.4-0ubunt all Adium message style for Ubuntu
ii gir1.2-pango-1 1.38.1-1 amd64 ..............................
..............................................................................
如上圖,每條記錄對應一個軟件包,注意每條記錄的第1、2、三個字符,這就是軟件包的狀態標識,後邊依此是軟件包名稱、版本號和簡單描述。
1)第一字符爲指望值(Desired=Unknown/Install/Remove/Purge/Hold),它包括:
u Unknown狀態未知,這意味着軟件包未安裝,而且用戶也未發出安裝請求. i Install用戶請求安裝軟件包. r Remove用戶請求卸載軟件包. p Purge用戶請求清除軟件包. h Hold用戶請求保持軟件包版本鎖定.
2)第二列,是軟件包的當前狀態(Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend)
n Not軟件包未安裝. i Inst軟件包安裝並完成配置. c Conf-files軟件包之前安裝過,如今刪除了,可是它的配置文件還留在系統中. u Unpacked軟件包被解包,但還未配置. f halF-conf試圖配置軟件包,可是失敗了. h Half-inst軟件包安裝,可是可是沒有成功. w trig-aWait觸發器等待 t Trig-pend觸發器未決
3)第三列標識錯誤狀態,第一種狀態標識沒有問題,爲空. 其它符號則標識相應問題(Err?=(none)/Reinst-required (Status,Err: uppercase=bad))
h 軟件包被強制保持,由於有其它軟件包依賴需求,沒法升級. r Reinst-required,軟件包被破壞,可能須要從新安裝才能正常使用(包括刪除). x 軟包件被破壞,而且被強制保持.
案例說明:
ii —— 表示系統正常安裝了該軟件 pn —— 表示安裝了該軟件,後來又清除了 un —— 表示從未安裝過該軟件 iu —— 表示安裝了該軟件,可是未配置 rc —— 該軟件已被刪除,但配置文件仍在
五、dpkg子命令
爲了方便用戶使用,dpkg不只提供了大量的參數選項, 同時也提供了許多子命令。
好比:
dpkg-deb、dpkg-divert、dpkg-query、dpkg-split、dpkg-statoverride、start-stop-daemon
3、dpkg使用手冊
一、安裝
1)安裝相關命令
dpkg -i package-name.deb // --install, 安裝軟件包,必須是deb包的完整名稱。(軟件的安裝可被拆分爲兩個對立的過程「解包」和「配置」) dpkg --unpack package-name.deb // 「解包」:解開軟件包到系統目錄但不配置,若是和-R一塊兒使用,參數能夠是一個目錄 dpkg --configure package-name.deb //「配置」:配置軟件包 dpkg -c package-name.deb //列出 deb 包的內容
2)安裝相關選項
-R, --recursive Recursively handle all regular files matching pattern *.deb found at specified directories and all of its
subdirectories. This can be used with -i, -A, --install, --unpack and --avail actions(遞歸地指向特定目錄的全部安裝包,能夠結合-i,
-A, --install, --unpack 與 --avail一塊兒使用)
二、移除軟件包
dpkg -r package-name // --remove, 移除軟件包,但保留其配置文件 dpkg -P package-name // --purge, 清除軟件包的全部文件(removes everything, including conffiles)
三、查詢
dpkg -l package-name // --list 查看系統中package-name軟件包 dpkg -L package-name //--listfiles 查看package-name對應的軟件包安裝的文件及目錄 dpkg -s package-name //--status 查看package-name對應的軟件包信息 dpkg -S filename // --search 查詢系統中某個文件屬於哪一個軟件包
dpkg --info package-name.deb //--列出軟件包解包後的包名稱
例1:列出系統上安裝的與dpkg相關的軟件包
dpkg -l \*dpkg*
更多dpkg的使用方法可在命令行裏使用man dpkg來查閱 或直接使用dpkg --help。
3、apt
一、apt簡介
雖然咱們在使用dpkg時,已經解決掉了 軟件安裝過程當中的大量問題,可是當依賴關係不知足時,仍然須要手動解決,而apt這個工具解決了這樣的問題,linux distribution 先將軟件放置到對應的服務器中,而後分析軟件的依賴關係,而且記錄下來,而後當客戶端有安裝軟件需求時,經過清單列表與本地的dpkg已存在的軟件數據相比較,就能從網絡端獲取全部須要的具備依賴屬性的軟件了。
二、工做原理
Ubuntu採用集中式的軟件倉庫機制,將各式各樣的軟件包分門別類地存放在軟件倉庫中,進行有效地組織和管理。而後,將軟件倉庫置於許許多多的鏡像服務器中,並保持基本一致。這樣,全部的Ubuntu用戶隨時都能得到最新版本的安裝軟件包。所以,對於用戶,這些鏡像服務器就是他們的軟件源。
然而,因爲每位用戶所處的網絡環境不一樣,不可能隨意地訪問各鏡像站點。爲了可以有選擇地訪問,在Ubuntu系統中,使用軟件源配置文件/etc/apt/sources.list列出最合適訪問的鏡像站點地址。
1)執行apt-get update 2)程序分析/etc/apt/sources.list 3)自動連網尋找list中對應的Packages/Sources/Release列表文件,若是有更新則下載之,存入/var/lib/apt/lists/目錄 4)而後 apt-get install 相應的包 ,下載並安裝。
即便這樣,軟件源配置文件只是告知Ubuntu系統能夠訪問的鏡像站點地址,但那些鏡像站點具體都擁有什麼軟件資源並不清楚。若每安裝一個軟件包,就在服務器上尋找一遍,效率是很低的。於是,就有必要爲這些軟件資源列個清單(創建索引文件),以便本地主機查詢。
用戶可使用「apt-get update」命令刷新軟件源,創建更新軟件包列表。在Ubuntu Linux中,「apt-get update」命令會掃描每個軟件源服務器,併爲該服務器所具備軟件包資源創建索引文件,存放在本地的/var/lib/apt/lists/目錄中。 使用apt-get執行安裝、更新操做時,都將依據這些索引文件,向軟件源服務器申請資源。所以,在計算機設備空閒時,常用「apt-get update」命令刷新軟件源,是一個好的習慣。
例2:apt-get install原理圖
三、apt相關文件
var/lib/dpkg/available 文件的內容是軟件包的描述信息, 該軟件包括當前系統所使用的Debian 安裝源中的全部軟件包,其中包括當前系統中已安裝的
和未安裝的軟件包. /etc/apt/sources.list 記錄軟件源的地址(當你執行 sudo apt-get install xxx 時,Ubuntu 就去這些站點下載軟件包到本地並執行安裝) /var/cache/apt/archives 已經下載到的軟件包都放在這裏(用 apt-get install 安裝軟件時,軟件包的臨時存放路徑) /var/lib/apt/lists 使用apt-get update命令會從/etc/apt/sources.list中下載軟件列表,並保存到該目錄。
四、源文件
apt的源文件由配置文件/etc/apt/sources.list指定,想要具體瞭解請訪問上一篇博客:
https://www.cnblogs.com/liuzhenbo/p/11069285.html
4、apt使用手冊
一、apt-get
apt-get is the command-line tool for handling packages, and may be considered the user's "back-end" to other tools using the APT library. Several "front-end" interfaces exist, such as dselect(1), aptitude(8), synaptic(8) and wajig(1).
apt-get 是一個下載安裝軟件包的簡單命令行接口。最經常使用的命令是update(更新)和install(安裝)。
用法: apt-get [選項] 命令
經常使用選項:
-h 本幫助文件。 -q 輸出到日誌 - 無進展指示 -qq 不輸出信息,錯誤除外 -d 僅下載 - 不安裝或解壓歸檔文件 -s 不實際安裝。模擬執行命令 -y 假定對全部的詢問選是,不提示 -f 嘗試修正系統依賴損壞處 -m 若是歸檔沒法定位,嘗試繼續 -u 同時顯示更新軟件包的列表 -b 獲取源碼包後編譯 -V 顯示詳細的版本號 -c=? 閱讀此配置文件 -o=? 設置自定的配置選項,如 -o dir::cache=/tmp
經常使用命令:
//查詢適合當前系統和CPU架構的相關軟件包版本
http://manpages.ubuntu.com/manpages/xenial/man1/apt-show-versions.1p.html //查找官方網站
apt-cache madison package_name //將列出版本
apt-cache policy package_name //詳細列出信息
//下載,安裝
1)apt-get update 更新源 2)apt-get dist-upgrade 升級系統到相應的發行版(根據 source.list 的配置)
3)apt-get upgrade 更新全部已經安裝的軟件包 4)apt-get install package_name 安裝軟件包(加上 --reinstall從新安裝) apt-get install package_name=version 安裝指定版本的軟件包
5) apt-get -f install //安裝依賴
例子:
sudo dpkg -i bcloud-x.x.x.deb sudo apt-get -f install
//刪除,卸載
1)apt-get remove package_name //刪除已安裝的軟件包(保留配置文件),不會刪除依賴軟件包,且保留配置文件。 2)apt-get --purge remove package_name //刪除已安裝包(不保留配置文件);如軟件包a依賴軟件包b,執行該命令會刪除a,並且不保留配置文件。
3) //刪除爲了知足依賴而安裝的,但如今再也不須要的軟件包(包括已安裝包),保留配置文件。apt-get autoremove
//清理緩存
1)apt-get autoclean //按期運行這個命令來清除那些已經卸載的軟件包的.deb文件。APT的底層包是dpkg, 而dpkg 安裝Package時, 會將 *.deb 放在 /var/cache/apt/archives/中,apt-get autoclean 只會刪除 /var/cache/apt/archives/ 已通過期的deb。 2)apt-get clean //使用 apt-get clean 會將 /var/cache/apt/archives/ 的全部 deb 刪掉
二、apt-cache
apt-cache是linux下的一個apt軟件包管理工具。APT包管理的大多數信息查詢功能均可以由apt-cache命令實現,經過apt-cache命令配合不一樣的子命令和參數的使用,能夠實現查找,顯示軟件包信息及包依賴關係等功能.
1)apt-cache depends packagename 瞭解使用依賴 2)apt-cache rdepends packagename 是查看該包被哪些包依賴 3)apt-cache search packagename 搜索軟件包,能夠按關鍵字查找軟件包,一般用於查詢的關鍵字會使用軟件包的名字或軟件包的一部分 4)apt-cache show packagename 查詢指定包的詳情,不論是否已經安裝。獲取包的相關信息,如說明、大小、版本等 5)apt-cache showpkg packagename 顯示軟件包的大體信息