apt 是什么
apt 是 Debian 与 Ubuntu 系面向人的包管理命令,底层仍然是 apt-get 与 apt-cache 那套接口,只是输出更友好(进度条、彩色提示)。update 只刷新软件包索引,不等于升级;install、remove、purge 才是改动系统。脚本与自动化里应使用 apt-get 与 apt-cache,因为它们的输出与参数更稳定,不易随版本变化。理解「索引与包」的区别,是避免「版本找不到」类问题的前提。
基本信息
| 适用平台 | Debian、Ubuntu、以及基于它们的发行版(Ubuntu 16.04+/Debian 8+ 提供 apt 命令,更老的系统只有 apt-get) |
|---|---|
| 命令语法 | apt 子命令 包名...;脚本中写作 apt-get 子命令 |
| 常用子命令 | update 刷新索引、install 安装、remove 卸载(保留配置)、purge 连配置一起删、upgrade 升级、full-upgrade 允许为升级而卸载、autoremove 清理无用依赖、search 搜索、show 详情、list 列表 |
| 配置文件 | 仓库源在 /etc/apt/sources.list 与 /etc/apt/sources.list.d/,版本偏好与锁定在 /etc/apt/preferences.d/ |
| 缓存与索引 | 索引位于 /var/lib/apt/lists,下载的 deb 包缓存在 /var/cache/apt/archives |
典型使用场景
- 安装运行环境:apt install -y nginx,一次带齐依赖
- 查询候选版本与来源:apt-cache policy 包名 看候选版本、已安装版本与各仓库优先级
- 反查文件归属:dpkg -S /usr/sbin/nginx 确认某个文件属于哪个包
- 清理残留配置:dpkg -l 里状态为 rc 的包说明只删了程序没删配置,需要 purge
- 锁定版本:apt-mark hold 阻止关键包被自动升级
- 修复破损依赖:dpkg 被中断后用 apt --fix-broken install 补齐
常用示例
常用示例
apt update
apt install -y nginx
apt remove nginx
apt purge nginx # 连配置一起删
apt full-upgrade -y
apt list --upgradable # 先看有哪些可升级
apt-cache policy nginx # 候选版本与来源仓库
apt-mark hold nginx # 冻结版本,避免被升级
dpkg -l | grep '^rc' # 找出只删了程序、残留配置的包
dpkg -S /usr/sbin/nginx # 由文件反查包名
dpkg -i ./app.deb || apt --fix-broken install # 手工装包后修复依赖apt 与 apt-get 对照
| 用途 | apt(交互) | apt-get(脚本) |
|---|---|---|
| 刷新索引 | apt update | apt-get update |
| 安装 | apt install 包名 | apt-get install 包名 |
| 升级(保守) | apt upgrade | apt-get upgrade |
| 升级(允许卸载) | apt full-upgrade | apt-get dist-upgrade |
| 搜索与详情 | apt search / apt show | apt-cache search / apt-cache show |
| 输出稳定性 | 有进度条与提示,面向人 | 接口稳定,适合自动化 |
update 与 upgrade 是两步:update 只把仓库的包列表下载到本地索引,upgrade 才按新索引升级已安装的包。只执行 upgrade 不执行 update,升级依据的仍是旧索引,可能看不到可用更新。
升级前用 apt list --upgradable 看清单,并留意是否包含内核与 systemd 这类需要重启的组件。桌面与生产机的取舍不同:前者倾向 full-upgrade 保持最新,后者倾向只装安全更新并安排维护窗口。
优先用 apt install ./包名.deb 而不是 dpkg -i:apt 会自动补齐依赖,dpkg 不会。手工 dpkg -i 造成依赖破损后,用 apt --fix-broken install 或 dpkg --configure -a 修复,再回头处理装不上的包。
仓库优先级与版本锁定:/etc/apt/preferences.d/ 下的 Pin 规则能指定某个包从哪个仓库取,apt-mark hold 包名 则直接冻结当前版本阻止自动升级(showhold 查看、unhold 解除)。把其他发行版的第三方源混入现有系统(例如在 Debian 上添加 Ubuntu 的 PPA)是依赖地狱的常见起点,除非确认版本兼容,否则不要混源。
常见修复套路:dpkg 被中断后先 dpkg --configure -a 完成未配置的包,依赖不满足时 apt --fix-broken install 补齐。apt update 报签名错误通常是仓库密钥过期或缺失,需要按提示导入密钥;apt-key 已被弃用,规范做法是把密钥放到 /usr/share/keyrings/ 并用 sources.list 里的 signed-by 指向它。
升级内核与关键库后需要重启才真正生效。Debian/Ubuntu 的约定是存在 /var/run/reboot-required 文件即表示需要重启;用 needrestart 可以查出哪些服务仍在运行旧版本的库、需要单独重启。想自动装安全更新可启用 unattended-upgrades,但要清楚它也能自动重启服务,生产环境通常只让它自动下载、由人工确认安装。