Linux软件包管理

包管理器概述

常见包管理器

发行版包管理器底层工具包格式
Debian/Ubuntuaptdpkg.deb
RHEL/CentOS 8+dnfrpm.rpm
RHEL/CentOS 7yumrpm.rpm
Fedoradnfrpm.rpm
Arch Linuxpacman-.pkg.tar.zst
openSUSEzypperrpm.rpm

跨发行版工具

工具特点
Flatpak沙箱化应用,跨发行版
SnapUbuntu主导,自动更新
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.list

sources.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 hold

DNF/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=1

Pacman(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.deb

DNF依赖处理

# 查看依赖
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_常见配置文件