☰
Ubuntu/Debian包管理教程:apt、dpkg、apt-cache实战
2026/9/26 14:21:56 网站建设 项目流程

在 Ubuntu 或 Debian 上装软件,你会反复碰到三个名字:apt、dpkg、apt-cache。新手容易把它们当成一回事,其实分工很清楚——apt 负责联网装包,dpkg 负责本地解包,apt-cache 负责查仓库索引。这篇把三者的语法、常用参数和配合方式讲透。

一、先理清三者分工

工具定位能不能联网典型用途
apt上层包管理能装、卸、升级软件,自动处理依赖
apt-cache仓库索引查询只读本地索引搜包、看依赖、看版本
dpkg底层解包不能装本地 .deb 文件、查文件归属

一句话:平时九成操作用 apt;要查包的详细信息用 apt-cache;手上有个 .deb 文件、或者要排查"这个文件是谁装的",才轮到 dpkg。

二、apt:日常主力

语法格式

apt[选项]子命令[包名...]

常用子命令

命令作用
sudo apt update刷新仓库索引
sudo apt upgrade升级所有可升级包
sudo apt install 包名安装包
sudo apt remove 包名卸载,保留配置
sudo apt purge 包名卸载并删配置
sudo apt autoremove清理不再被依赖的孤儿包
apt list --installed列已装包
apt edit-sources编辑软件源

示例与预期输出

示例 1:安装 nginx

sudoaptupdatesudoaptinstall-ynginx

预期输出(节选):

Reading package lists... Done Building dependency tree... Done The following additional packages will be installed: nginx-common nginx-core Suggested packages: fcgiwrap nginx-doc The following NEW packages will be installed: nginx nginx-common nginx-core 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 577 kB of archives. ... Setting up nginx-core (1.22.0-1ubuntu1.24) ... Setting up nginx (1.22.0-1ubuntu1.24) ...

示例 2:卸载并清理

sudoaptremove-ynginxsudoaptautoremove-y

remove只删主程序,配置留在/etc/nginx;要连配置一起删用purge。autoremove把当初为了装 nginx 而拉进来、现在没人用的依赖一起清掉。

⚠️ 常见错误

  1. 新装系统直接 install 报 Unable to locate package:先sudo apt update。
  2. 把 update 和 upgrade 搞混:update 只更新索引清单,不装任何东西。
  3. apt和apt-get:新脚本用apt,输出更友好;老文档里的apt-get install照样能跑,不必照抄。

三、apt-cache:查仓库索引

apt-cache 不联网,它查的是apt update下载到本地的索引文件,所以查询速度极快,而且不需要 sudo。

常用子命令

命令作用
apt-cache search 关键词按名字和描述搜包
apt-cache show 包名看包的版本、依赖、描述
apt-cache depends 包名看这个包依赖谁
apt-cache rdepends 包名看谁依赖这个包(反向依赖)
apt-cache policy 包名看候选版本和各仓库版本

示例与预期输出

搜名字带 nginx 的包:

apt-cachesearch nginx|head-5

预期输出:

nginx - small, powerful, scalable web/proxy server nginx-common - nginx web/proxy server (common files) nginx-core - nginx web/proxy server (core module) nginx-doc - nginx documentation libnginx-mod-http-image-filter - nginx modules

看 nginx 依赖谁:

apt-cachedepends nginx

预期输出(节选):

nginx Depends: nginx-core Depends: nginx-common Recommends: libnginx-mod-http-geoip

rdepends是反向查询,升级某个包前用它看看"谁在依赖它",避免删了一个公共库导致一片软件挂掉。

四、dpkg:底层解包工具

dpkg 不联网,只处理本地 .deb 文件和本地数据库。apt 装包时,最后一步就是调 dpkg 把文件解开。

常用参数

参数作用
-i 文件.deb安装本地 .deb
-r 包名卸载(保留配置)
-P 包名彻底卸载(删配置)
-l [包名]列出已装包
-L 包名列出这个包装了哪些文件
-S 文件名反查某个文件属于哪个包
--configure -a修复被中断的配置

示例与预期输出

示例 1:从本地 .deb 安装

sudodpkg-i./google-chrome-stable_120.0.6099.71-1_amd64.deb

dpkg 自己不处理依赖,缺依赖时会报错。这种情况跑完这条再执行一句sudo apt -f install,apt 会把缺的依赖补上:

sudoapt-finstall

示例 2:反查文件归属

想知道/usr/sbin/nginx这个文件是哪个包装进来的:

dpkg-S/usr/sbin/nginx

预期输出:

nginx-core: /usr/sbin/nginx

示例 3:列已装包

dpkg-l|grepnginx

预期输出(节选):

ii nginx 1.22.0-1ubuntu1.24 amd64 small, powerful, scalable web/proxy server ii nginx-common 1.22.0-1ubuntu1.24 all nginx web/proxy server (common files)

每行开头两个字母:ii表示已正确安装;如果看到iF、iU,说明上次安装中途出错了,跑sudo dpkg --configure -a修复。

五、软件源在哪

apt 从哪下包,由两个位置决定:

  • /etc/apt/sources.list:主源配置;
  • /etc/apt/sources.list.d/:目录里每个.list文件是一个额外仓库。

国内服务器默认官方源在国外,装软件慢得受不了,换清华、阿里、中科大的镜像源就能解决。改完必须sudo apt update才生效。改之前先备份原文件,改坏了能退回去。

六、知识扩展:/var/lib/dpkg 里记了什么

dpkg 的本地数据库在/var/lib/dpkg/,其中status文件是纯文本,记录了每个已装包的状态、依赖、维护者信息:

Package: nginx Status: install ok installed Priority: optional Section: httpd Architecture: amd64 Version: 1.22.0-1ubuntu1.24 Depends: nginx-core, nginx-common

dpkg -l读的就是这个文件。理解这一点,两个故障就有思路了:装包中途断电导致数据库状态不一致,用sudo dpkg --configure -a让它把没跑完的配置流程补完;想强制重装某个包,sudo apt install --reinstall 包名本质也是重新走一遍 dpkg 的解开和登记流程。

另外区分清楚remove和purge:remove 之后/etc/nginx里的配置还在,下次再装 nginx 会沿用老配置;purge 才是连根拔起。生产服务器上排查"为什么我改的配置不生效",经常是之前 purge 没做干净。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询