五、學習筆記-Linux軟體包管理(1)
流行的兩種軟體包管理機制
(1)Debian Linux首先提出“軟體包”的管理機制—Deb軟體包
將應用程式的二進位制檔案、配置檔案、man/info幫助頁面等檔案合併打包在一個檔案中,使用者使用軟體包管理器直接操作軟體包,完成獲取、安裝、解除安裝、查詢等操作。
(2)Redhat Linux基於這個理念推出了自己的軟體包管理機制—Rpm軟體包
(3)隨著Linux作業系統規模不斷擴大,系統中軟體包間複雜的依賴關係,導致Linux使用者麻煩不斷
(4)Debian Linux開發出了APT軟體包管理器。
1)檢查和修復軟體包依賴關係
2)利用Internet網路幫助使用者主動獲取軟體包
(5)APT工具再次促進了Deb軟體包更為廣泛地使用,成為Debian Linux的一個無法替代的亮點。
軟體包分類
Ubuntu有兩種型別的軟體包 :二進位制軟體包(deb)和原始碼包(deb-src)
- 二進位制軟體包(Binary Packages):它包含可執行檔案、庫檔案、配置檔案、man/info頁面、版權宣告和其它文件。
- 原始碼包(Source Packages):包含軟體原始碼、版本修改說明、構建指令以及編譯工具等。先由tar工具歸檔為.tar.gz檔案,然後再打包成.dsc檔案。
在使用者不確定一個軟體包型別時,可以使用file命令檢視檔案型別。
Ubuntu有兩種型別的軟體包:二進位制軟體包(deb)和原始碼包(deb-src)
二進位制軟體包(Binary Packages):它包含可執行檔案、庫檔案、配置檔案、man/info頁面、版權宣告和其它文件。
原始碼包(Source Packages):包含軟體原始碼、版本修改說明、構建指令以及編譯工具等。先由tar工具歸檔為.tar.gz檔案,然後再打包成.dsc檔案。
在使用者不確定一個軟體包型別時,可以使用file命令檢視檔案型別。
[email protected]:~$ file g++_4%3a4.6.3-1ubuntu5_i386.deb
g++_4%3a4.6.3-1ubuntu5_i386.deb: Debian binary package (format 2.0)
軟體包命名
Filename_Version-Reversion_Architecture.deb
Filename :代表軟體的名稱
Version:代表軟體版本
Reversion:代表修訂版本
Architecture:代表體系結構
常用軟體包管理工具
類別 | 常用工具舉例 | 描述 |
---|---|---|
命令列 | dpkg-deb、dpkg、apt | 在命令列模式下完成軟體包管理任務。為完成軟體包的獲取、查詢、軟體包依賴性檢查、安裝、解除安裝等任務,需要使用各自不同的命令 |
文字視窗介面 | dselest、aptitude、tasksel | 在文字視窗模式中、使用視窗和選單可以完成軟體包管理任務 |
圖形介面 | synaptic | 在 X-Window圖形桌面環境中執行,具有更好的互動性、可讀性、易用性等特點 |
dpkg是最早的Deb包管理工具,它在Debian一提出包管理模式後就誕生了。使用dpkg可以實現軟體包的安裝、編譯、解除安裝、查詢,以及應用程式打包等功能。但是由於當時Linux系統規模和Internet網路條件的限制,開發人員沒有考慮到作業系統中軟體包存在如此複雜的依賴關係,以及幫助使用者獲取軟體包(獲取存在依賴關係的軟體包)。為了解決軟體包依賴性問題和獲取問題,就出現了APT工具。
dpkg相關命令
dpkg -i :安裝一個在本地檔案系統上存在的Debian軟體包。
dpkg -r :移除一個已經安裝的軟體包
dpkg -P :移除已安裝軟體包及配置檔案
dpkg -L :列出安裝的軟體包清單
dpkg -S :顯示軟體包的安裝狀態
dpkg -reconfigure :重新配置一個已經安裝的軟體包。
軟體包優先順序
類別 | 含義 | 補充說明 |
---|---|---|
Required(必須) | 該級別軟體包是保證系統正常執行所必須的 | 包含所有必要的系統工具。儘管Require級別的軟體不能滿足整個系統的服務,但至少能夠保證系統正常啟動。如果刪除其中一個軟體包,系統將受到損壞而無法恢復,例如bash、mount、upstart |
Important(重要) | 若缺少該級別軟體包,系統會執行困難或不好操作 | 該級別軟體包是一些實現系統底層功能的程式,例如aptitude、ubuntu-keyring、cpio |
Standard(基本) | 該級別軟體包是任何Linux系統的標準件 | 該級別的軟體包可以支撐命令列控制檯系統執行。通常作為預設安裝選項,例如 memtest86、telnet、pppconfig、ed |
Optional(可選) | 該級別軟體包是否安裝不影響系統的正常執行 | 該級別的軟體包用於滿足使用者特定的需求或服務。它們不會影響系統的正常執行,例如 X11、mysql、openoffic.org |
Extra(額外) | 該級別軟體包可能與其他高級別軟體包存在衝突 |
軟體包的狀態
(1)期望狀態:標記使用者希望將某個軟體包處於的狀態。
(2)當前狀態:標記使用者操作該軟體包後的最終狀態。
類別 | 狀態 | 狀態符 | 描述 |
期望狀態 | 未知(unknown) | u | 使用者並沒描述他想對軟體包進行什麼操作 |
已安裝(install) | i | 該軟體包已安裝或升級 | |
刪除(remove) | r | 軟體包已刪除,但不想刪除任何配置檔案 | |
清除(purge) | p | 使用者希望完全刪除軟體包,包括配置檔案 | |
保持(hold) | h | 使用者希望軟體包保持現狀,例如,使用者希望保持當前的版本、當前的狀態 | |
當前狀態 | 未安裝(Not) | n | 該軟體包描述資訊已知,但仍未在系統中安裝 |
已安裝(installed) | i | 已完全安裝和配置了該軟體包 | |
僅存配置(config-file) | c | 軟體包已刪除,但配置檔案仍保留在系統中 | |
僅解壓縮(Unpacked) | U | 已將軟體包中的所有檔案釋放,但尚未執行安裝和配置 | |
配置失敗(Failed-config) | F | 曾嘗試安裝改軟體包,但由於錯誤沒有完成安裝 | |
不完全安裝(Half-installed) | H | 已開始進行提取後的 配置工作,但由於錯誤沒有完全安裝 |
軟體包的依賴性關係
依賴關係 | 關係描述 |
---|---|
依賴(depends) | 要執行軟體包A必須安裝軟體包B,甚至還依賴於B的特定版本。通常版本依賴有最低版本限制 |
推薦(recommends) | 軟體包維護者認為所有使用者都不會喜歡缺少軟體包A的某些功能,而這些功能需要B來提供 |
建議(suggests) | 軟體包B能夠增強軟體包A的功能 |
替換( replaces) | 軟體包B安裝的檔案被軟體包A中的檔案刪除或覆蓋了 |
衝突(conflicts) | 如果系統中安裝了軟體包B,那麼軟體包A將無法執行。“Conflicts”常和“replaces”同時出現 |
提供(provides) | 軟體包A中包含了軟體包B中的所有檔案和功能 |
獲取系統中已安裝軟體包的資訊
(1)檢視當前系統中已經安裝的軟體包資訊可使用dpkg-l命令。“dpkg-l”命令可以與less和grep命令配合使用。
sudo gpkg -l vim
sudo gpkg -l | less
(2)查詢系統已經安裝的指定軟體包的詳細資訊(dpkg -s)
sudo gpkg -s vim
(3)顯示指定名稱的軟體包安裝到系統中的檔案列表(dpkg -L)
sudo dpkg -L vim
(4)查詢系統中的某個檔案屬於哪個軟體包(dpkg -S)
(5)檢視Deb包中包含的檔案列表(dpkg -c)