----- 最近更新【2022-01-01】-----
一、簡介
前面的一篇文章《Linux深入探索06-軟件管理與安裝(源碼安裝)》詳細介紹了 Linux 平臺下的源碼包安裝原理毅厚,雖然使用源代碼進行軟件編譯可以具有定制化的設(shè)置,但對于Linux的發(fā)行商來說展鸡,則有軟件管理不完的問題,畢竟不是每個人都會進行源代碼編譯的。這個問題將會嚴(yán)重的影響linux平臺上軟件的發(fā)行與推廣扰肌。
為了解決上述的問題厚柳,廠商先在他們的系統(tǒng)上面編譯好了我們用戶所需要的軟件氧枣,然后將這個編譯好并可執(zhí)行的軟件直接發(fā)布給用戶安裝。不同的 Linux 發(fā)行版使用不同的打包系統(tǒng)别垮,一般而言便监,大多數(shù)發(fā)行版分別屬于兩大包管理技術(shù)陣營: Debian 的 “.deb”,和 Red Hat 的 “.rpm”碳想。也有一些例外烧董,比方說 Gentoo、Slackware 和 Foresight胧奔,但大多數(shù)會使用這兩個基本系統(tǒng)中的一個逊移。
本篇文章將要介紹的是 Debian 系列發(fā)行版的 dpkg 與 apt-* 的詳細使用方法,如需要了解 Red Hat 系列發(fā)行版的包管理系統(tǒng)可查看我的另一篇文章:《Linux深入探索07-軟件管理與安裝(RPM與YUM)》龙填。
注:本人系統(tǒng)版本【Ubuntu 12.04 LTS】
二胳泉、dpkg
1拐叉、簡介
dpkg - package manager for Debian (debian系統(tǒng)的包管理工具)。
dpkg 是 Debian 的一個底層包管理工具扇商,主要用于對已下載到本地和已安裝的軟件包進行管理凤瘦。(dpkg is a tool to install, build, remove and manage Debian packages)
dpkg 這個機制最早由 Debian Linux 社區(qū)所開發(fā)出來的,通過 dpkg 的機制案铺,Debian 提供的軟件就能夠簡單的安裝起來蔬芥,同時能提供安裝后的軟件信息,實在非常不錯控汉。派生于 Debian 的其它 Linux distributions 大多都使用 dpkg 這個機制來管理笔诵,包括 B2D,Ubuntu 等姑子。
2乎婿、deb 軟件包命名規(guī)則
deb 軟件包的命名規(guī)則為:Package_Version-Build_Architecture.deb
如:nano_1.3.10-2_i386.deb
nano -- 軟件包名稱(Package Name)
1.3.10 -- 版本號(Version Number)
2 -- 修訂號(Build Number)
i386 -- 平臺(Architecture)
3、dpkg軟件包相關(guān)文件介紹
/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
存放系統(tǒng)所有安裝過的軟件包信息【List of available packages.】
/var/lib/dpkg/status
存放系統(tǒng)現(xiàn)在所有安裝軟件的狀態(tài)信息
/var/lib/dpkg/info
記錄安裝軟件包控制目錄的控制信息文件
4壁酬、dpkg數(shù)據(jù)庫
dpkg 使用文本文件作為數(shù)據(jù)庫來維護系統(tǒng)中軟件次酌,包括文件清單、依賴關(guān)系舆乔、軟件狀態(tài)等等詳細的內(nèi)容岳服,通常在/var/lib/dpkg
目錄下。 通常在 status
文件中存儲軟件狀態(tài)和控制信息希俩。 在 info/
目錄下備份控制文件吊宋, 并在其下的.list
文件中記錄安裝文件清單, 其下的.mdasums
保存文件的 MD5 編碼颜武。
例:查詢dpkg數(shù)據(jù)庫(顯示所有已安裝的Deb包)
上圖每條記錄對應(yīng)一個軟件包璃搜,注意每條記錄的第一、二鳞上、三個字符摔竿,這就是軟件包的狀態(tài)標(biāo)識呆盖,后邊依此是軟件包名稱、版本號和簡單描述。
1)第一字符為期望值(Desired=Unknown/Install/Remove/Purge/Hold)柄驻,它包括:
u Unknown狀態(tài)未知,這意味著軟件包未安裝,并且用戶也未發(fā)出安裝請求.
i Install用戶請求安裝軟件包.
r Remove用戶請求卸載軟件包.
p Purge用戶請求清除軟件包.
h Hold用戶請求保持軟件包版本鎖定.
2)第二列入蛆,是軟件包的當(dāng)前狀態(tài)(Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend)
n Not軟件包未安裝.
i Inst軟件包安裝并完成配置.
c Conf-files軟件包以前安裝過,現(xiàn)在刪除了,但是它的配置文件還留在系統(tǒng)中.
u Unpacked軟件包被解包,但還未配置.
f halF-conf試圖配置軟件包,但是失敗了.
h Half-inst軟件包安裝,但是但是沒有成功.
w trig-aWait觸發(fā)器等待
t Trig-pend觸發(fā)器未決
3)第三列標(biāo)識錯誤狀態(tài)吧秕,第一種狀態(tài)標(biāo)識沒有問題始赎,為空。 其它符號則標(biāo)識相應(yīng)問題(Err?=(none)/Reinst-required (Status,Err: uppercase=bad))
h 軟件包被強制保持,因為有其它軟件包依賴需求,無法升級.
r Reinst-required这难,軟件包被破壞,可能需要重新安裝才能正常使用(包括刪除).
x 軟包件被破壞,并且被強制保持.
狀態(tài)標(biāo)識案例說明:
ii —— 表示系統(tǒng)正常安裝了該軟件
pn —— 表示安裝了該軟件舟误,后來又清除了
un —— 表示從未安裝過該軟件
iu —— 表示安裝了該軟件,但是未配置
rc —— 該軟件已被刪除姻乓,但配置文件仍在
5嵌溢、dpkg 子命令
為了方便用戶使用眯牧,dpkg 不僅提供了大量的參數(shù)選項, 同時也提供了許多子命令。
比如:dpkg-deb
赖草、dpkg-divert
炸站、dpkg-query
、dpkg-split
疚顷、dpkg-statoverride
、start-stop-daemon
這里無法對每個 dpkg 的子命令作詳細介紹禁偎,如需了解可自行查閱資料腿堤。
三、dpkg 使用手冊
1如暖、安裝
1)安裝相關(guān)命令
dpkg -i package-name.deb
--install笆檀,安裝軟件包,必須是deb包的完整名稱盒至。(軟件的安裝可被拆分為兩個對立的過程“解包”和“配置”)
dpkg --unpack package-name.deb
“解包”:解開軟件包到系統(tǒng)目錄但不配置,如果和-R
一起使用酗洒,參數(shù)可以是一個目錄
dpkg --configure package-name.deb
“配置”:配置軟件包
dpkg -c package-name.deb
列出 deb 包的內(nèi)容
2)安裝相關(guān)選項
-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(遞歸地指向特定目錄的所有安裝包枷遂,可以結(jié)合-i
, -A
, --install
, --unpack
與--avail
一起使用)
2樱衷、移除軟件包
dpkg -r package-name
--remove, 移除軟件包酒唉,但保留其配置文件
dpkg -P package-name
--purge矩桂, 清除軟件包的所有文件(removes everything, including conffiles)
3、查詢
dpkg -l package-name-pattern
--lis痪伦,查看系統(tǒng)中軟件包名符合 pattern 模式的軟件包
dpkg -L package-name
--listfiles侄榴,查看 package-name 對應(yīng)的軟件包安裝的文件及目錄
dpkg -p package-name
--print-avail,顯示包的具體信息
dpkg -s package-name
--status网沾,查看 package-name(已安裝)對應(yīng)的軟件包信息
dpkg -S filename-search-pattern
--search癞蚕,從已經(jīng)安裝的軟件包中查找包含filename的軟件包名稱
Tip:也可使用子命令dpkg-query
來進行查詢操作
案例:
# 例1:列出系統(tǒng)上安裝的與 dpkg 相關(guān)的軟件包
dpkg -l \*dpkg*
# 例2:查看 dpkg 軟件包安裝到系統(tǒng)中的文件
dpkg -L dpkg
更多 dpkg 的使用方法可在命令行里使用man dpkg
來查閱 或直接使用dpkg --help
。
四辉哥、apt
1桦山、apt 簡介
雖然我們在使用 dpkg 時,已經(jīng)解決掉了軟件安裝過程中的大量問題证薇,但是當(dāng)依賴關(guān)系不滿足時度苔,仍然需要手動解決,而 apt 這個工具解決了這樣的問題浑度。linux 先將軟件放置到對應(yīng)的服務(wù)器中寇窑,然后分析軟件的依賴關(guān)系,并且記錄下來箩张,然后當(dāng)客戶端有安裝軟件需求時甩骏,通過清單列表與本地的 dpkg 已存在的軟件數(shù)據(jù)相比較窗市,就能從網(wǎng)絡(luò)端獲取所有需要的具有依賴屬性的軟件了。
2饮笛、工作原理
Ubuntu 采用集中式的軟件倉庫機制咨察,將各式各樣的軟件包分門別類地存放在軟件倉庫中,進行有效地組織和管理福青。然后摄狱,將軟件倉庫置于許許多多的鏡像服務(wù)器中,并保持基本一致无午。這樣媒役,所有的 Ubuntu 用戶隨時都能獲得最新版本的安裝軟件包。因此宪迟,對于用戶酣衷,這些鏡像服務(wù)器就是他們的軟件源(Reposity)
然而,由于每位用戶所處的網(wǎng)絡(luò)環(huán)境不同次泽,不可能隨意地訪問各鏡像站點穿仪。為了能夠有選擇地訪問,在Ubuntu系統(tǒng)中意荤,使用軟件源配置文件/etc/apt/sources.list
列出最合適訪問的鏡像站點地址啊片。
工作原理1:apt-get 的更新過程
1)執(zhí)行apt-get update
2)程序分析 /etc/apt/sources.list
3)自動連網(wǎng)尋找 list 中對應(yīng)的 Packages/Sources/Release 列表文件,如果有更新則下載袭异,存入 /var/lib/apt/lists/ 目錄
4)然后apt-get install
相應(yīng)的包 钠龙,下載并安裝。
即使這樣御铃,軟件源配置文件只是告知 Ubuntu 系統(tǒng)可以訪問的鏡像站點地址碴里,但那些鏡像站點具體都擁有什么軟件資源并不清楚。若每安裝一個軟件包上真,就在服務(wù)器上尋找一遍咬腋,效率是很低的。因而睡互,就有必要為這些軟件資源列個清單(建立索引文件)根竿,以便本地主機查詢。
用戶可以使用apt-get update
命令刷新軟件源就珠,建立更新軟件包列表寇壳。在 Ubuntu Linux 中,apt-get update
命令會掃描每一個軟件源服務(wù)器妻怎,并為該服務(wù)器所具有軟件包資源建立索引文件壳炎,存放在本地的/var/lib/apt/lists/
目錄中。 使用apt-get
執(zhí)行安裝逼侦、更新操作時匿辩,都將依據(jù)這些索引文件腰耙,向軟件源服務(wù)器申請資源。因此铲球,在計算機設(shè)備空閑時挺庞,經(jīng)常使用apt-get update
命令刷新軟件源,是一個好的習(xí)慣稼病。
工作原理2:apt-get install 原理圖
3选侨、apt 相關(guān)文件
-
var/lib/dpkg/available
文件的內(nèi)容是軟件包的描述信息, 該軟件包括當(dāng)前系統(tǒng)所使用的 Debian 安裝源中的所有軟件包,其中包括當(dāng)前系統(tǒng)中已安裝的和未安裝的軟件包. -
/etc/apt/sources.list
記錄軟件源的地址(當(dāng)你執(zhí)行sudo apt-get install xxx
時然走,Ubuntu 就去這些站點下載軟件包到本地并執(zhí)行安裝) -
/var/cache/apt/archives
已經(jīng)下載到的軟件包都放在這里(用apt-get install
安裝軟件時侵俗,軟件包的臨時存放路徑) -
/var/lib/apt/lists
使用apt-get update
命令會從/etc/apt/sources.list
中下載軟件列表,并保存到該目錄
4丰刊、源文件
apt 的源文件由配置文件/etc/apt/sources.list
指定,該配置文件內(nèi)容如下圖所示:
感興趣的可以用瀏覽器打開上面的鏈接去看看增拥,鏡像服務(wù)器的存放位置如:
通過解壓Packages.gz
后我們可以看到所有軟件包的基本信息啄巧,并且Packages.gz 已經(jīng)包含所有所依賴的軟件及其版本信息、以及下載地址掌栅。
五秩仆、apt使用手冊
1、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
是一個處理軟件包的簡單命令行工具猾封。最常用的參數(shù)是update
(更新)和install
(安裝)澄耍。
用法: apt-get [選項] 參數(shù)
常用選項:
-h
查看幫助文件。
-q
輸出到日志 - 無進展指示
-qq
不輸出信息晌缘,錯誤除外
-d
僅下載 - 不安裝或解壓歸檔文件
-s
不實際安裝齐莲。模擬執(zhí)行命令
-y
假定對所有的詢問選是,不提示
-f
嘗試修正系統(tǒng)依賴損壞處
-m
如果歸檔無法定位磷箕,嘗試?yán)^續(xù)
-u
同時顯示更新軟件包的列表
-b
獲取源碼包后編譯
-V
顯示詳細的版本號
-c
閱讀此配置文件
-o
設(shè)置自定的配置選項选酗,如 -o dir::cache=/tmp
常用命令:
1)更新源:
apt-get update
2)升級系統(tǒng)到相應(yīng)的發(fā)行版(根據(jù) source.list 的配置):
apt-get dist-upgrade
3)更新所有已經(jīng)安裝的軟件包:
apt-get upgrade
4)安裝軟件包(加上選項--reinstall
表示重新安裝):
apt-get install package_name
apt-get install package_name=version
(安裝指定版本的軟件包)
5)卸載一個已安裝的軟件包(保留配置文件):
apt-get remove package_name
6)移除軟件包(刪除配置信息):
apt-get purge package_name
apt-get --purge remove packagename
7)檢查是否有損壞的依賴:
apt-get check
8)清除你已經(jīng)刪掉的軟件的相關(guān)文件:
apt-get autoclean
(定期運行這個命令來清除那些已經(jīng)卸載的軟件包的.deb文件。通過這種方式岳枷,您可以釋放大量的磁盤空間芒填。如果您的需求十分迫切,可以使用apt-get clean
以釋放更多空間空繁。這個命令會將已安裝軟件包裹的.deb文件一并刪除殿衰。大多數(shù)情況下您不會再用到這些.deb文件,因此如果您為磁盤空間不足 而感到焦頭爛額盛泡,這個辦法也許值得一試)
9)把安裝的軟件的備份也刪除闷祥,不過這樣不會影響軟件的使用
apt-get clean
2、apt-cache
apt-cache —— query the APT cache.
apt-cache performs a variety of operations on APT's package cache. apt-cache does not manipulate the state of the system but does provide operations to search and generate interesting output from the package metadata.
1)apt-cache depends packagename
了解使用依賴
2)apt-cache rdepends packagename
是查看該包被哪些包依賴
3)apt-cache search packagename
搜索包
4)apt-cache show packagename
獲取包的相關(guān)信息饭于,如說明蜀踏、大小维蒙、版本等
5)apt-cache showpkg packagename
顯示軟件包的大致信息
Debian類系統(tǒng)還有一個類似于 apt-* 的一個包管理上層工具:aptitude,感興趣也可以去試試
參考:
開源鏡像站:
-- 阿里:http://mirrors.aliyun.com/
-- 網(wǎng)易:http://mirrors.163.com/
書籍:
-- 《The Linux Command Line》William E. Shotts, Jr.
官方網(wǎng)站:
-- Ubuntu官方網(wǎng)站:https://www.ubuntu.com
-- Debian官方網(wǎng)站:https://www.debian.org/doc/user-manuals
-- https://www.debian.org/doc/manuals/debian-handbook/apt.zh-cn.html
個人博客:http://blog.csdn.net/astraylinux/article/details/7039744
阿里云開源鏡像站還是挺全面的果覆。各種常用工具的鏡像也有颅痊,如 Docker、Composer局待,國內(nèi)推薦斑响。