Ubuntu 系統(tǒng) dpkg 命令使用詳解

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-*詳解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胁勺,一起剝皮案震驚了整個濱河市世澜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌署穗,老刑警劉巖宜狐,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件势告,死亡現(xiàn)場離奇詭異,居然都是意外死亡抚恒,警方通過查閱死者的電腦和手機咱台,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俭驮,“玉大人回溺,你說我怎么就攤上這事』炻埽” “怎么了遗遵?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長逸嘀。 經(jīng)常有香客問我车要,道長,這世上最難降的妖魔是什么崭倘? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任翼岁,我火速辦了婚禮,結(jié)果婚禮上司光,老公的妹妹穿的比我還像新娘琅坡。我一直安慰自己,他們只是感情好残家,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布榆俺。 她就那樣靜靜地躺著,像睡著了一般坞淮。 火紅的嫁衣襯著肌膚如雪茴晋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天回窘,我揣著相機與錄音晃跺,去河邊找鬼。 笑死毫玖,一個胖子當(dāng)著我的面吹牛掀虎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播付枫,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烹玉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阐滩?” 一聲冷哼從身側(cè)響起二打,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掂榔,沒想到半個月后继效,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體症杏,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年瑞信,在試婚紗的時候發(fā)現(xiàn)自己被綠了厉颤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡凡简,死狀恐怖逼友,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秤涩,我是刑警寧澤帜乞,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站筐眷,受9級特大地震影響黎烈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匀谣,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一照棋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧振定,春花似錦、人聲如沸肉拓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暖途。三九已至卑惜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驻售,已是汗流浹背露久。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欺栗,地道東北人毫痕。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像迟几,于是被迫代替她去往敵國和親消请。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容