Skip to content

软件包管理

概述

软件包管理是 Linux 系统管理的核心任务之一。不同的发行版使用不同的包管理系统,本章介绍主要的包管理工具。

包管理系统对比

发行版包格式低级工具高级工具
Debian/Ubuntu.debdpkgapt, apt-get
RHEL/Fedora.rpmrpmdnf, yum
Arch Linux.pkg.tar.zstpacmanpacman
openSUSE.rpmrpmzypper

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-name

dpkg - 低级包管理

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/nginx

DNF/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 all

rpm - 低级包管理

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 all

Pacman(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 package

flatpak

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.App

AppImage

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-devel

checkinstall

创建可管理的包:

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)aptdpkg
  • DNF/YUM(Fedora/RHEL)dnfrpm
  • Pacman(Arch)pacman
  • 通用格式:snap、flatpak、AppImage
  • 源码编译:configure、make、install

选择合适的包管理方式,保持系统整洁和安全。


上一章:进程管理

下一章:服务管理