软件包管理
Linux 系统使用包管理器来安装、更新和删除软件包。不同的发行版有不同的包管理器。
APT (Ubuntu/Debian)
APT (Advanced Package Tool) 是 Debian 系发行版的包管理器。
软件源配置
软件源配置文件位于 /etc/apt/sources.list 和 /etc/apt/sources.list.d/。
# 查看软件源
cat /etc/apt/sources.list
# 添加软件源(以 Docker 为例)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 国内镜像源(阿里云)
# 编辑 /etc/apt/sources.list,替换为:
# deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
更新软件源
# 更新软件源索引
sudo apt update
# 升级所有软件包
sudo apt upgrade
# 完整升级(包括依赖关系变化)
sudo apt full-upgrade
# 更新并升级(常用组合)
sudo apt update && sudo apt upgrade -y
安装软件包
# 安装软件包
sudo apt install package_name
# 安装多个软件包
sudo apt install package1 package2 package3
# 安装指定版本
sudo apt install package_name=1.2.3
# 重新安装
sudo apt reinstall package_name
# 安装本地 deb 包
sudo dpkg -i package.deb
# 修复依赖问题
sudo apt --fix-broken install
删除软件包
# 删除软件包(保留配置)
sudo apt remove package_name
# 删除软件包和配置
sudo apt purge package_name
# 删除不再需要的依赖包
sudo apt autoremove
# 清理下载的包文件
sudo apt clean # 清理所有
sudo apt autoclean # 只清理过期的
查询软件包
# 搜索软件包
apt search keyword
# 查看软件包信息
apt show package_name
# 查看已安装的软件包
apt list --installed
# 查看可升级的软件包
apt list --upgradable
# 查看软件包依赖
apt depends package_name
# 查看哪个包包含某个文件
apt-file search /path/to/file
dpkg 底层工具
# 安装 deb 包
sudo dpkg -i package.deb
# 删除包
sudo dpkg -r package_name
# 查看已安装包
dpkg -l
# 查看包安装的文件
dpkg -L package_name
# 查看文件属于哪个包
dpkg -S /path/to/file
YUM/DNF (CentOS/RHEL/Fedora)
软件源配置
# 配置文件目录
/etc/yum.repos.d/
# 添加软件源
sudo yum-config-manager --add-repo https://example.com/repo.repo
# 启用/禁用软件源
sudo yum-config-manager --enable repo_name
sudo yum-config-manager --disable repo_name
# 查看软件源
yum repolist all
更新系统
# 更新软件源缓存
sudo yum makecache
# 更新所有软件包
sudo yum update
# 更新指定软件包
sudo yum update package_name
# 安全更新
sudo yum update --security
安装软件包
# 安装软件包
sudo yum install package_name
# 安装多个软件包
sudo yum install package1 package2
# 安装本地 rpm 包
sudo yum localinstall package.rpm
# 重新安装
sudo yum reinstall package_name
删除软件包
# 删除软件包
sudo yum remove package_name
# 删除包及其依赖
sudo yum autoremove package_name
查询软件包
# 搜索软件包
yum search keyword
# 查看软件包信息
yum info package_name
# 查看已安装的软件包
yum list installed
# 查看可更新的软件包
yum list updates
# 查看软件包依赖
yum deplist package_name
# 查看哪个包提供某个文件
yum provides /path/to/file
# 查看软件包安装的文件
rpm -ql package_name
DNF (Fedora/RHEL 8+)
DNF 是 YUM 的下一代版本,用法类似:
# 基本命令与 yum 相同
sudo dnf install package_name
sudo dnf remove package_name
sudo dnf update
# 额外功能
sudo dnf history # 查看操作历史
sudo dnf history undo ID # 撤销操作
rpm 底层工具
# 安装 rpm 包
sudo rpm -i package.rpm
# 升级包
sudo rpm -U package.rpm
# 删除包
sudo rpm -e package_name
# 查询已安装包
rpm -qa
# 查询包信息
rpm -qi package_name
# 查看包安装的文件
rpm -ql package_name
# 查看文件属于哪个包
rpm -qf /path/to/file
# 验证包完整性
rpm -V package_name
Pacman (Arch Linux)
更新系统
# 更新软件源并升级系统
sudo pacman -Syu
# 只更新软件源
sudo pacman -Sy
# 只升级软件包
sudo pacman -Su
安装软件包
# 安装软件包
sudo pacman -S package_name
# 安装多个软件包
sudo pacman -S package1 package2
# 安装本地包
sudo pacman -U package.pkg.tar.zst
# 安装远程包
sudo pacman -U https://example.com/package.pkg.tar.zst
删除软件包
# 删除软件包
sudo pacman -R package_name
# 删除包及其依赖
sudo pacman -Rs package_name
# 删除包、依赖和配置
sudo pacman -Rns package_name
# 清理缓存
sudo pacman -Sc # 只清理未安装的
sudo pacman -Scc # 清理所有
查询软件包
# 搜索软件包
pacman -Ss keyword
# 查看软件包信息
pacman -Si package_name
# 查看已安装包
pacman -Q
# 查看已安装包信息
pacman -Qi package_name
# 查看包安装的文件
pacman -Ql package_name
# 查看文件属于哪个包
pacman -Qo /path/to/file
# 查看孤立包
pacman -Qdt
AUR (Arch User Repository)
AUR 是 Arch Linux 的用户软件仓库:
# 使用 yay(AUR 助手)
# 安装 yay
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# 使用 yay 安装软件
yay -S package_name
# 更新系统和 AUR 包
yay -Syu
# 搜索 AUR
yay -Ss keyword
Snap
Snap 是 Ubuntu 推出的通用包格式:
# 安装 snap(如果未安装)
sudo apt install snapd
# 搜索软件包
snap find keyword
# 安装软件包
sudo snap install package_name
# 查看已安装
snap list
# 更新软件包
sudo snap refresh package_name
sudo snap refresh # 更新所有
# 删除软件包
sudo snap remove package_name
# 查看软件包信息
snap info package_name
Flatpak
Flatpak 是另一个通用包格式:
# 安装 flatpak
sudo apt install flatpak
# 添加 Flathub 仓库
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 搜索软件包
flatpak search keyword
# 安装软件包
flatpak install flathub package_name
# 查看已安装
flatpak list
# 更新软件包
flatpak update package_name
flatpak update # 更新所有
# 删除软件包
flatpak uninstall package_name
# 运行软件包
flatpak run package_name
从源码编译安装
基本流程
# 1. 下载源码
wget https://example.com/package-1.0.tar.gz
tar -xzvf package-1.0.tar.gz
cd package-1.0
# 2. 安装依赖
# Ubuntu/Debian
sudo apt build-dep package_name
# 或
sudo apt install build-essential
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
# 3. 配置
./configure --prefix=/usr/local
# 4. 编译
make
# 5. 安装
sudo make install
# 6. 卸载(如果需要)
sudo make uninstall
CMake 项目
mkdir build
cd build
cmake ..
make
sudo make install
软件包管理最佳实践
定期更新
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# CentOS/RHEL
sudo yum update -y
# Arch Linux
sudo pacman -Syu
清理不需要的包
# Ubuntu/Debian
sudo apt autoremove
sudo apt autoclean
# CentOS/RHEL
sudo yum autoremove
# Arch Linux
sudo pacman -Rns $(pacman -Qdtq)
锁定软件包版本
# Ubuntu/Debian
sudo apt-mark hold package_name
sudo apt-mark unhold package_name
# CentOS/RHEL(使用 versionlock 插件)
sudo yum install yum-plugin-versionlock
sudo yum versionlock package_name
sudo yum versionlock clear
查看软件包变更历史
# Ubuntu/Debian
cat /var/log/apt/history.log
# CentOS/RHEL
yum history
# Arch Linux
cat /var/log/pacman.log
常用软件安装示例
开发工具
# Git
sudo apt install git # Ubuntu/Debian
sudo yum install git # CentOS/RHEL
sudo pacman -S git # Arch Linux
# Python
sudo apt install python3 python3-pip
sudo yum install python3 python3-pip
sudo pacman -S python python-pip
# Node.js (使用 NodeSource)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs
# Docker
curl -fsSL https://get.docker.com | sh
Web 服务器
# Nginx
sudo apt install nginx
sudo yum install nginx
sudo pacman -S nginx
# Apache
sudo apt install apache2
sudo yum install httpd
sudo pacman -S apache
数据库
# MySQL
sudo apt install mysql-server
sudo yum install mysql-server
# PostgreSQL
sudo apt install postgresql postgresql-contrib
sudo yum install postgresql-server
包管理器对比
| 功能 | APT | YUM/DNF | Pacman |
|---|---|---|---|
| 安装包 | apt install | yum install | pacman -S |
| 删除包 | apt remove | yum remove | pacman -R |
| 更新源 | apt update | yum makecache | pacman -Sy |
| 升级包 | apt upgrade | yum update | pacman -Su |
| 搜索包 | apt search | yum search | pacman -Ss |
| 包信息 | apt show | yum info | pacman -Si |
| 已安装 | apt list --installed | yum list installed | pacman -Q |
小结
本章我们学习了:
- APT:Ubuntu/Debian 的包管理器
- YUM/DNF:CentOS/RHEL/Fedora 的包管理器
- Pacman:Arch Linux 的包管理器
- Snap/Flatpak:通用包格式
- 源码编译:从源码安装软件
- 最佳实践:定期更新、清理、锁定版本
练习
- 使用包管理器安装、更新和删除一个软件包
- 配置国内镜像源加速软件下载
- 使用 Snap 或 Flatpak 安装一个软件
- 从源码编译安装一个简单的软件