软件包管理
概述
软件包管理是 Linux 系统管理的核心任务之一。不同的发行版使用不同的包管理系统,本章介绍主要的包管理工具。
包管理系统对比
| 发行版 | 包格式 | 低级工具 | 高级工具 |
|---|---|---|---|
| Debian/Ubuntu | .deb | dpkg | apt, apt-get |
| RHEL/Fedora | .rpm | rpm | dnf, yum |
| Arch Linux | .pkg.tar.zst | pacman | pacman |
| openSUSE | .rpm | rpm | zypper |
APT(Debian/Ubuntu)
更新软件源
bash
# 更新软件包列表
$ sudo apt update
# 升级所有软件包
$ sudo apt upgrade
# 升级并处理依赖变化
$ sudo apt full-upgrade
# 更新和升级一起
$ sudo apt update && sudo apt upgrade -y搜索软件包
bash
# 搜索软件包
$ apt search keyword
$ apt search nginx
# 显示软件包信息
$ apt show nginx
# 列出已安装的包
$ apt list --installed
# 列出可升级的包
$ apt list --upgradable安装软件包
bash
# 安装软件包
$ sudo apt install package_name
$ sudo apt install nginx
# 安装多个包
$ sudo apt install nginx php mysql-server
# 安装特定版本
$ sudo apt install nginx=1.18.0-0ubuntu1
# 安装本地 .deb 文件
$ sudo apt install ./package.deb
# 重新安装
$ sudo apt reinstall nginx删除软件包
bash
# 删除软件包(保留配置)
$ sudo apt remove nginx
# 删除软件包和配置
$ sudo apt purge nginx
# 删除不再需要的依赖
$ sudo apt autoremove
# 清理下载的包文件
$ sudo apt clean
$ sudo apt autoclean软件源配置
软件源配置文件:/etc/apt/sources.list
bash
# 查看软件源
$ cat /etc/apt/sources.list
# 添加 PPA(Ubuntu)
$ sudo add-apt-repository ppa:user/ppa-name
$ sudo apt update
# 删除 PPA
$ sudo add-apt-repository --remove ppa:user/ppa-namedpkg - 低级包管理
bash
# 安装 .deb 包
$ sudo dpkg -i package.deb
# 修复依赖问题
$ sudo apt install -f
# 删除软件包
$ sudo dpkg -r package_name
# 列出已安装的包
$ dpkg -l
$ dpkg -l | grep nginx
# 显示包信息
$ dpkg -s nginx
# 列出包的文件
$ dpkg -L nginx
# 查找文件属于哪个包
$ dpkg -S /usr/sbin/nginxDNF/YUM(Fedora/RHEL)
更新软件
bash
# 检查更新
$ sudo dnf check-update
# 升级所有软件包
$ sudo dnf upgrade
$ sudo dnf update
# 升级特定包
$ sudo dnf upgrade nginx搜索和安装
bash
# 搜索软件包
$ dnf search nginx
# 显示包信息
$ dnf info nginx
# 安装软件包
$ sudo dnf install nginx
# 安装本地 rpm
$ sudo dnf install ./package.rpm
# 安装组
$ sudo dnf groupinstall "Development Tools"删除软件包
bash
# 删除软件包
$ sudo dnf remove nginx
# 删除不需要的依赖
$ sudo dnf autoremove
# 清理缓存
$ sudo dnf clean allrpm - 低级包管理
bash
# 安装 rpm 包
$ sudo rpm -ivh package.rpm
# 升级 rpm 包
$ sudo rpm -Uvh package.rpm
# 删除软件包
$ sudo rpm -e package_name
# 查询已安装的包
$ rpm -qa
$ rpm -qa | grep nginx
# 查询包信息
$ rpm -qi nginx
# 列出包的文件
$ rpm -ql nginx
# 查找文件属于哪个包
$ rpm -qf /usr/sbin/nginx软件源配置
bash
# 源配置目录
$ ls /etc/yum.repos.d/
# 添加 EPEL 源
$ sudo dnf install epel-release
# 列出已启用的源
$ dnf repolist
# 列出所有源
$ dnf repolist allPacman(Arch Linux)
同步和更新
bash
# 同步软件包数据库
$ sudo pacman -Sy
# 升级所有软件包
$ sudo pacman -Su
# 同步并升级
$ sudo pacman -Syu搜索和安装
bash
# 搜索软件包
$ pacman -Ss nginx
# 显示包信息
$ pacman -Si nginx
# 安装软件包
$ sudo pacman -S nginx
# 安装本地包
$ sudo pacman -U package.pkg.tar.zst删除软件包
bash
# 删除软件包
$ sudo pacman -R nginx
# 删除包及其依赖
$ sudo pacman -Rs nginx
# 删除包、依赖和配置
$ sudo pacman -Rns nginx
# 清理缓存
$ sudo pacman -Sc查询
bash
# 列出已安装的包
$ pacman -Q
$ pacman -Q | grep nginx
# 查询已安装包信息
$ pacman -Qi nginx
# 列出包的文件
$ pacman -Ql nginx
# 查找文件属于哪个包
$ pacman -Qo /usr/sbin/nginx通用工具
snap
bash
# 安装 snap
$ sudo apt install snapd
# 搜索 snap 包
$ snap find package
# 安装 snap 包
$ sudo snap install package
# 列出已安装的 snap
$ snap list
# 更新 snap 包
$ sudo snap refresh
# 删除 snap 包
$ sudo snap remove packageflatpak
bash
# 安装 flatpak
$ sudo apt install flatpak
# 添加 Flathub
$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 搜索应用
$ flatpak search application
# 安装应用
$ flatpak install flathub com.example.App
# 运行应用
$ flatpak run com.example.App
# 列出已安装
$ flatpak list
# 删除应用
$ flatpak uninstall com.example.AppAppImage
bash
# AppImage 是可执行文件,无需安装
$ chmod +x app.AppImage
$ ./app.AppImage从源码编译
典型步骤
bash
# 1. 下载源码
$ wget https://example.com/software.tar.gz
$ tar xzf software.tar.gz
$ cd software
# 2. 配置
$ ./configure --prefix=/usr/local
# 3. 编译
$ make
# 4. 安装
$ sudo make install安装编译工具
bash
# Debian/Ubuntu
$ sudo apt install build-essential
# Fedora
$ sudo dnf groupinstall "Development Tools"
# Arch Linux
$ sudo pacman -S base-develcheckinstall
创建可管理的包:
bash
# 安装 checkinstall
$ sudo apt install checkinstall
# 使用 checkinstall 代替 make install
$ sudo checkinstall
# 这会创建 .deb 包并安装实用技巧
查看已安装软件的大小
bash
# Debian/Ubuntu
$ dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -20
# Arch Linux
$ pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h | tail -20列出手动安装的包
bash
# Debian/Ubuntu
$ apt-mark showmanual
# Arch Linux
$ pacman -Qe修复损坏的包
bash
# Debian/Ubuntu
$ sudo apt --fix-broken install
$ sudo dpkg --configure -a
# Fedora
$ sudo dnf distro-sync锁定软件包版本
bash
# Debian/Ubuntu
$ sudo apt-mark hold package_name
$ sudo apt-mark unhold package_name
# 查看锁定的包
$ apt-mark showhold清理系统
bash
# Debian/Ubuntu
$ sudo apt autoremove
$ sudo apt autoclean
$ sudo apt clean
# 删除旧内核(Ubuntu)
$ sudo apt autoremove --purge小结
本章介绍了 Linux 软件包管理:
- APT(Debian/Ubuntu):
apt、dpkg - DNF/YUM(Fedora/RHEL):
dnf、rpm - Pacman(Arch):
pacman - 通用格式:snap、flatpak、AppImage
- 源码编译:configure、make、install
选择合适的包管理方式,保持系统整洁和安全。
上一章:进程管理
下一章:服务管理