包管理
apt/yum 与 snap。
包管理
这一课你将能做到
- 用 apt 完成软件的搜索、安装、升级、卸载全流程,并能处理常见的依赖报错
- 查看已安装包的版本、文件清单和依赖关系,排查「某个命令是哪个包提供的」这类问题
- 理解 apt 仓库的工作原理,能更换国内镜像源加速下载,知道 PPA 和 snap 的适用场景
为什么要学
Windows 装软件是「下载 exe → 双击 → 下一步」,Linux 装软件是「一条命令,自动解决依赖」。本站服务器(Ubuntu)上的 Nginx、MySQL、Redis 全部通过 apt 安装。包管理器不仅负责安装,还管升级(安全补丁)、卸载(清理残留)、依赖解析(A 依赖 B,装 A 时自动装 B)。
不理解包管理,你会在「为什么 apt install 报错」「为什么升级后服务起不来」「磁盘被旧内核占满」这类问题上反复栽跟头。面试中「apt 和 yum 的区别」「如何查找某个文件属于哪个包」是运维基础题。
先建立图像
apt 的工作流程:
你的命令 apt 内部动作 远程仓库
┌──────────────┐
│ apt install │ ──→ 1. 读本地包索引 (/var/lib/apt/lists)
│ nginx │ 2. 解析依赖树(nginx 依赖哪些库)
└──────────────┘ 3. 计算需要下载的 .deb 包清单 ──→ ┌─────────────┐
4. 下载 .deb 到 /var/cache/apt ←── │ archive. │
5. 用 dpkg 解包安装 │ ubuntu.com │
6. 运行配置脚本、启动服务 └─────────────┘
关键概念:
- 仓库(Repository):存放 .deb 包和索引的远程服务器
- 索引:包名、版本、依赖关系的清单,apt update 就是更新它
- dpkg:底层的包安装工具,apt 是它的「智能前端」
跟着做
步骤 1:更新包索引——一切操作的前提
sudo apt update
这条命令不升级任何软件,只是从仓库下载最新的「包清单」。装任何软件前都应该先跑一遍,否则可能装到旧版本或报「找不到包」。
步骤 2:搜索与查看包信息
apt search redis # 搜索名字含 redis 的包
apt show redis-server # 查看包的详细信息:版本、依赖、描述、大小
apt policy redis-server # 查看可安装的版本和优先级
步骤 3:安装软件
# 安装单个包,-y 自动回答 yes(脚本中必加)
sudo apt install -y nginx
# 一次装多个
sudo apt install -y redis-server mysql-server
# 安装指定版本(先看 apt policy 有哪些版本)
sudo apt install -y nginx=1.24.0-2ubuntu7
# 只下载不安装(离线部署时有用)
apt download nginx # 下载 .deb 到当前目录
sudo dpkg -i nginx_*.deb # 本地安装(依赖不全时会报错)
sudo apt -f install # 修复 dpkg 留下的依赖问题
步骤 4:升级与卸载
# 查看哪些包可以升级
apt list --upgradable
# 升级所有包(生产环境谨慎!先看变更列表)
sudo apt upgrade -y
# 完整升级(允许卸载冲突包、装新依赖,更接近「发行版升级」)
sudo apt full-upgrade -y
# 卸载软件(保留配置文件)
sudo apt remove nginx
# 彻底卸载(连配置文件一起删)
sudo apt purge nginx
# 清理不再被需要的依赖(释放空间)
sudo apt autoremove -y
生产经验:升级 MySQL 这类核心服务前,先在测试环境验证;apt upgrade 会顺带升级内核,升级后需重启生效。
步骤 5:查询已安装的包
# 列出所有已安装的包
apt list --installed
# 查某个包是否已安装及版本
apt list --installed | grep nginx
dpkg -l | grep nginx
# 查看某个包安装了哪些文件(配置文件、二进制在哪)
dpkg -L nginx-core
# 反查:某个文件是哪个包提供的(排查神器)
dpkg -S /usr/sbin/nginx
# 输出:nginx-core: /usr/sbin/nginx
# 查看包的依赖关系
apt-cache depends nginx
apt-cache rdepends nginx # 反向依赖:谁依赖 nginx