核心 · Key Idea
一句话:包管理器是发行版的「应用商店」 —— 解决依赖、签名验证、统一升级、卸载留痕。生产环境装软件先用包管理器,源码编译是最后选项。
主流包管理器#
- Debian / Ubuntu
- apt(高层)/ dpkg(底层);包后缀 .deb
- RHEL / CentOS / Fedora / Rocky
- dnf(新)/ yum(旧);包后缀 .rpm
- Alpine
- apk;轻量,常用于容器
- Arch
- pacman;滚动更新
- macOS
- brew(用户级)
- 跨发行版
- snap / flatpak / appimage(沙箱)
- 语言级
- pip / npm / cargo / gem / composer(不算系统包)
打个比方#
打个比方 · Analogy
包管理器 = 正规应用商店:自动装依赖、验证签名、出问题一键卸载。
源码编译 = 自己拼乐高:你能完全控制,但升级 / 卸载 / 依赖都得自己记账。
常用命令对比#
# Ubuntu / Debian
sudo apt update # 刷源
sudo apt install -y nginx # 装
sudo apt upgrade # 升级所有包
sudo apt remove nginx # 卸(保留配置)
sudo apt purge nginx # 卸 + 删配置
apt list --installed | grep nginx
apt-cache search keyword
dpkg -L nginx # 列文件
# RHEL / Fedora
sudo dnf install -y nginx
sudo dnf update
sudo dnf remove nginx
rpm -qa | grep nginx
rpm -ql nginx
# Arch
sudo pacman -S nginx
sudo pacman -Syu # 同步 + 升级所有
yay -S aur-package # AUR
# Alpine
apk add nginx
apk update && apk upgrade关键概念#
源 / 仓库Repository
/etc/apt/sources.list、/etc/yum.repos.d/。换镜像源大幅加速。
依赖 / 反向依赖Depends / Reverse Depends
包之间的依赖网。删一个常常牵连一片。
签名GPG / RPM Signature
源仓库公钥校验包没被篡改。第三方仓库要先导入 key。
锁版本Pin / Hold
apt-mark hold 把包锁在当前版本,防意外升级。
PPA / COPR第三方源
Ubuntu 的 PPA、Fedora 的 COPR,用户社区构建包。
snap/flatpak沙箱包
自带依赖、跨发行版,但磁盘占用大、启动慢。
怎么工作#
实操要点#
-
永远先 update 再 install:
apt update && apt install。 -
自动续期:Debian/Ubuntu 装
unattended-upgrades自动打安全补丁。 -
加第三方源:导入 GPG key → 写
/etc/apt/sources.list.d/xxx.list→apt update。 -
服务器最小化:装 server / minimal 镜像,不要再装 desktop 套件。
-
容器里:alpine 用 apk、ubuntu/debian 用 apt,装完清缓存:
rm -rf /var/lib/apt/lists/*,镜像更小。 -
不要
pip install --user当系统包用:CI / 多人环境会乱。Python 服务用 venv / pipx / uv。 -
想找哪个包提供某文件:
apt-file search /usr/bin/nginx # Debian dnf provides /usr/bin/nginx # RHEL
易混点#
系统包管理
apt / dnf / brew。
管系统级二进制 + 库。
管系统级二进制 + 库。
语言包管理
pip / npm / cargo。
管应用语言依赖,**装到项目而非系统**。
管应用语言依赖,**装到项目而非系统**。