随机
Enter 搜索 ↑↓ 切换 Esc 清空

apt

命令

Debian/Ubuntu 软件包管理器

apt

Debian/Ubuntu 软件包管理器

补充说明

apt 是 Debian/Ubuntu 及其衍生发行版的核心软件包管理工具,基于 dpkg 后端,自动处理依赖关系。apt 命令整合了 apt-getapt-cache 等传统工具的最常用功能,提供更友好的输出。

apt vs apt-get

功能 apt apt-get
安装包 apt install apt-get install
移除包 apt remove apt-get remove
更新列表 apt update apt-get update
升级包 apt upgrade apt-get upgrade
全升级 apt full-upgrade apt-get dist-upgrade
搜索包 apt search apt-cache search
查看信息 apt show apt-cache show
自动移除 apt autoremove apt-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>

参考链接