dpkg 是 Debian 系系統的底層包管理器,直接操作 .deb 文件與 /var/lib/dpkg/status 數據庫。它不自動解決依賴、不從遠程倉庫下載。日常運維請優先使用 apt/apt-get;dpkg 用於:手動安裝本地 .deb、查詢已安裝包細節、強制修復損壞狀態、構建/檢查 .deb 內容。
# 安裝本地 .deb (不解決依賴, 失敗會標記為 "半安裝" 狀態)
dpkg -i package.deb
dpkg -i *.deb # 批量安裝當前目錄所有 deb
# 修復缺失依賴 (關鍵後續步驟)
apt-get install -f # 或 apt --fix-broken install
# 移除包 (保留配置文件)
dpkg -r package_name
# 徹底清除 (含配置文件)
dpkg -P package_name # --purge
# 強制操作 (慎用!)
dpkg -i --force-depends package.deb # 忽略依賴版本衝突
dpkg -i --force-overwrite package.deb # 強制覆蓋屬於其他包的檔案
dpkg -r --force-depends package_name # 強制移除被依賴的包
dpkg --force-all -i package.deb # 核武器級,極度危險
# 列出已安裝包 (支援通配符)
dpkg -l 'nginx*' # ii 狀態 = 安裝正常, rc = 已移除但留配置
# 查看包詳細信息 (類似 rpm -qi)
dpkg -s package_name
dpkg -p package_name # 顯示控制文件完整內容
# 列出包安裝的所有文件路徑
dpkg -L package_name
# 查看 .deb 包內容 (不安裝)
dpkg -c package.deb # 文件列表
dpkg -I package.deb # 控制信息 (版本、依賴、描述、維護者)
# 搜索文件屬於哪個包
dpkg -S /path/to/file # 精確匹配
dpkg -S '/usr/bin/*' # 模糊匹配
| 代碼 | 期望狀態 | 當前狀態 | 含義 |
|---|---|---|---|
| ii | Install | Installed | ✅ 正常安裝 |
| rc | Remove | Config-files | ⚠️ 已移除,殘留配置文件 (需 dpkg -P 清理) |
| hi | Hold | Installed | 🔒 被 hold 阻止升級 |
| pi | Purge | Installed | ⚠️ 被標記清除但尚未執行 |
| un | Unknown | Not-installed | 未安裝 |
| iu | Install | Unpacked | ⚠️ 解包完成,配置腳本失敗 (半安裝) |
| uf | Unpack | Failed-config | ❌ 配置腳本失敗 |
| hh | Hold | Half-installed | 🔒 半安裝且被 hold |
# 1. 掃描問題
dpkg -C # 審計,列出需修復的包
# 2. 強制配置待配置包
dpkg --configure -a
# 3. 修復依賴關係
apt-get install -f
# 4. 若特定包損壞,嘗試重新安裝修復
apt-get install --reinstall
# 5. 極端情況:手動清理 /var/lib/dpkg/info/ 下該包腳本,再強制移除
# mv /var/lib/dpkg/info/problematic.* /tmp/
# dpkg --remove --force-remove-reinstreq problematic-package
# 解包 .deb (不安裝)
dpkg-deb -x package.deb /target/dir # 解壓文件系統
dpkg-deb -e package.deb /target/dir/DEBIAN # 解壓控制信息
# 或一步到位
dpkg-deb -R package.deb /target/dir
# 重新打包
dpkg-deb -b /target/dir new_package.deb
# 檢查 .deb 結構
ar t package.deb
# debian-binary control.tar.xz data.tar.xz
apt download nginx (下載到當前目錄,含依賴用 apt download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances nginx | grep "^\w" | sort -u))。dpkg -i *.deb → apt-get install -f。apt-mark hold nginx (取消 apt-mark unhold nginx)。apt-cache madison nginx / apt policy nginx。dpkg 是基石,apt 是大廈。日常用 apt 享受依賴自動解決;遇到 dpkg 錯誤 (半安裝、檔案衝突、鎖定) 時,用 dpkg -C、--configure -a、--force-overwrite 精準手術刀修復;需離線/自製包時,用 dpkg-deb 拆解重組。理解 ii/rc/iu 狀態碼,是診斷包管理健康度的體溫計。