apt-get source 包名 # 獲取源碼
dpkg --info deb包名 # 查看包信息
apt-cache show 包名 # 包信息(含有Depends、Suggests、Section、Priority、Mirror路徑)
apt-cache depends 包名 # 查看包的依賴信息
apt-cache rdepends 包名 # 查看什麼包以來它
dpkg -l # 列出全部已安裝的包 --list
dpkg -L 包名 # 列出包安裝到磁盤的全部文件路徑(--listfiles)
dpkg -S 文件名 # 查詢文件所屬的包名(--search)
dpkg -s 包名 # 包狀態(包有什麼配置文件等信息 --status)
update-alternatives # 修改虛擬軟件包中的首選軟件
update-alternatives --display x-www-browser #列出x-www-browser默認使用什麼
update-alternatives --config x-www-browser #修改默認瀏覽器
aptitude why <regex> # 解釋爲何須要這個包
apt install /path/to/<package_filename>.deb 安裝本地軟件包到系統中,同時嘗試自動解決依賴
aptitude hold/unhold 包名 # 保持/解除保持 包的當前版本(hold只是忽略safe-upgrade or full-upgrade,keep則忽略包的任何操做)
echo "包名 hold" |dpkg --set-selections #保持當前版 html
aptitude search [前綴]<正則> #貌似比apt-cache search 強大
前綴以下:
~n 包名符合regex
~d 描述符合regex
~t 軟件集名稱(task)
~G 匹配標籤<Tag>
~v 虛擬軟件包符合regex
~i 已安裝符合regex
~M 自動安裝
~i!~M 管理員選擇安裝的包(不含自動安裝)linux
下載chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb正則表達式
Debian 軟件包管理系統依賴聲明,它描述了這一事實:一些軟件包須要其它軟件包被安裝才能正常運行或運行得更好。
軟件包 A 依賴(depends)軟件包 B:要運行A必須安裝 B。在有些狀況下,A 不只依賴 B,還要求 B 的特定版本。版本依賴一般有最低版本限制,A 更依賴於B的最新版而非某個特定版本。
軟件包 A 推薦(recommends)軟件包 B:軟件包維護者認爲全部用戶都不會喜歡缺乏某些功能的 A,而這些功能須要 B 來提供。
軟件包 A 建議(suggests)軟件包 B:B 中某些文件與 A 的功能相關,並可以加強 A 的功能。這種關係經過聲明軟件包 B 加強 Enhances 軟件包 A 來表示。
軟件包 A 與軟件包 B 衝突(conflicts):若是系統中安裝了 B 那麼 A 沒法運行。「Conflicts」常和「replaces」同時出現。
軟件包 A 替換(replaces)軟件包 B:B 安裝的文件被 A 中的文件移除和覆蓋了。
軟件包 A 提供(provides)軟件包 B:A 中包含了 B 中的全部文件和功能。
上述術語使用方法的更詳細的信息參閱 Packaging Manual 和 the Policy Manual。
注意,dselect 能夠對 recommends 和 suggests 類軟件包進行更細粒度的操做,apt-get 只會簡單的下載安裝 depends 類軟件包而無論 recommends 和 suggests 類軟件包。這兩個程序均正式使用 APT 做爲其後端。chrome
2.2.9 何爲「Pre-depends」
dpkg 老是在配置一個有依賴關係的包以前,先對被依賴的包進行配置。 然而,dpkg 一般將歸檔文件隨意解包,不顧依賴性。 (從歸檔文件中解包並提取文件,將他們放置到正確的位置。) 若是是 Pre-Depends 包,則在所依賴的其它包被解包和配置以前, Pre-Depends 包不會被解包。 [2] 使用這種依賴的目的是爲了將依賴複雜性降至最低。shell
2.2.10 軟件包狀態
軟件包有各類狀態:「unknown」,「install」,「remove」,「purge」和「hold」。這些「但願」標記描述了用戶打算如何操做這些軟件包(既可使用 dselect 的「Select」菜單,也能夠直接調用 dpkg)。
它們的意思是:
unknown - 用戶並沒描述他想對軟件包進行什麼操做。
install - 用戶但願對軟件包進行安裝或升級。
remove - 用戶但願刪除軟件包,但不想刪除任何已有的配置文件。
purge - 用戶但願徹底刪除軟件包,包括配置文件。
hold - 用戶但願軟件包保持現狀,例如,用戶但願保持當前的版本,當前的狀態,當前的一切。後端
2.3.5 下載和緩存 .deb 文件
若是你手工下載包文件到硬盤(這徹底沒有必要,請閱讀上面有關 dpkg-ftp 或 APT 的內容),當你完成軟件包安裝工做後,能夠從系統中刪除 .deb 文件。瀏覽器
若是是使用 APT,這些文件會緩存在 /var/cache/apt/archives/ 目錄中。你能夠在完成安裝後刪除它們(apt-get clean)或者將它們拷貝到另外一個機器的 /var/cache/apt/archives/ 目錄中以備之後的安裝。緩存
**** 很重要的目錄 /var/lib/dpkg/info/ ********
若是隻是用 aptitude(它不訪問源代碼相關的元數據),「deb-src」那行能夠安全地刪掉(或者在文件開頭添加 「#」 來將它註釋掉)。這能夠加速檔案庫元數據的更新。安全
https://www.debian.org/doc/manuals/debian-reference/ch02.zh-cn.html
檔案庫 URL 套件名(代號) 目的
http://deb.debian.org/debian/ stable (stretch) stable (stretch) release 版本
http://deb.debian.org/debian/ testing (buster) testing (buster) release 版本
http://deb.debian.org/debian/ unstable (sid) unstable (sid) release 版本
http://deb.debian.org/debian/ experimental experimental pre-release 版本(可選,只適用於開發者)
http://deb.debian.org/debian/ stable-proposed-updates 用於下一個穩定版本的更新(可選)
http://security.debian.org/ stable/updates 用於 stable release 版本的安全更新(重要)
http://security.debian.org/ testing/updates 用於 testing release 版本的安全更新(重要)
http://deb.debian.org/debian/ stretch-updates 用於 stretch 的垃圾郵件過濾器、IM客戶端等的兼容更新
http://deb.debian.org/debian/ stretch-backports 用於 stretch 的較新的 backported 軟件包(可選)
只有帶有安全更新的純淨的 stable release 版本能夠提供最佳的穩定性。運行大多數 stable release 版本的軟件包之中混合一些來自 testing 或 unstable release 版本的軟件包會比運行純淨的 unstable release 版本冒更大的風險,這是由於庫版本的不匹配致使的。若是在 stable release 版本下你真的須要一些程序的最新版本,請使用來自 stretch-updates 和 http://backports.debian.org (參見 第 2.7.4 節 「更新和向後移植」)的軟件包。使用這些軟件包時必須額外當心。ide
區域 軟件包數量 軟件包組件標準
main 57346 聽從 Debian 自由軟件指導方針(DFSG),而且不依賴於 non-free
contrib 341 聽從 Debian 自由軟件指導方針(DFSG),但依賴於 non-free
non-free 540 不聽從 Debian 自由軟件指導方針(DFSG)
不建議在新版本發佈後在 stable Debian 系統上使用 aptitude 命令來進行跨版本的系統升級。
建議使用"apt full-upgrade"或「apt-get dist-upgrade」 來進行這個操做。參見 Bug #411280。
aptitude命令有時候會爲了testing 或 unstable Debian 系統升級清除大量軟件包。
這個狀況嚇壞了許多的系統管理員。請不要驚慌。
這彷佛大多數是由元軟件包的依賴或推薦的軟件包版本誤差形成的,例如 gnome-core。
要解決這個問題,能夠在 aptitude 命令菜單中選擇 「取消待執行的動做」 ,退出 aptitude,並使用 「apt full-upgrade」。
apt-get 和 apt-cache 是最基礎 的基於 APT 的軟件包管理工具。
apt-get 和 apt-cache 只提供命令行用戶界面。
apt-get 是進行跨版本的主系統升級等操做的最合適工具。
apt-get 提供了一個強大的軟件包依賴解析器。
apt-get 對硬件資源的要求不高。它消耗更少的內存而且運行速度更快。
apt-cache 提供了一個 標準的正則表達式來搜索軟件包名稱和描述。
apt 命令是一個用於軟件包管理的高級命令行界面。它基本上是 apt-get、apt-cache 和相似命令的一個封裝,被設計爲針對終端用戶交互的界面,它默認啓用了某些適合交互式使用的選項。
apt 工具在用戶使用 apt install 安裝軟件包時提供了一個友好的進度條。
在成功安裝下載的軟件包後,apt 將默認刪除緩存的 .deb 軟件包。
[提示] 提示
建議用戶使用新的 apt(8) 命令用於 交互式的使用場景,而在 shell 腳本中使用 apt-get(8) 和apt-cache(8) 命令。
aptitude 命令是最通用的基於 APT 的軟件包管理工具。
aptitude 提供了一個全屏的交互式文本用戶界面。
aptitude 一樣也提供了一個命令用戶界面。
aptitude 是用於平常軟件包管理(例如檢查已安裝的軟件包和搜索可用的軟件包)的最合適工具。
aptitude 對硬件資源的要求更高。它消耗更多的內存而且運行速度更慢。
aptitude 提供一個加強的正則表達式來搜索全部的軟件包元數據。
aptitude 能夠管理軟件包的多個版本,而且不使用 /etc/apt/preferences,這會十分直觀。
2.2.2
apt 語法 aptitude 語法 apt-get / apt-cache 語法 說明
apt update aptitude update apt-get update 更新軟件包檔案庫元數據
apt install foo aptitude install foo apt-get install foo 安裝 「foo」 軟件包的候選版本以及它的依賴
apt upgrade aptitude safe-upgrade apt-get upgrade 安裝已安裝的軟件包的候選版本而且不移除任何其它的軟件包
apt full-upgrade aptitude full-upgrade apt-get dist-upgrade 安裝已安裝的軟件包的候選版本,而且須要的話會移除其它的軟件包
apt remove foo aptitude remove foo apt-get remove foo 移除 「foo」 軟件包,但留下配置文件
apt autoremove N/A apt-get autoremove 移除再也不須要的自動安裝的軟件包
apt purge foo aptitude purge foo apt-get purge foo 清除 「foo」 軟件包的配置文件
apt clean aptitude clean apt-get clean 徹底清除本地倉庫的軟件包檢索文件
apt autoclean aptitude autoclean apt-get autoclean 清除本地倉庫中過期軟件包的軟件包檢索文件
apt show foo aptitude show foo apt-cache show foo 顯示 「foo」 軟件包的詳細信息
apt search <正則表達式> aptitude search <regex> apt-cache search <regex> 搜索匹配 <regex> 的軟件包
N/A aptitude why <regex> N/A 解釋匹配 <regex> 的軟件包必須被安裝的緣由
N/A aptitude why-not <regex> N/A 解釋匹配 <regex> 的軟件包沒必要安裝的緣由
N/A aptitude search '~i!~M' apt-mark showmanual 列出手動安裝的軟件包
2.2.7. aptitude 正則表達式
aptitude 正則表達式是類 mutt 的拓展 ERE(參見 第 1.6.2 節 「正則表達式」),aptitude 具體的特殊匹配規則擴展以下。
表 2.11. aptitude 正則表達式
擴展匹配規則描述 正則表達式
匹配軟件包名稱 ~n<regex_name>
匹配描述 ~d<regex_description>
匹配軟件集名稱 ~t<regex_task>
匹配 debtag ~G<regex_debtag>
匹配維護者 ~m<regex_maintainer>
匹配軟件包的 section ~s<regex_section>
匹配軟件包版本 ~V<regex_version>
匹配檔案庫 ~A{stretch,buster,sid}
匹配來源 ~O{debian,…}
匹配優先級 ~p{extra,important,optional,required,standard}
匹配必要的軟件包 ~E
匹配虛擬軟件包 ~v
匹配新的軟件包 ~N
匹配待執行的動做 ~a{install,upgrade,downgrade,remove,purge,hold,keep}
匹配已安裝軟件包 ~i
匹配帶有 A 標籤的已安裝軟件包(自動安裝的軟件包) ~M
匹配不帶有 A 標籤的已安裝軟件包(管理員選擇的軟件包) ~i!~M
匹配已安裝而且是可升級的軟件包 ~U
匹配已刪除但未清除的軟件包 ~c
匹配已移除,已清除或可移除的軟件包 ~g
匹配破壞依賴關係的軟件包 ~b
匹配破壞 <type> 依賴關係的軟件包 ~B<類型>
匹配 <pattern> 軟件包的 <type> 依賴關係 ~D[<類型>:]<模式>
匹配 <pattern> 軟件包破壞的 <type> 依賴關係 ~DB[<類型>:]<模式>
匹配依賴於 <pattern> 軟件包的 <type> 依賴的軟件包 ~R[<類型>:]<模式>
匹配依賴於 <pattern> 軟件包破壞的 <type> 依賴的軟件包 ~RB[<類型>:]<模式>
匹配其它已安裝軟件包所依賴的軟件包 ~R~i
匹配沒有被其它已安裝軟件包所依賴的軟件包 !~R~i
匹配其它已安裝軟件包所依賴或建議安裝的軟件包 ~R~i|~R推薦:~i
匹配 <pattern> 過濾版本以後的軟件包 ~S 過濾 <模式>
匹配全部軟件包(真) ~T
不匹配軟件包(假) ~F
2.3.3. 完整地清理已刪除軟件包
您能清除全部已移除軟件包的剩餘配置文件。
檢查如下命令的結果。
# aptitude search '~c'
若是您確認所列出的軟件包應當被完整刪除,請運行如下命令。
# aptitude purge '~c'
您可能想要在交互模式中作相似的操做進行細粒度的控制。
2.4. 高級軟件包管理操做
2.4.1. 命令行中的高級軟件包管理操做
下面列出了一些其它的軟件包管理操做,這些操做對於 aptitude 過於高級或缺失所需的功能。
表 2.13. 高級軟件包管理操做
命令 操做
COLUMNS=120 dpkg -l <package_name_pattern> 列出已安裝軟件包的列表用於錯誤報告
*dpkg -L <package_name> 顯示一個已安裝軟件包的內容 (軟件包包含什麼文件或目錄)
dpkg -L <package_name> | egrep '/usr/share/man/man.*/.+' 列出一個已安裝軟件包的 man 手冊頁
*dpkg -S <file_name_pattern> 列出匹配文件名的已安裝軟件包(查詢一個文件屬於哪一個包)
apt-file search <file_name_pattern> 列出檔案庫中匹配文件名的軟件包
apt-file list <package_name_pattern> 列出檔案庫中匹配的軟件包的內容
dpkg-reconfigure <package_name> 從新配置軟件包
dpkg-reconfigure -p=low <package_name> 經過最詳細的方式來從新配置軟件包
configure-debian 以全屏菜單的形式從新配置軟件包
dpkg --audit 部分安裝軟件包的審計系統
dpkg --configure -a 配置全部部分安裝的軟件包
*apt-cache policy <binary_package_name> 顯示一個二進制軟件包的可用版本、優先級和檔案庫信息
apt-cache madison <package_name> 顯示一個軟件包的可用版本和檔案庫信息
apt-cache showsrc <binary_package_name> 顯示一個二進制軟件包的源代碼軟件包信息
apt-get build-dep <package_name> 安裝構建軟件包所須要的軟件包
aptitude build-dep <package_name> 安裝構建軟件包所須要的軟件包
*apt-get source <package_name> (從標準檔案庫)下載源代碼
dget <URL for dsc file> (從其它檔案庫)下載源代碼軟件包
dpkg-source -x <package_name>_<version>-<debian_version>.dsc 從源代碼軟件包集合(「*.orig.tar.gz」 和 「*.debian.tar.gz"/"*.diff.gz」)中構建代碼樹
debuild binary 從本地的源代碼樹中構建軟件包
make-kpkg kernel_image 從內核源代碼樹中構建一個內核軟件包
make-kpkg --initrd kernel_image 從啓用了 initramfs 的內核代碼樹中構建一個內核軟件包
dpkg -i <package_name>_<version>-<debian_version>_<arch>.deb 安裝一個本地的軟件包到系統中
apt install /path/to/<package_filename>.deb 安裝本地軟件包到系統中,同時嘗試自動解決依賴
debi <package_name>_<version>-<debian_version>_<arch>.dsc 安裝本地軟件包到系統中
dpkg --get-selections '*' >selection.txt 保存 dpkg 級別的軟件包選擇狀態信息
dpkg --set-selections <selection.txt 使用 dpkg 設置軟件包選擇狀態
echo <package_name> hold | dpkg --set-selections 使用 dpkg 將一個軟件包的包選擇狀態設置爲 hold(至關於 "aptitude hold < 包名> ")
2.5.4. 獲取用於軟件包的元數據
當使用 APT 工具時,如 aptitude, apt-get, synaptic, apt-file, auto-apt,咱們須要更新包含 Debian 檔案庫信息元數據的本地拷貝。這些本地拷貝的文件名稱,和在 "/etc/apt/sources.list" 文件裏面的 distribution, area, architecture 相應名稱一致。 (參見 第 2.1.4 節 「Debian 檔案庫基礎」).
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_Release"
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_Release.gpg"
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_<area>_binary-<architecture>_Packages"
"/var/lib/apt/lists/deb.debian.org_debian_dists_<distribution>_<area>_source_Sources"
"/var/cache/apt/apt-file/deb.debian.org_debian_dists_<distribution>_Contents-<architecture>.gz" (apt-file)
前 4 種類型的文件是全部相關的 APT 命令共享的,而且能夠經過 「apt-get update」 或 「aptitude update」 在命令行中進行更新。若是在 「/etc/apt/sources.list」 中有相應的 「deb」 行,則 「軟件包」 元數據會進行更新。若是在 「/etc/apt/sources.list」 中有相應的 「deb-src」 行,則 「源代碼」 元數據會進行更新。
除了遠程獲取元數據,aptitude 命令還會將它在本地產生的安裝狀態信息保存在 「/var/lib/aptitude/pkgstates」 中,這些信息只能被 aptitude 使用。
2.5.9. dpkg 命令
dpkg(1) 是 Debian 軟件包管理中最底層的工具。它很是強大,必須當心使用。
當安裝名爲 「<package_name>」 的軟件包時,dpkg 會按照下列的順序處理它。
解包 deb 文件(等同於 「ar -x」)
使用 debconf(1) 執行 「<package_name>.preinst」
將軟件包安裝到系統中(等同於 「tar -x」)
使用 debconf(1) 執行 「<package_name>.postinst」
debconf 系統提供帶有 I18N 和 L10N (第 8 章 國際化和本地化)支持的標準化用戶交互。
表 2.17. dpkg 建立的重要文件
文件 內容說明
/var/lib/dpkg/info/<package_name>.conffiles 列出配置文件。(使用者可修改的)
/var/lib/dpkg/info/<package_name>.list 列出軟件包安裝的全部文件和目錄
/var/lib/dpkg/info/<package_name>.md5sums 列出軟件包安裝的文件的 MD5 哈希值
/var/lib/dpkg/info/<package_name>.preinst 軟件包安裝以前運行的軟件包腳本
/var/lib/dpkg/info/<package_name>.postinst 軟件包安裝以後運行的軟件包腳本
/var/lib/dpkg/info/<package_name>.prerm 軟件包移除以前運行的軟件包腳本
/var/lib/dpkg/info/<package_name>.postrm 軟件包移除以後運行的軟件包腳本
/var/lib/dpkg/info/<package_name>.config 用於 debconf 系統的軟件包腳本
/var/lib/dpkg/alternatives/<package_name> update-alternatives 命令使用的替代信息
/var/lib/dpkg/available 全部軟件包的可用性信息
/var/lib/dpkg/diversions dpkg(1) 使用的文件移動信息,由 dpkg-divert(8) 設置
/var/lib/dpkg/statoverride dpkg(1) 使用的文件狀態改變信息,由 dpkg-statoverride(8) 設置
/var/lib/dpkg/status 全部軟件包的狀態信息
/var/lib/dpkg/status-old 「var/lib/dpkg/status」 文件的第一代備份
/var/backups/dpkg.status* 第二代備份,以及「var/lib/dpkg/status」文件更舊的備份
「status」 文件也被例如 dpkg(1)、「dselect update」 和 「apt-get -u dselect-upgrade」 等工具使用。
專門的搜索命令 grep-dctrl(1) 能夠搜索 「status」 和 「available」 元數據的本地副本。
[提示] 提示
在debian 安裝器環境下, udpkg 命令用於打開udeb 軟件包,udpkg 命令是 dpkg 命令的一個精簡版本.
可替代:update-alternatives --display x-www-browser #列出x-www-browser默認使用什麼 update-alternatives --config x-www-browser #修改默認瀏覽器