跳到主要内容

软件包管理

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

包管理器对比

功能APTYUM/DNFPacman
安装包apt installyum installpacman -S
删除包apt removeyum removepacman -R
更新源apt updateyum makecachepacman -Sy
升级包apt upgradeyum updatepacman -Su
搜索包apt searchyum searchpacman -Ss
包信息apt showyum infopacman -Si
已安装apt list --installedyum list installedpacman -Q

小结

本章我们学习了:

  1. APT:Ubuntu/Debian 的包管理器
  2. YUM/DNF:CentOS/RHEL/Fedora 的包管理器
  3. Pacman:Arch Linux 的包管理器
  4. Snap/Flatpak:通用包格式
  5. 源码编译:从源码安装软件
  6. 最佳实践:定期更新、清理、锁定版本

练习

  1. 使用包管理器安装、更新和删除一个软件包
  2. 配置国内镜像源加速软件下载
  3. 使用 Snap 或 Flatpak 安装一个软件
  4. 从源码编译安装一个简单的软件