Linux软件包管理
包管理器概述
常见包管理器
| 发行版 | 包管理器 | 底层工具 | 包格式 |
|---|---|---|---|
| Debian/Ubuntu | apt | dpkg | .deb |
| RHEL/CentOS 8+ | dnf | rpm | .rpm |
| RHEL/CentOS 7 | yum | rpm | .rpm |
| Fedora | dnf | rpm | .rpm |
| Arch Linux | pacman | - | .pkg.tar.zst |
| openSUSE | zypper | rpm | .rpm |
跨发行版工具
| 工具 | 特点 |
|---|---|
| Flatpak | 沙箱化应用,跨发行版 |
| Snap | Ubuntu主导,自动更新 |
| AppImage | 单文件,无需安装 |
APT(Debian/Ubuntu)
基本命令
# 更新软件源索引
sudo apt update
# 升级所有可升级的包
sudo apt upgrade
# 完整升级(可能删除/安装新包)
sudo apt full-upgrade
# 安装软件包
sudo apt install package
sudo apt install package1 package2 # 安装多个
sudo apt install -y package # 自动确认
# 删除软件包
sudo apt remove package # 删除但保留配置
sudo apt purge package # 完全删除(含配置)
sudo apt autoremove # 删除不需要的依赖
# 重新安装
sudo apt reinstall package
# 搜索软件包
apt search keyword
apt search ^nginx # 搜索以nginx开头的包
# 查看软件包信息
apt show package
apt-cache show package # 传统命令
# 列出软件包
apt list # 所有包
apt list --installed # 已安装的包
apt list --upgradable # 可升级的包
# 清理缓存
sudo apt clean # 清理下载的包文件
sudo apt autoclean # 清理过期的包文件软件源配置
# 软件源配置文件
/etc/apt/sources.list
/etc/apt/sources.list.d/*.list
# 添加PPA(Ubuntu)
sudo add-apt-repository ppa:user/ppa-name
sudo add-apt-repository --remove ppa:user/ppa-name
# 手动添加软件源
echo "deb http://archive.ubuntu.com/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/custom.listsources.list格式
# 格式: deb/deb-src URL 发行版代号 组件
deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
# 组件说明:
# main - 官方支持的自由软件
# restricted - 官方支持的非自由软件
# universe - 社区维护的自由软件
# multiverse - 非自由软件
固定软件版本
# 查看可用版本
apt-cache madison package
# 安装指定版本
sudo apt install package=version
# 固定版本(防止自动升级)
echo "package hold" | sudo dpkg --set-selections
# 解除固定
echo "package install" | sudo dpkg --set-selections
# 查看固定状态
dpkg --get-selections | grep holdDNF/YUM(RHEL/CentOS/Fedora)
DNF基本命令
# 更新元数据
sudo dnf makecache
# 更新系统
sudo dnf update # 更新所有包
sudo dnf update package # 更新指定包
sudo dnf upgrade # 同update
# 安装软件包
sudo dnf install package
sudo dnf install package1 package2
# 删除软件包
sudo dnf remove package
sudo dnf erase package # 同remove
# 搜索软件包
dnf search keyword
dnf search all keyword # 搜索名称和描述
# 查看软件包信息
dnf info package
# 列出软件包
dnf list # 所有包
dnf list installed # 已安装
dnf list available # 可安装
# 查看文件属于哪个包
dnf provides /usr/bin/ls
dnf whatprovides /etc/passwd
# 清理缓存
sudo dnf clean all # 清理所有缓存
sudo dnf clean metadata # 只清理元数据软件组管理
# 列出软件组
dnf group list
dnf group list hidden # 显示隐藏组
# 查看组详情
dnf group info "Development Tools"
# 安装软件组
sudo dnf group install "Development Tools"
sudo dnf group install "GNOME Desktop"
# 删除软件组
sudo dnf group remove "Development Tools"仓库管理
# 列出仓库
dnf repolist
dnf repolist all # 包含禁用的仓库
# 启用/禁用仓库
sudo dnf config-manager --enable repo-id
sudo dnf config-manager --disable repo-id
# 添加仓库
sudo dnf config-manager --add-repo URL
# 仓库配置文件位置
/etc/yum.repos.d/*.repo.repo文件格式
[baseos]
name=CentOS Stream $releasever - BaseOS
baseurl=http://mirror.centos.org/centos/$releasever-stream/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=CentOS Stream $releasever - Extras
baseurl=http://mirror.centos.org/centos/$releasever-stream/extras/$basearch/os/
enabled=1
gpgcheck=1Pacman(Arch Linux)
基本命令
# 更新系统
sudo pacman -Syu # 更新软件源并升级
sudo pacman -Sy # 只更新软件源
# 安装软件包
sudo pacman -S package
sudo pacman -S --noconfirm package # 不需要确认
# 删除软件包
sudo pacman -R package # 只删除包
sudo pacman -Rs package # 删除包和不需要的依赖
sudo pacman -Rns package # 删除包、依赖和配置文件
# 搜索软件包
pacman -Ss keyword # 搜索仓库
pacman -Qs keyword # 搜索已安装
# 查看软件包信息
pacman -Si package # 仓库中的包信息
pacman -Qi package # 已安装包信息
# 列出软件包
pacman -Q # 所有已安装
pacman -Qe # 显式安装的包
pacman -Qn # 原生仓库的包
pacman -Qm # AUR安装的包
# 清理缓存
sudo pacman -Sc # 清理旧版本
sudo pacman -Scc # 清理所有缓存
# 查看文件属于哪个包
pacman -Qo /usr/bin/ls源码编译安装
基本流程
# 1. 下载源码
wget https://example.com/package-1.0.tar.gz
tar -xzf package-1.0.tar.gz
cd package-1.0
# 2. 配置
./configure --prefix=/usr/local --with-option
# 3. 编译
make -j$(nproc) # 使用所有CPU核心
# 4. 安装
sudo make install
# 5. 清理
make clean常用配置选项
# 指定安装路径
./configure --prefix=/opt/package
# 启用/禁用功能
./configure --enable-feature --disable-other
# 指定库路径
./configure --with-lib=/path/to/lib
# 查看帮助
./configure --help卸载源码安装的软件
# 如果有Makefile
sudo make uninstall
# 或手动删除
sudo rm -rf /usr/local/bin/package
sudo rm -rf /usr/local/lib/package依赖问题处理
APT依赖修复
# 修复依赖
sudo apt --fix-broken install
sudo apt -f install # 同上
# 强制安装(不推荐)
sudo dpkg -i --force-depends package.debDNF依赖处理
# 查看依赖
dnf deplist package
# 解决依赖问题
sudo dnf distro-sync # 同步所有包到最新版本RPM依赖查询
# 查看包依赖
rpm -qR package
rpm -qpR package.rpm # 未安装的包
# 查看文件依赖
ldd /usr/bin/program包管理最佳实践
定期维护
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
sudo apt autoclean
# RHEL/CentOS
sudo dnf update -y
sudo dnf autoremove
sudo dnf clean all
# Arch Linux
sudo pacman -Syu
sudo pacman -Sc安全更新
# Debian/Ubuntu 只安装安全更新
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# RHEL/CentOS
sudo dnf update --security # 只更新安全补丁
sudo dnf update-minimal --security # 最小安全更新锁定包版本
# APT (apt-mark)
sudo apt-mark hold package
sudo apt-mark unhold package
apt-mark showhold
# DNF (versionlock)
sudo dnf install python3-dnf-plugin-versionlock
sudo dnf versionlock package
sudo dnf versionlock-delete package
dnf versionlock list💡 包管理建议:
- 定期更新系统,特别是安全补丁
- 不要混用不同发行版的包
- 源码安装前先检查是否有现成的包
- 记录手动安装的软件,便于维护
🔗 相关笔记: 02.03_系统管理 05.01_编译工具链 99.02_常见配置文件