Appearance
软件包管理
本章将介绍 Linux 软件包管理,包括 Debian/Ubuntu 的 apt/dpkg 和 RHEL/CentOS 的 yum/dnf/rpm,以及源码编译安装等方法。
软件包管理概述
什么是软件包?
软件包是软件的打包形式,包含:
- 可执行程序
- 配置文件
- 依赖关系信息
- 安装/卸载脚本
包管理器对比
| 发行版 | 包格式 | 包管理器 | 配置文件 |
|---|---|---|---|
| Debian/Ubuntu | .deb | apt, dpkg | /etc/apt/ |
| RHEL/CentOS | .rpm | yum, dnf, rpm | /etc/yum.repos.d/ |
| Arch Linux | .pkg.tar.zst | pacman | /etc/pacman.conf |
| openSUSE | .rpm | zypper | /etc/zypp/ |
apt - Debian/Ubuntu 包管理
更新软件源
bash
# apt (Advanced Package Tool) - Debian 系包管理器
# 更新软件源索引
sudo apt update
# 升级所有已安装的软件包
sudo apt upgrade
# 完整升级(可处理依赖关系变化)
sudo apt full-upgrade
# 升级单个软件包
sudo apt install --only-upgrade package_name
# 检查可升级的软件包
apt list --upgradable
# 清理不需要的依赖包
sudo apt autoremove
# 清理下载的软件包缓存
sudo apt clean
sudo apt autoclean软件包查询
bash
# 搜索软件包
apt search nginx
# 搜索已安装的软件包
apt search --installed nginx
# 显示软件包信息
apt show nginx
# 显示软件包依赖
apt depends nginx
# 显示反向依赖(哪些包依赖此包)
apt rdepends nginx
# 列出所有已安装的软件包
apt list --installed
# 列出所有软件包
apt list
# 按名称搜索软件包
apt list nginx
# 使用正则表达式搜索
apt list "nginx*"
# 查看软件包安装的文件
dpkg -L nginx软件包安装
bash
# 安装软件包
sudo apt install nginx
# 安装多个软件包
sudo apt install nginx mysql-server php
# 安装指定版本
sudo apt install nginx=1.18.0-0ubuntu1
# 安装时不安装推荐包
sudo apt install --no-install-recommends package_name
# 安装时仅下载不安装
sudo apt install --download-only nginx
# 重新安装软件包
sudo apt reinstall nginx
# 修复依赖关系
sudo apt install -f
sudo apt --fix-broken install软件包删除
bash
# 删除软件包(保留配置文件)
sudo apt remove nginx
# 删除软件包及其配置文件
sudo apt purge nginx
# 删除软件包及其依赖
sudo apt autoremove nginx
# 删除多个软件包
sudo apt remove nginx apache2
# 清理残留配置
dpkg -l | grep '^rc' | awk '{print $2}' | xargs sudo apt purge -y软件源配置
bash
# 软件源配置文件
/etc/apt/sources.list
/etc/apt/sources.list.d/
# 查看 sources.list 格式
cat /etc/apt/sources.list
# 格式说明:
# deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
# deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
# 组件说明:
# main - 官方支持的自由软件
# restricted - 官方支持的非自由软件(驱动等)
# universe - 社区维护的自由软件
# multiverse - 非自由软件
# 添加 PPA(Personal Package Archive)
sudo add-apt-repository ppa:nginx/stable
sudo apt update
# 删除 PPA
sudo add-apt-repository --remove ppa:nginx/stable
# 更换国内镜像源(Ubuntu)
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
sudo apt updatedpkg - 底层包管理
bash
# dpkg - Debian 包管理器底层工具
# 安装 deb 包
sudo dpkg -i package.deb
# 卸载软件包
sudo dpkg -r package_name
# 卸载软件包及配置
sudo dpkg -P package_name
# 查看软件包信息
dpkg -I package.deb
# 查看软件包内容
dpkg -c package.deb
# 查看已安装软件包列表
dpkg -l
# 查看软件包安装的文件
dpkg -L package_name
# 查询文件属于哪个包
dpkg -S /usr/bin/nginx
# 解压 deb 包(不安装)
dpkg -x package.deb /path/to/extract/
# 配置已解压的软件包
sudo dpkg --configure package_name
# 查看安装状态
dpkg -s package_name
# 修复依赖问题
sudo apt install -fyum/dnf - RHEL/CentOS 包管理
dnf 基本操作
bash
# dnf (Dandified YUM) - Fedora/RHEL 8+/CentOS 8+ 包管理器
# yum 是 dnf 的兼容层
# 更新软件源缓存
sudo dnf makecache
# 更新所有软件包
sudo dnf update
sudo dnf upgrade
# 更新指定软件包
sudo dnf update nginx
# 检查可用更新
sudo dnf check-update
# 清理缓存
sudo dnf clean all软件包查询
bash
# 搜索软件包
sudo dnf search nginx
# 显示软件包信息
sudo dnf info nginx
# 列出已安装的软件包
sudo dnf list installed
# 列出可安装的软件包
sudo dnf list available
# 列出所有软件包
sudo dnf list all
# 查看软件包依赖
sudo dnf deplist nginx
# 查看文件属于哪个包
sudo dnf provides /usr/bin/nginx
sudo dnf provides */nginx
# 查看软件包安装的文件
rpm -ql nginx
# 查看软件包变更日志
rpm -q --changelog nginx软件包安装
bash
# 安装软件包
sudo dnf install nginx
# 安装多个软件包
sudo dnf install nginx php mysql-server
# 安装指定版本
sudo dnf install nginx-1.20.1
# 重新安装软件包
sudo dnf reinstall nginx
# 只下载不安装
sudo dnf install --downloadonly --downloaddir=/tmp nginx
# 从本地 rpm 文件安装
sudo dnf localinstall package.rpm
# 安装软件包组
sudo dnf groupinstall "Development Tools"软件包删除
bash
# 删除软件包
sudo dnf remove nginx
# 删除软件包及其依赖
sudo dnf autoremove
# 删除多个软件包
sudo dnf remove nginx apache2
# 删除软件包组
sudo dnf groupremove "Development Tools"软件源配置
bash
# 软件源配置目录
/etc/yum.repos.d/
# 查看启用的软件源
sudo dnf repolist
# 查看所有软件源
sudo dnf repolist all
# 启用软件源
sudo dnf config-manager --set-enabled repository
# 禁用软件源
sudo dnf config-manager --set-disabled repository
# 添加软件源
sudo dnf config-manager --add-repo=https://example.com/repo.repo
# 添加 EPEL 源(CentOS/RHEL)
sudo dnf install epel-release
# 配置国内镜像源(CentOS)
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
-i.bak /etc/yum.repos.d/CentOS-*.repo
sudo dnf makecache软件包组管理
bash
# 列出软件包组
sudo dnf grouplist
# 查看组信息
sudo dnf groupinfo "Development Tools"
# 安装软件包组
sudo dnf groupinstall "Development Tools"
# 更新软件包组
sudo dnf groupupdate "Development Tools"
# 删除软件包组
sudo dnf groupremove "Development Tools"rpm - 底层包管理
bash
# rpm (Red Hat Package Manager) - RPM 包管理器底层工具
# 安装 rpm 包
sudo rpm -ivh package.rpm
# -i: 安装
# -v: 显示详细信息
# -h: 显示进度条
# 升级 rpm 包
sudo rpm -Uvh package.rpm
# 刷新 rpm 包(已安装则升级,否则不安装)
sudo rpm -Fvh package.rpm
# 卸载软件包
sudo rpm -e package_name
# 查看已安装软件包
rpm -qa
# 查看软件包信息
rpm -qi package_name
# 查看软件包安装的文件
rpm -ql package_name
# 查看文件属于哪个包
rpm -qf /usr/bin/nginx
# 查看软件包依赖
rpm -qR package_name
# 验证软件包
rpm -V package_name
# 导入 GPG 密钥
sudo rpm --import /path/to/key
# 检查软件包签名
rpm -K package.rpm
# 从 rpm 包中提取文件
rpm2cpio package.rpm | cpio -idv源码编译安装
编译安装流程
bash
# 源码编译安装基本流程:
# 1. 下载源码
# 2. 解压源码
# 3. 配置(configure)
# 4. 编译(make)
# 5. 安装(make install)
# 安装编译工具
# Debian/Ubuntu
sudo apt install build-essential
# RHEL/CentOS
sudo dnf groupinstall "Development Tools"编译安装示例
bash
# 示例:编译安装 nginx
# 1. 下载源码
wget https://nginx.org/download/nginx-1.24.0.tar.gz
# 2. 解压源码
tar -xzvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 3. 安装依赖
sudo apt install libpcre3-dev zlib1g-dev libssl-dev
# 4. 配置编译选项
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module
# 5. 编译
make -j$(nproc)
# 6. 安装
sudo make install
# 7. 验证安装
/usr/local/nginx/sbin/nginx -v
# 8. 创建 systemd 服务
sudo cat > /etc/systemd/system/nginx.service << 'EOF'
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginxconfigure 常用选项
bash
# configure 脚本常用选项
--prefix=PREFIX # 安装目录前缀(默认 /usr/local)
--exec-prefix=EPREFIX # 可执行文件安装目录
--bindir=DIR # 用户可执行文件目录
--libdir=DIR # 库文件目录
--includedir=DIR # 头文件目录
--datadir=DIR # 数据文件目录
--sysconfdir=DIR # 配置文件目录
--localstatedir=DIR # 状态文件目录
--enable-FEATURE # 启用特性
--disable-FEATURE # 禁用特性
--with-PACKAGE # 使用指定包
--without-PACKAGE # 不使用指定包
# 查看所有选项
./configure --help卸载编译安装的软件
bash
# 方法一:使用 make uninstall(如果支持)
cd nginx-1.24.0
sudo make uninstall
# 方法二:手动删除
sudo rm -rf /usr/local/nginx
# 方法三:使用 checkinstall 创建包后安装
sudo apt install checkinstall
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx
make
sudo checkinstall
# 这会创建一个 deb/rpm 包,方便管理其他包管理工具
snap - 通用包管理
bash
# snap - Ubuntu 开发的通用包格式
# 安装 snap(如果未安装)
sudo apt install snapd
# 搜索软件包
snap find nginx
# 安装软件包
sudo snap install nginx
# 安装指定通道
sudo snap install nginx --channel=edge
# 列出已安装的软件包
snap list
# 更新软件包
sudo snap refresh nginx
# 更新所有软件包
sudo snap refresh
# 回滚软件包
sudo snap revert nginx
# 删除软件包
sudo snap remove nginx
# 查看软件包信息
snap info nginx
# 查看软件包日志
snap logs nginx
# 管理服务
snap start nginx
snap stop nginx
snap restart nginxflatpak - 沙盒应用
bash
# flatpak - 沙盒化应用分发
# 安装 flatpak
sudo apt install flatpak
# 添加 Flathub 仓库
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 搜索应用
flatpak search nginx
# 安装应用
flatpak install flathub org.nginx.nginx
# 列出已安装应用
flatpak list
# 运行应用
flatpak run org.nginx.nginx
# 更新应用
flatpak update
# 删除应用
flatpak uninstall org.nginx.nginxpip - Python 包管理
bash
# pip - Python 包管理器
# 安装 pip
sudo apt install python3-pip
# 安装包
pip3 install package_name
# 安装指定版本
pip3 install package_name==1.0.0
# 安装到用户目录
pip3 install --user package_name
# 从 requirements.txt 安装
pip3 install -r requirements.txt
# 卸载包
pip3 uninstall package_name
# 列出已安装的包
pip3 list
# 查看包信息
pip3 show package_name
# 搜索包
pip3 search package_name
# 导出依赖
pip3 freeze > requirements.txt
# 升级 pip
pip3 install --upgrade pipnpm - Node.js 包管理
bash
# npm - Node.js 包管理器
# 安装 npm
sudo apt install npm
# 初始化项目
npm init
# 安装包
npm install package_name
# 全局安装
npm install -g package_name
# 安装开发依赖
npm install --save-dev package_name
# 卸载包
npm uninstall package_name
# 列出已安装的包
npm list
npm list -g --depth=0
# 更新包
npm update package_name
# 运行脚本
npm run script_name
# 查看包信息
npm info package_name小结
本章介绍了 Linux 软件包管理:
| 系统 | 包管理器 | 功能 |
|---|---|---|
| Debian/Ubuntu | apt, dpkg | 高层和底层包管理 |
| RHEL/CentOS | dnf, yum, rpm | 高层和底层包管理 |
| 通用 | snap, flatpak | 跨发行版包管理 |
| 语言特定 | pip, npm | 语言包管理 |
常用命令速查
bash
# Debian/Ubuntu (apt)
sudo apt update # 更新软件源
sudo apt upgrade # 升级软件包
sudo apt install nginx # 安装软件包
sudo apt remove nginx # 删除软件包
apt search nginx # 搜索软件包
# RHEL/CentOS (dnf)
sudo dnf update # 更新软件包
sudo dnf install nginx # 安装软件包
sudo dnf remove nginx # 删除软件包
dnf search nginx # 搜索软件包
# 源码编译
./configure && make && sudo make install下一步
下一章我们将学习 进程管理,了解如何查看、控制和管理 Linux 系统中的进程。
