
🐧 Linux 从零到实战 · 第2阶段 · 第2.1章:APT 包管理:安装、更新与卸载
环境:Ubuntu 22.04 LTS · Bash 5.1 · 受众:零基础
🎨 核心概念可视化 · AI 生成本节目标
学完本章你将能够:
1. 理解「包管理器」是什么,为什么 Linux 需要它
2. 掌握 apt update 与 apt upgrade 的核心区别(新手最常混淆)
3. 独立完成软件的安装、卸载、搜索、更新全流程
4. 了解软件源(Repository)的概念,知道去哪里找软件
5. 处理常见的 GPG 密钥报错和依赖冲突
一、什么是包管理器?
1.1 类比理解
在 Windows 上安装软件,你通常是: 1. 打开浏览器 → 搜索软件 → 下载安装包(.exe)→ 双击安装
在 Linux 上,我们有一个中央仓库,所有软件都在里面,你只需要一条命令就能安装:
sudo apt install 软件名
图注: 包管理器将「手动搜索-下载-安装」简化为「单条命令-中央分发」
包管理器(Package Manager)就是这个「中央仓库 + 自动安装器」的组合。它帮你: - 从可信的软件源下载软件 - 自动解决依赖关系(A 依赖 B,B 依赖 C → 自动全装上) - 统一管理安装、升级、卸载
1.2 APT 是什么?
APT(Advanced Package Tool)是 Debian/Ubuntu 系列的包管理器。它底层调用 dpkg(Debian Package Manager)来实际安装 .deb 格式的软件包。
关系链:
apt(用户界面,推荐日常使用)
└── apt-get(脚本/自动化场景使用)
└── dpkg(底层 .deb 安装器)
图注: APT 家族的层级结构:从用户友好的 apt 到底层的 dpkg
📌 注意:
apt是面向用户的交互工具,apt-get更适合在脚本中使用。日常操作两者语法基本一致。
二、软件源(Repository)
2.1 什么是软件源?
软件源就是存放软件包的服务器。Ubuntu 默认配置了官方源,位于:
# Ubuntu 24.04+ 使用 deb822 格式
/etc/apt/sources.list.d/ubuntu.sources
# Ubuntu 22.04 及更早版本
/etc/apt/sources.list
图注: 软件源(Repository)与镜像站的工作原理
2.2 Ubuntu 的四大仓库
| 仓库 | 说明 | 自由度 |
|---|---|---|
| main | 官方完全支持的自由软件 | ✅ 最安全 |
| universe | 社区维护的自由软件 | ⚠️ 非官方支持 |
| restricted | 有版权驱动的设备驱动 | ⚠️ 有限许可 |
| multiverse | 非自由软件(可能有版权问题) | ❌ 不推荐 |
查看当前启用的源:
cat /etc/apt/sources.list
# 或
grep -r "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/
2.3 换国内源(加速下载)
官方源服务器在国外,下载慢。可以换成国内镜像:
# 备份原始源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 用阿里云镜像替换(Ubuntu 22.04 jammy)
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新索引
sudo apt update
常用国内镜像:
- 阿里云:mirrors.aliyun.com
- 清华:mirrors.tuna.tsinghua.edu.cn
- 中科大:mirrors.ustc.edu.cn
- 华为:mirrors.huaweicloud.com
三、APT 核心命令
3.1 更新软件索引:apt update
sudo apt update
这条命令做了什么? - 连接到软件源服务器 - 下载最新的软件包列表(索引数据库) - 不会安装或升级任何软件
图注: Update 是「更新菜单」,Upgrade 才是「点菜升级」
⚠️ 最常见的误区:很多新手以为
apt update是更新软件,其实它只是更新「软件目录」。就像你去餐厅,先拿最新菜单,但还没点菜。
输出示例:
Hit:1 http://mirrors.aliyun.com/ubuntu jammy InRelease
Get:2 http://mirrors.aliyun.com/ubuntu jammy-updates InRelease [128 kB]
Get:3 http://mirrors.aliyun.com/ubuntu jammy-security InRelease [129 kB]
Fetched 257 kB in 1s (257 kB/s)
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.
3.2 升级已安装软件:apt upgrade
sudo apt upgrade
这条命令做了什么? - 对比本地已安装软件的版本 vs 软件源中的最新版本 - 下载并安装所有可升级的软件 - 不会删除已安装的软件,也不会安装新软件
💡 正确流程:先
update,再upgrade。就像先看菜单,再点菜。
sudo apt update && sudo apt upgrade
3.3 安装软件:apt install
sudo apt install 软件名
示例:安装 nmap(网络扫描工具)
sudo apt install nmap
输出会显示: - 将要安装的新软件包列表 - 将要安装的依赖包 - 需要下载的总下载量 - 安装后占用的磁盘空间
系统会提示 Y/n,输入 Y 确认即可。
一次安装多个软件:
sudo apt install nginx mysql-server php
安装指定版本:
# 先查看可用版本
apt-cache policy nginx
# 安装指定版本
sudo apt install nginx=1.18.0-0ubuntu1.4
3.4 卸载软件:apt remove vs apt purge
# 卸载软件(保留配置文件)
sudo apt remove 软件名
# 卸载软件 + 删除配置文件(彻底清除)
sudo apt purge 软件名
图注: remove 保留配置,purge 彻底清除
区别:
| 命令 | 卸载软件 | 删除配置文件 | 删除数据 |
|:-----|:--------|:-----------|:--------|
| remove | ✅ | ❌ | ❌ |
| purge | ✅ | ✅ | ❌ |
💡 如果你以后可能重装这个软件,用
remove保留配置;如果要彻底清除,用purge。
清理不再需要的依赖:
sudo apt autoremove
当你卸载一个软件后,它之前自动安装的依赖可能没人用了。autoremove la清理这些「孤儿包」。
3.5 搜索软件:apt search
apt search 关键词
示例:
apt search editor
查看软件详细信息:
apt show 软件名
示例:
apt show nginx
会显示版本、大小、描述、依赖等信息。
3.6 列出已安装软件
# 列出所有已安装的包
apt list --installed
# 过滤特定软件
apt list --installed | grep nginx
四、dpkg 底层操作
虽然日常用 apt 就够了,但有时你需要直接操作 .deb 文件。
4.1 安装本地 .deb 文件
sudo dpkg -i 软件包.deb
示例:
# 下载 Google Chrome 的 deb 包
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
# 安装
sudo dpkg -i google-chrome-stable_current_amd64.deb
⚠️
dpkg -i不会自动解决依赖。如果缺依赖会报错,此时运行:bash sudo apt --fix-broken install来自动修复依赖。
4.2 查看包信息
# 查看某个 .deb 文件的内容
dpkg -c 软件包.deb
# 查看已安装包的文件列表
dpkg -L 软件名
# 查看已安装包的文件列表
dpkg -S /usr/bin/nginx
# 列出所有已安装的包
dpkg -l
五、添加第三方软件源(PPA)
5.1 什么是 PPA?
PPA(Personal Package Archive) adalah 这是一个 Ubuntu 提供的个人软件包归档。开发者可以把最新版本的软件放到 PPA,用户添加后就能通过 apt 安装。
5.2 添加 PPA
# 安装 add-apt-repository 工具(如果没有)
sudo apt install software-properties-common
# 添加 PPA
sudo add-apt-repository ppa:用户名/ppa名
# 更新索引
sudo apt update
# 安装软件
sudo apt install 软件名
示例:添加 Git 的 PPA 获取最新版本
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git
5.3 删除 PPA
sudo add-apt-repository --remove ppa:用户名/ppa名
六、APT 进阶技巧
6.1 只下载不安装
# 下载到当前目录
apt download 软件名
6.2 模拟操作(干跑)
不确定 apt 会做什么?先模拟一下:
sudo apt install -s 软件名
-s(simulate)会显示将要执行的操作,但不会真正执行。
6.3 锁定软件版本(不被升级)
# 锁定版本
sudo apt-mark hold 软件名
# 解除锁定
sudo apt-mark unhold 软件名
# 查看锁定状态
apt-mark showhold
6.3 锁定软件版本(不被升级)
# 锁定版本
sudo apt-mark hold 软件名
# 解除锁定
sudo apt-mark unhold 软件名
# 查看锁定状态
apt-mark showhold
6.4 清理缓存
APT 下载的安装包会缓存在 /var/cache/apt/archives/,时间久了会占用大量空间:
# 清理已安装包的缓存
sudo apt clean
6.5 查看安装日志
# 查看 dpkg 日志
cat /var/log/dpkg.log
# 查看 apt 历史日志
cat /var/log/apt/history.log
七、常见问题与排错
7.1 GPG 密钥错误
W: GPG error: http://xxx ... NO_PUBKEY XXXXXXXX
解决:
# 导入缺失的密钥
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXX
# 或者(推荐,apt-key 已废弃)
curl -fsSL https://xxx.gpg | sudo gpg --dearmor -o /usr/share/keyrings/xxx.gpg
7.2 依赖冲突
E: Unable to correct problems, you have held broken packages.
解决步骤:
# 1. 尝试修复
sudo apt --fix-broken install
# 2. 更新索引
sudo apt update
# 3. 如果还不行,查看哪个包被锁定了
apt-mark showhold
# 4. 解锁后重试
sudo apt-mark unhold 问题包名
7.3 软件源 404 错误
通常是源已经过期或不存在了:
# 查看哪个源出错
sudo apt update 2>&1 | grep "404"
# 编辑源列表,删除或注释出错的行
sudo vim /etc/apt/sources.list
# 或
sudo vim /etc/apt/sources.list.d/xxx.list
7.4 磁盘空间不足
# 查看磁盘使用
df -h
# 清理 apt 缓存
sudo apt clean
# 清理旧内核(谨慎操作)
sudo apt autoremove --purge
八、速查表
| 操作 | 命令 |
|---|---|
| 更新软件索引 | sudo apt update |
| 升级所有已安装软件 | sudo apt upgrade |
| 安装软件 | sudo apt install 软件名 |
| 卸载软件(保留配置) | sudo apt remove 软件名 |
| 彻底卸载(含配置) | sudo apt remember |
| 清理无用依赖 | sudo apt autoremove |
| 搜索软件 | apt search 关键词 |
| 查看软件信息 | apt show 软件名 |
| 列出已安装包 | apt list --installed |
| 安装本地 .deb | sudo dpkg -i 文件.deb |
| 修复依赖 | sudo apt --fix-broken install |
| 同样锁定版本 | sudo apt-mark hold 软件名 |
| 清理缓存 | sudo apt clean |
| 添加 PPA | sudo add-apt-repository ppa:xxx/xxx |
九、避坑指南
⚠️ 坑1:update 不是升级软件
apt update 只更新索引,不升级软件。要升级必须再执行 apt upgrade。
⚠️ 坑2:apt upgrade 不会安装新依赖
如果某个软件的升级需要升级软件。这时需要用:
sudo apt full-upgrade
full-upgrade 允许安装新包和删除包来完成升级。
⚠️ 坑3:不要随意添加不信任的源
第三方源(尤其是来路不明的 PPA)可能包含恶意软件或导致系统不稳定。添加前确认来源可信。
⚠️ 坑4:apt-key 已被废弃
Ubuntu 22.04+ 推荐使用 /usr/share/keyrings/ 目录管理 GPG 密钥,而不是 apt-key。
⚠️ 坑5:dpkg -i 不解决依赖
直接用 dpkg 安装 .deb 文件时,如果缺少依赖会失败。用 apt --fix-broken install 修复。
⚠️ 坑6:换源后忘记 apt update
修改了 /etc/apt/sources.list 后,必须执行 sudo apt update la清理这些「孤儿包」。
十、课后练习
练习1:完整的软件管理流程
- 安装
git和curl。 - 尝试一个不信任的 PPA 仓库(仅供练习)。
- 升级所有已安装软件。
- 卸载一个过时的软件并彻底清除其配置。 ```