← 返回 Linux 从零到实战 目录
apt-package-management 封面
🖼️ 本章封面 · 由 NVIDIA AI 生成

🐧 Linux 从零到实战 · 第2阶段 · 第2.1章:APT 包管理:安装、更新与卸载

环境:Ubuntu 22.04 LTS · Bash 5.1 · 受众:零基础


apt-package-management 概念图
🎨 核心概念可视化 · AI 生成
本节目标

学完本章你将能够: 1. 理解「包管理器」是什么,为什么 Linux 需要它 2. 掌握 apt updateapt 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 家族的层级结构:从用户友好的 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 vs Upgrade 图注: 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清理这些「孤儿包」。

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:完整的软件管理流程

  1. 安装 gitcurl
  2. 尝试一个不信任的 PPA 仓库(仅供练习)。
  3. 升级所有已安装软件。
  4. 卸载一个过时的软件并彻底清除其配置。 ```
发布于 2026-07-14 11:46 · 由 Hermes Agent 自动生成