包管理器概述
Linux 的包管理器负责软件的安装、更新、删除和依赖解析。不同发行版有各自的包管理系统,但概念相通:仓库(Repository)中存放打包好的软件,包管理器从仓库下载并安装,自动处理依赖关系。
| 发行版家族 | 高级包管理器 | 底层工具 | 包格式 |
|---|---|---|---|
| Debian / Ubuntu | apt | dpkg | .deb |
| Red Hat / CentOS / Fedora | dnf / yum | rpm | .rpm |
| Arch Linux / Manjaro | pacman | pacman | .pkg.tar.zst |
| openSUSE | zypper | rpm | .rpm |
| Alpine Linux | apk | apk | .apk |
apt:Debian/Ubuntu 包管理
常用 apt 命令
# 更新软件包索引(获取最新的包列表)
sudo apt update
# 升级已安装的软件包
sudo apt upgrade # 升级所有可更新的包
sudo apt upgrade nginx # 升级特定包
sudo apt full-upgrade # 升级(允许删除阻碍升级的包)
sudo apt dist-upgrade # 发行版升级(跨大版本)
# 安装软件包
sudo apt install nginx
sudo apt install nginx -y # -y 自动确认,不提示
sudo apt install vim curl wget git # 一次安装多个包
sudo apt install ./package.deb # 安装本地 .deb 文件
# 删除软件包
sudo apt remove nginx # 删除包(保留配置文件)
sudo apt purge nginx # 删除包和配置文件
sudo apt autoremove # 删除不再需要的依赖包
sudo apt clean # 清空本地缓存的 .deb 文件
sudo apt autoclean # 清空过时的缓存包
# 搜索软件包
apt search nginx # 搜索包名和描述
apt-cache search nginx # 同上(旧版方式)
apt list --installed # 列出已安装的包
apt list --installed | grep nginx
# 查看包信息
apt show nginx # 详细信息:版本、依赖、大小等
apt-cache policy nginx # 查看可用版本和仓库来源
apt depends nginx # 查看依赖关系
apt rdepends nginx # 查看被哪些包依赖
管理软件源(Repository)
# 查看当前软件源
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/
# 添加第三方 PPA(Ubuntu)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# 添加第三方软件源(通用方式)
# 1. 导入 GPG 密钥
curl -fsSL https://packages.example.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/example.gpg
# 2. 添加软件源
echo "deb [signed-by=/usr/share/keyrings/example.gpg] https://packages.example.com/apt stable main" | \
sudo tee /etc/apt/sources.list.d/example.list
# 3. 更新并安装
sudo apt update && sudo apt install example-package
# 切换 Ubuntu 镜像源(加速下载)
sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sudo apt update
dpkg:底层包管理
# 安装 .deb 文件(apt 可以处理依赖,dpkg 不能)
sudo dpkg -i package.deb
sudo apt install -f # 安装依赖修复 dpkg 安装失败
# 查看已安装的包
dpkg -l # 列出所有已安装包
dpkg -l | grep nginx # 过滤
dpkg -s nginx # 查看包状态和信息
dpkg -L nginx # 列出包安装了哪些文件
dpkg -S /usr/bin/vim # 查询文件属于哪个包
# 删除包
sudo dpkg -r nginx # 删除(保留配置)
sudo dpkg -P nginx # 彻底删除(含配置)
# 解压 .deb 文件查看内容
dpkg -x package.deb /tmp/extracted/ # 解压文件
dpkg -e package.deb /tmp/control/ # 解压控制文件
yum / dnf:Red Hat 系包管理
# DNF(Fedora/RHEL 8+/Rocky Linux 的现代包管理器)
# yum 与 dnf 命令基本相同,dnf 速度更快
# 更新
sudo dnf check-update # 检查可更新的包
sudo dnf update # 更新所有包
sudo dnf update nginx # 更新特定包
# 安装
sudo dnf install nginx
sudo dnf install nginx -y
sudo dnf install ./package.rpm # 安装本地 rpm
sudo dnf groupinstall "Development Tools" # 安装包组
# 删除
sudo dnf remove nginx
sudo dnf autoremove # 删除孤立依赖
sudo dnf clean all # 清理缓存
# 搜索和查询
dnf search nginx
dnf info nginx
dnf list installed
dnf list available | grep python
dnf provides /usr/bin/python3 # 查询文件属于哪个包(对应 dpkg -S)
# 管理仓库
dnf repolist # 列出启用的仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install epel-release # 安装 EPEL 扩展仓库
rpm:底层 RPM 包管理
# 安装/升级/删除 rpm 包
sudo rpm -ivh package.rpm # -i 安装 -v 详细 -h 进度条
sudo rpm -Uvh package.rpm # -U 升级(或安装)
sudo rpm -evh nginx # 删除
# 查询
rpm -qa # 列出所有已安装包
rpm -qa | grep nginx
rpm -qi nginx # 包信息
rpm -ql nginx # 包文件列表
rpm -qf /usr/bin/python3 # 查询文件属于哪个包
rpm -qR nginx # 查询依赖关系
# 验证包完整性
rpm -V nginx # 验证包文件是否被修改
rpm --checksig package.rpm # 验证 GPG 签名
pacman:Arch Linux 包管理
# 同步(更新索引并升级)
sudo pacman -Syu # 更新数据库并升级所有包
sudo pacman -Sy # 只更新数据库
# 安装
sudo pacman -S nginx # 安装
sudo pacman -S nginx vim curl # 安装多个
# 删除
sudo pacman -R nginx # 删除包
sudo pacman -Rns nginx # 删除包+依赖+配置
sudo pacman -Sc # 清理旧缓存
# 搜索
pacman -Ss nginx # 搜索(在线仓库)
pacman -Qs nginx # 搜索(已安装)
pacman -Qi nginx # 包信息
pacman -Ql nginx # 包文件列表
pacman -Qo /usr/bin/vim # 查询文件属于哪个包
# AUR(Arch User Repository)——用 yay 或 paru
yay -S google-chrome
paru -S spotify
snap 与 flatpak
Snap(Canonical 出品)
自包含软件包,包含所有依赖,在沙箱中运行。优点:跨发行版安装,自动更新。缺点:启动速度较慢,占用空间大,与系统集成度较低。
Flatpak(社区主导)
与 Snap 类似的沙箱容器格式,通过 Flathub 仓库分发。与 GNOME/KDE 等桌面环境集成更好,在非 Ubuntu 发行版上更受欢迎。
# snap
snap find vlc # 搜索
sudo snap install vlc # 安装
sudo snap install code --classic # --classic 解除沙箱限制
snap list # 已安装的 snap 包
sudo snap refresh # 更新所有 snap
sudo snap remove vlc # 删除
# flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak search org.videolan.VLC # 搜索
flatpak install flathub org.videolan.VLC # 安装
flatpak list # 已安装
flatpak update # 更新
flatpak uninstall org.videolan.VLC # 删除
pip 与 npm:语言级包管理
# pip:Python 包管理
pip install requests # 安装
pip install requests==2.31.0 # 安装特定版本
pip install -r requirements.txt # 从文件批量安装
pip install --upgrade requests # 升级
pip uninstall requests # 删除
pip list # 列出已安装包
pip freeze > requirements.txt # 导出已安装包列表
pip show requests # 包信息
# 使用虚拟环境(隔离项目依赖)
python3 -m venv venv # 创建虚拟环境
source venv/bin/activate # 激活(Linux/macOS)
pip install -r requirements.txt # 在虚拟环境中安装
deactivate # 退出虚拟环境
# npm:Node.js 包管理
npm install express # 安装到 node_modules/
npm install -g typescript # -g 全局安装
npm install # 按 package.json 安装依赖
npm update # 更新依赖
npm uninstall lodash # 删除
npm list # 查看已安装包
npm list -g --depth=0 # 全局安装的包
npx create-react-app my-app # npx:临时执行包命令
从源码编译安装
# 当包管理器没有需要的版本时,从源码编译
# 1. 安装编译工具
sudo apt install build-essential # Debian/Ubuntu
sudo dnf groupinstall "Development Tools" # Fedora/RHEL
# 2. 下载源码
wget https://www.openssl.org/source/openssl-3.0.0.tar.gz
tar -xzf openssl-3.0.0.tar.gz
cd openssl-3.0.0/
# 3. 配置(生成 Makefile)
./configure --prefix=/usr/local/openssl # 指定安装路径
# 或使用 cmake
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/app
# 4. 编译(-j 并行编译,$(nproc) 为 CPU 核心数)
make -j$(nproc)
# 5. 安装
sudo make install
# 6. 更新动态链接库缓存
sudo ldconfig
# 卸载(如果有 uninstall target)
sudo make uninstall
包管理最佳实践
- 定期更新:
sudo apt update && sudo apt upgrade保持系统安全 - 使用官方源:尽量从发行版官方仓库安装,第三方 PPA/源要谨慎评估
- 清理缓存:
sudo apt clean && sudo apt autoremove释放空间 - Python 用虚拟环境:不要直接往系统 Python 安装包(可能与系统工具冲突)
- 记录依赖:Python 用 requirements.txt,Node.js 用 package.json,方便迁移复现
本章小结
Linux 软件包管理的核心要点:① 高级包管理器(apt/dnf/pacman)处理依赖,底层工具(dpkg/rpm)直接操作包文件——两者互补;② apt update(更新索引)和 apt upgrade(升级软件)是两个独立步骤,不要混淆;③ dpkg -L 包名 查看包安装了哪些文件,dpkg -S /路径 反查文件属于哪个包;④ 添加第三方源前先导入 GPG 公钥,验证包的真实性;⑤ Python 项目务必使用虚拟环境(python3 -m venv)隔离依赖,避免污染系统 Python;⑥ 从源码编译时 make -j$(nproc) 利用所有 CPU 核心并行编译;⑦ Snap/Flatpak 适合安装官方仓库没有或版本较旧的应用。