apt
Debian/Ubuntu 软件包管理器
补充说明
apt 是 Debian/Ubuntu 及其衍生发行版的核心软件包管理工具,基于 dpkg 后端,自动处理依赖关系。apt 命令整合了 apt-get、apt-cache 等传统工具的最常用功能,提供更友好的输出。
apt vs apt-get
功能 apt apt-get 安装包 apt installapt-get install移除包 apt removeapt-get remove更新列表 apt updateapt-get update升级包 apt upgradeapt-get upgrade全升级 apt full-upgradeapt-get dist-upgrade搜索包 apt searchapt-cache search查看信息 apt showapt-cache show自动移除 apt autoremoveapt-get autoremove
apt更适合日常交互使用,apt-get更适合脚本编写(向后兼容、输出稳定)。
一、软件源配置
1. 源配置文件
# 主源列表
cat /etc/apt/sources.list
# 扩展源列表(推荐在此目录下拆分配置)
ls /etc/apt/sources.list.d/
2. Debian 12 (Bookworm) 示例
# /etc/apt/sources.list
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
3. Ubuntu 24.04 (Noble) 示例
# /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse
4. 更换国内镜像源
# 以 Debian 12 清华源为例
sed -i 's|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
sed -i 's|security.debian.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
# 更新软件包列表
apt update
其他国内镜像源地址:
| 镜像站 | Debian 替换地址 | Ubuntu 替换地址 |
|---|---|---|
| 清华 tuna | mirrors.tuna.tsinghua.edu.cn |
mirrors.tuna.tsinghua.edu.cn |
| 阿里云 | mirrors.aliyun.com |
mirrors.aliyun.com |
| 中科大 USTC | mirrors.ustc.edu.cn |
mirrors.ustc.edu.cn |
| 华为云 | mirrors.huaweicloud.com |
mirrors.huaweicloud.com |
二、日常操作
1. 更新软件包列表
apt update
每次安装或升级前都应先执行
apt update,确保本地索引与仓库同步。
2. 升级已安装的包
# 仅升级已安装包(不安装/删除新依赖)
apt upgrade
# 升级并自动处理依赖变更
apt full-upgrade
# 发行版大版本升级
apt dist-upgrade
3. 安装软件包
# 安装单个包
apt install nginx
# 安装多个包
apt install nginx mariadb-server php-fpm
# 安装指定版本
apt install docker-ce=5:24.0.7
# 安装本地 .deb 文件(自动处理依赖)
apt install ./google-chrome-stable_current_amd64.deb
# 重新安装
apt install --reinstall nginx
# 仅下载不安装(缓存到 /var/cache/apt/archives/)
apt install -d nginx
4. 移除软件包
# 移除包(保留配置文件)
apt remove nginx
# 完全移除(删除配置文件)
apt purge nginx
# 自动移除不再需要的依赖
apt autoremove
# 自动移除并 purge
apt autoremove --purge
5. 搜索与查看信息
# 搜索包名和描述
apt search nginx
# 查看包详细信息
apt show nginx
# 查看包依赖关系
apt depends nginx
# 查看哪些包依赖此包
apt rdepends nginx
# 列出已安装包
apt list --installed
# 列出可升级的包
apt list --upgradable
# 列出指定仓库的包
apt list --all-versions nginx
三、缓存与清理
APT 下载的 .deb 包缓存到 /var/cache/apt/archives/。定期清理可释放磁盘空间:
# 查看缓存占用
du -sh /var/cache/apt/archives/
# 清理过时缓存(仅移除不再可用的包)
apt autoclean
# 清理全部缓存
apt clean
四、修复与排障
1. 修复损坏的依赖
# 尝试修复依赖问题
apt --fix-broken install
# 修复安装中断的包
dpkg --configure -a
2. GPG 密钥问题
添加第三方仓库时经常遇到缺少 GPG 密钥:
# 显示错误中的密钥 ID,然后添加
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <KEY_ID>
# 现代方式(推荐):将密钥放入 /etc/apt/trusted.gpg.d/
curl -fsSL https://example.com/key.gpg | tee /etc/apt/trusted.gpg.d/example.asc
apt-key已弃用,推荐使用/etc/apt/trusted.gpg.d/目录方式。
3. 锁定版本(禁止升级)
# 方法一:使用 apt-mark
apt-mark hold nginx
apt-mark showhold
# 取消锁定
apt-mark unhold nginx
# 方法二:在 /etc/apt/preferences.d/ 中配置优先级
echo "Package: nginx
Pin: version 1.24.*
Pin-Priority: 1001" > /etc/apt/preferences.d/pin-nginx
4. 下载中断恢复
# 重新获取不完整的包
apt install --fix-missing nginx
# 或清理缓存后重试
apt clean && apt update && apt install nginx
五、第三方仓库配置
1. Docker 官方仓库
# 添加 GPG 密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | tee /etc/apt/trusted.gpg.d/docker.asc
# 添加仓库
echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install docker-ce docker-ce-cli containerd.io
2. Nginx 官方仓库
curl -fsSL https://nginx.org/keys/nginx_signing.key | tee /etc/apt/trusted.gpg.d/nginx.asc
echo "deb [arch=amd64] https://nginx.org/packages/debian $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
apt update
apt install nginx
3. 添加 i386 架构(运行 32 位程序)
dpkg --add-architecture i386
apt update
apt install wine32
六、一键系统更新脚本
#!/bin/bash
set -e
echo "=== 系统更新 ==="
apt update
echo "=== 升级包 ==="
apt upgrade -y
echo "=== 全升级 ==="
apt full-upgrade -y
echo "=== 清理 ==="
apt autoremove --purge -y
apt autoclean
echo "=== 完成 ==="
常见问题
Could not get lock /var/lib/dpkg/lock
另一个 APT 进程正在运行:
# 查找占用进程
ps aux | grep -i apt
# 确认无其他进程后,手动删除锁文件
rm /var/lib/dpkg/lock-frontend
rm /var/lib/apt/lists/lock
rm /var/cache/apt/archives/lock
dpkg --configure -a
The following packages have been kept back
包被保留(可能因依赖变更未自动处理):
apt install <包名> # 逐一安装被保留的包
apt full-upgrade # 或使用全升级处理
apt list --upgradable # 查看被保留的包
NO_PUBKEY 错误
缺少公钥:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <缺失的KEY>