dpkg
即 package manager for Debian 刹悴,是 Debian 和基于 Debian 的系統(tǒng)中一個主要的包管理工具行楞,可以用來安裝、構(gòu)建土匀、卸載敢伸、管理deb
格式的軟件包。
安裝軟件
使用 dpkg
命令安裝軟件時恒削,可以使用 -i
選項并指定 deb 安裝包的路徑池颈。和 Ubuntu 下的另一個包管理工具 apt-get
(Advanced Package Tool)有所不同。
apt-get
命令并不直接操作 deb 安裝包文件钓丰,而是從 /etc/apt/sources.list
配置文件中定義的軟件鏡像源里下載軟件包并安裝躯砰,使用時也只需指定軟件的名稱(或者也可以附加上版本號)。
apt-get 命令安裝軟件:
$ apt-get install <package_name[=version]>
dpkg 命令安裝軟件:
$ dpkg -i <package_file_path>
因此携丁,dpkg 主要是用來安裝已經(jīng)下載到本地的 deb 軟件包琢歇,或者對已經(jīng)安裝好的軟件進(jìn)行管理。而 apt-get 可以直接從遠(yuǎn)程的軟件倉庫里下載安裝軟件梦鉴。
$ sudo apt-get install emacs
正在讀取軟件包列表... 完成
正在分析軟件包的依賴關(guān)系樹
正在讀取狀態(tài)信息... 完成
將會同時安裝下列軟件:
emacs-bin-common emacs-common emacs-el emacs-gtk libm17n-0
libotf0 m17n-db
建議安裝:
mailutils emacs-common-non-dfsg m17n-docs gawk
下列【新】軟件包將被安裝:
emacs emacs-bin-common emacs-common emacs-el emacs-gtk libm17n-0
libotf0 m17n-db
升級了 0 個軟件包李茫,新安裝了 8 個軟件包,要卸載 0 個軟件包肥橙,有 115 個軟件包未被升級魄宏。
需要下載 34.4 MB 的歸檔。
解壓縮后會消耗 137 MB 的額外空間存筏。
您希望繼續(xù)執(zhí)行嗎宠互? [Y/n]
$ sudo dpkg -i fping_4.2-1_amd64.deb
(正在讀取數(shù)據(jù)庫 ... 系統(tǒng)當(dāng)前共安裝有 252654 個文件和目錄味榛。)
準(zhǔn)備解壓 fping_4.2-1_amd64.deb ...
正在解壓 fping (4.2-1) 并覆蓋 (4.2-1) ...
正在設(shè)置 fping (4.2-1) ...
正在處理用于 man-db (2.8.5-2) 的觸發(fā)器 ...
列出已安裝的軟件
可以使用 dpkg -l
命令列出當(dāng)前系統(tǒng)中已經(jīng)安裝的軟件以及軟件包的狀態(tài)。如:
$ dpkg -l
期望狀態(tài)=未知(u)/安裝(i)/刪除(r)/清除(p)/保持(h)
| 狀態(tài)=未安裝(n)/已安裝(i)/僅存配置(c)/僅解壓縮(U)/配置失敗(F)/不完全安裝(H)/觸發(fā)器等待(W)/觸發(fā)器未決(T)
|/ 錯誤?=(無)/須重裝(R) (狀態(tài)予跌,錯誤:大寫=故障)
||/ 名稱 版本 體系結(jié)構(gòu) 描述
+++-=============================================-===================================-============-===============================================================================
ii 2048-qt 0.1.6-1build1 amd64 mathematics based puzzle game
ii accountsservice 0.6.50-0ubuntu1 amd64 query and manipulate user account information
ii acl 2.2.53-4 amd64 access control list - utilities
ii acpi-support 0.143 amd64 scripts for handling many ACPI events
ii acpid 1:2.0.31-1ubuntu2 amd64 Advanced Configuration and Power Interface event daemon
ii adduser 3.118ubuntu1 all add and remove users and groups
ii adwaita-icon-theme 3.32.0-1ubuntu1 all default icon theme of GNOME (small subset)
ii alsa-base 1.0.25+dfsg-0ubuntu5 all ALSA driver configuration files
ii alsa-utils 1.1.8-1ubuntu1 amd64 Utilities for configuring and using ALSA
...
該命令每行輸出中的第一列 ii
表示軟件包的安裝和配置狀態(tài)搏色,其格式如下:
期望狀態(tài)|當(dāng)前狀態(tài)|錯誤
其中期望狀態(tài)有以下幾種
- u:即 unknown,軟件包未安裝且用戶未請求安裝
- i:即 install券册,用戶請求安裝該軟件包
- r:即 remove频轿,用戶請求卸載該軟件包
- p:即 purge,用戶請求卸載該軟件包并清理配置文件
- h:即 hold烁焙,用戶請求保持續(xù)當(dāng)前軟件包版本
當(dāng)前狀態(tài) 有以下幾種:
- n:即 not-installed略吨,軟件包未安裝
- i:即 installed,軟件包已安裝并完成配置
- c:即 config-files考阱,軟件包已經(jīng)被卸載,但是其配置文件未清理
- u:即 unpacked鞠苟,軟件包已經(jīng)被解壓縮乞榨,但還未配置
- f:即 half-configured,配置軟件包時出現(xiàn)錯誤
- w:即 triggers-awaited当娱,觸發(fā)器等待
- t:即 triggers-pending吃既,觸發(fā)器未決
錯誤狀態(tài) 有以下幾種:
- h:軟件包被強制保持
- r:即 reinstall-required,需要卸載并重新安裝
- x:軟件包被破壞
因此 ii
表示該軟件需要安裝且已經(jīng)安裝跨细,沒有出現(xiàn)錯誤鹦倚;
iu
表示已經(jīng)安裝該軟件,但未正確配置冀惭;
rc
表示該軟件已經(jīng)被刪除震叙,但配置文件未清理。
查看處于 rc
狀態(tài)的軟件包:
$ dpkg -l | grep ^rc
rc libmhash2:amd64 0.9.9.9-7 amd64 Library for cryptographic hashing and message authentication
rc linux-image-5.0.0-13-generic 5.0.0-13.14 amd64 Signed kernel image generic
rc linux-modules-5.0.0-13-generic 5.0.0-13.14 amd64 Linux kernel extra modules for version 5.0.0 on 64 bit x86 SMP
rc linux-modules-extra-5.0.0-13-generic 5.0.0-13.14 amd64 Linux kernel extra modules for version 5.0.0 on 64 bit x86 SMP
rc zabbix-proxy-mysql 1:4.0.4+dfsg-1 amd64 network monitoring solution - proxy (using MySQL)
此外散休,還可以使用 dpkg -l <package_name_pattern>
命令篩選出名稱中包含指定模式的軟件包媒楼。
$ dpkg -l "nginx*"
期望狀態(tài)=未知(u)/安裝(i)/刪除(r)/清除(p)/保持(h)
| 狀態(tài)=未安裝(n)/已安裝(i)/僅存配置(c)/僅解壓縮(U)/配置失敗(F)/不完全安裝(H)/觸發(fā)器等待(W)/觸發(fā)器未決(T)
|/ 錯誤?=(無)/須重裝(R) (狀態(tài),錯誤:大寫=故障)
||/ 名稱 版本 體系結(jié)構(gòu) 描述
+++-==============-===============-============-=========================================================
ii nginx 1.15.9-0ubuntu1 all small, powerful, scalable web/proxy server
ii nginx-common 1.15.9-0ubuntu1 all small, powerful, scalable web/proxy server - common files
ii nginx-core 1.15.9-0ubuntu1 amd64 nginx web/proxy server (standard version)
un nginx-doc <無> <無> (無描述)
un nginx-extras <無> <無> (無描述)
un nginx-full <無> <無> (無描述)
un nginx-light <無> <無> (無描述)
卸載軟件
dpkg
命令的 -r
選項可以用來卸載已安裝的軟件包戚丸,此時只需要指定軟件的名稱即可划址。
$ sudo dpkg -r vim
(正在讀取數(shù)據(jù)庫 ... 系統(tǒng)當(dāng)前共安裝有 252653 個文件和目錄。)
正在卸載 vim (2:8.1.0320-1ubuntu3.1) ...
update-alternatives: 使用 /usr/bin/vim.tiny 來在自動模式中提供 /usr/bin/vi (vi)
update-alternatives: 使用 /usr/bin/vim.tiny 來在自動模式中提供 /usr/bin/view (view)
update-alternatives: 使用 /usr/bin/vim.tiny 來在自動模式中提供 /usr/bin/ex (ex)
update-alternatives: 使用 /usr/bin/vim.tiny 來在自動模式中提供 /usr/bin/rview (rview)
需要注意的是限府,-r
選項只會移除指定的軟件包而不對其配置文件產(chǎn)生影響夺颤,可以使用 -P
選項在刪除軟件包的同時清理配置文件。
sudo dpkg -P <package>
其他包管理操作
查看軟件包的內(nèi)容
dpkg -c <package_file_path>
$ dpkg -c fping_4.2-1_amd64.deb
drwxr-xr-x root/root 0 2019-02-20 06:27 ./
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/bin/
-rwxr-xr-x root/root 52128 2019-02-20 06:27 ./usr/bin/fping
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/bug/
-rwxr-xr-x root/root 118 2017-06-19 05:19 ./usr/share/bug/fping
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/doc/
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/doc/fping/
-rw-r--r-- root/root 495 2017-09-06 08:00 ./usr/share/doc/fping/NEWS.Debian.gz
-rw-r--r-- root/root 1615 2019-02-20 06:27 ./usr/share/doc/fping/changelog.Debian.gz
-rw-r--r-- root/root 3445 2017-12-07 04:09 ./usr/share/doc/fping/copyright
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/lintian/
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/lintian/overrides/
-rw-r--r-- root/root 41 2017-06-19 05:19 ./usr/share/lintian/overrides/fping
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/man/
drwxr-xr-x root/root 0 2019-02-20 06:27 ./usr/share/man/man8/
-rw-r--r-- root/root 5733 2019-02-20 06:27 ./usr/share/man/man8/fping.8.gz
-rw-r--r-- root/root 1512 2019-02-20 06:27 ./usr/share/man/man8/fping6.8.gz
lrwxrwxrwx root/root 0 2019-02-20 06:27 ./usr/bin/fping6 -> fping
查看軟件包(已安裝)的詳細(xì)信息
dpkg -s <package>
或 dpkg --status <package>
$ dpkg -s fping
Package: fping
Status: deinstall ok installed
Priority: optional
Section: net
Installed-Size: 87
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 4.2-1
Depends: libcap2-bin, netbase, libc6 (>= 2.15)
Enhances: netdata (>= 1.5)
Description: sends ICMP ECHO_REQUEST packets to network hosts
fping is a ping like program which uses the Internet Control Message Protocol
(ICMP) echo request to determine if a target host is responding. fping
differs from ping in that you can specify any number of targets on the command
line, or specify a file containing the lists of targets to ping. Instead of
sending to one target until it times out or replies, fping will send out a
ping packet and move on to the next target in a round-robin fashion.
Original-Maintainer: Axel Beckert <abe@debian.org>
Homepage: https://www.fping.org/
查看軟件包的安裝位置
dpkg -L <package>
或 dpkg --list-files <package>
$ dpkg -L fping
/.
/usr
/usr/bin
/usr/bin/fping
/usr/share
/usr/share/bug
/usr/share/bug/fping
/usr/share/doc
/usr/share/doc/fping
/usr/share/doc/fping/NEWS.Debian.gz
/usr/share/doc/fping/changelog.Debian.gz
/usr/share/doc/fping/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/fping
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/fping.8.gz
/usr/share/man/man8/fping6.8.gz
/usr/bin/fping6
篩選出包含指定文件(模式)的軟件包
dpkg -S <filename_pattern>
或 dpkg --search <filename_pattern>
$ dpkg -S sites-available
apache2: /etc/apache2/sites-available/default-ssl.conf
apache2: /etc/apache2/sites-available/000-default.conf
nginx-common: /etc/nginx/sites-available
nginx-common: /etc/nginx/sites-available/default
apache2: /etc/apache2/sites-available
參考資料
15 Practical Examples of “dpkg commands” for Debian Based Distros
Linux軟件安裝管理之——dpkg與apt-*詳解