05 - 软件包管理
一、概述
Linux 软件包管理系统分为两大阵营:
| 体系 | 包格式 | 管理工具 | 代表发行版 |
|---|---|---|---|
| RPM 系 | .rpm | yum / dnf / rpm | CentOS, RHEL, Rocky, Fedora |
| DEB 系 | .deb | apt / dpkg | Ubuntu, Debian |
二、RPM 系包管理(CentOS/RHEL)
2.1 yum 命令
bash
# 安装软件包
yum install -y nginx
# 更新软件包
yum update -y # 更新所有包
yum update -y nginx # 更新指定包
# 卸载软件包
yum remove nginx
# 搜索软件包
yum search nginx
# 查看软件包信息
yum info nginx
# 查看已安装的包
yum list installed
# 查看可更新的包
yum list updates
# 查看某个文件属于哪个包
yum provides */libcrypto.so.1.1
# 清理缓存
yum clean all
yum makecache
# 查看包的依赖关系
yum deplist nginx
# 查看包安装的文件列表
rpm -ql nginx
2.2 dnf 命令(CentOS 8+/Fedora)
dnf 是 yum 的下一代替代品,用法基本兼容:
bash
# 用法与 yum 几乎一致
dnf install -y nginx
dnf update -y
dnf remove nginx
# dnf 新增功能
dnf list --installed
dnf autoremove # 清理不需要的依赖
2.3 rpm 底层命令
rpm 是底层包管理工具,不处理依赖关系:
bash
# 安装本地 rpm 包
rpm -ivh package-1.0.rpm # i=安装 v=详细 h=进度条
# 升级
rpm -Uvh package-1.1.rpm
# 卸载
rpm -e package-name
# 查询已安装的包
rpm -qa | grep nginx
# 查看包安装了哪些文件
rpm -ql nginx
# 查看某个文件属于哪个包
rpm -qf /usr/bin/curl
# 查看包信息
rpm -qi nginx
# 查看包的配置文件
rpm -qc nginx
# 查看包的文档文件
rpm -qd nginx
# 验证包文件是否被修改
rpm -V nginx
2.4 配置 yum 源
使用阿里云镜像源(国内推荐)
bash
# CentOS 7
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
# CentOS 8 / Rocky Linux
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak /etc/yum.repos.d/Rocky-*.repo
dnf makecache
添加 EPEL 源
bash
yum install -y epel-release
yum makecache
# EPEL 提供了大量额外软件包
添加第三方源(如 Nginx 官方源)
创建 /etc/yum.repos.d/nginx.repo:
ini
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
三、DEB 系包管理(Ubuntu/Debian)
3.1 apt 命令
bash
# 更新软件源索引(安装前必须执行)
apt update
# 安装软件包
apt install -y nginx
# 更新所有已安装的包
apt upgrade -y
# 更新系统(处理依赖关系变化)
apt full-upgrade -y
# 卸载软件包
apt remove nginx # 保留配置文件
apt purge nginx # 连同配置文件一起删除
# 自动清理不需要的依赖
apt autoremove -y
# 搜索软件包
apt search nginx
# 查看包信息
apt show nginx
# 查看已安装的包
apt list --installed
# 查看可升级的包
apt list --upgradable
3.2 dpkg 底层命令
bash
# 安装本地 deb 包
dpkg -i package_1.0_amd64.deb
# 卸载
dpkg -r package-name # 保留配置
dpkg -P package-name # 连同配置删除
# 查看已安装的包
dpkg -l | grep nginx
# 查看包安装的文件
dpkg -L nginx
# 查看文件属于哪个包
dpkg -S /usr/bin/curl
3.3 配置 apt 源
bash
# Ubuntu 22.04 替换为阿里云源
sed -i 's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sed -i 's|http://security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
apt update
添加 PPA 源
bash
# 添加 PPA
apt install -y software-properties-common
add-apt-repository ppa:ondrej/php
apt update
# 删除 PPA
add-apt-repository --remove ppa:ondrej/php
四、源码编译安装
当软件包管理器中没有需要的版本时,可以从源码编译安装。
通用流程
bash
# 1. 安装编译工具链
yum groupinstall -y "Development Tools" # CentOS
apt install -y build-essential # Ubuntu
# 2. 下载源码
wget https://example.com/software-1.0.tar.gz
tar -xzf software-1.0.tar.gz
cd software-1.0
# 3. 配置(检查依赖,指定安装路径)
./configure --prefix=/usr/local/software --with-ssl=/usr/local/ssl
# 4. 编译
make -j$(nproc)
# 5. 安装
make install
# 6. 验证
/usr/local/software/bin/software --version
Nginx 编译安装示例
bash
# 1. 安装依赖
yum install -y gcc pcre-devel openssl-devel zlib-devel make
# 2. 下载并解压
wget http://nginx.org/download/nginx-1.25.3.tar.gz
tar -xzf nginx-1.25.3.tar.gz
cd nginx-1.25.3
# 3. 配置编译选项
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module
# 4. 编译并安装
make -j$(nproc) && make install
# 5. 创建软链接
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
# 6. 验证
nginx -v
五、通用软件管理工具
5.1 snap(Ubuntu)
bash
# 安装
snap install code --classic
# 查看
snap list
# 更新
snap refresh code
# 卸载
snap remove code
5.2 二进制包直接安装
很多现代软件(如 Go、Node.js、Docker)提供预编译二进制包:
bash
# 安装 Go
wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
rm -rf /usr/local/go
tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
# 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
source /etc/profile
# 验证
go version
六、实战场景
场景一:排查"命令找不到"问题
bash
# 确认命令是否存在
which nginx
whereis nginx
# 查看命令属于哪个包
yum provides */nginx # CentOS
apt-file search bin/nginx # Ubuntu(需先 apt install apt-file && apt-file update)
# 安装对应的包
yum install -y nginx
场景二:制作本地 yum 仓库
bash
# 1. 安装 createrepo
yum install -y createrepo
# 2. 创建仓库目录,放入 rpm 包
mkdir -p /data/repo
cp *.rpm /data/repo/
# 3. 创建仓库元数据
createrepo /data/repo
# 4. 配置本地源
cat > /etc/yum.repos.d/local.repo << 'EOF'
[local]
name=Local Repository
baseurl=file:///data/repo
enabled=1
gpgcheck=0
EOF
# 5. 使用
yum makecache
yum list --disablerepo="*" --enablerepo="local"
场景三:锁定软件包版本
bash
# CentOS - yum versionlock 插件
yum install -y yum-plugin-versionlock
yum versionlock nginx-1.25.3-1.el7
# Ubuntu - apt-mark hold
apt-mark hold nginx
apt-mark showhold
apt-mark unhold nginx
七、小结
本篇介绍了 RPM 系(yum/dnf/rpm)和 DEB 系(apt/dpkg)两大包管理体系,以及源码编译安装方法。实际运维中应优先使用包管理器安装,便于统一管理和更新;仅在需要特定版本或定制功能时才使用源码编译。
上一篇 :04 - 进程与服务管理
下一篇 :06 - 网络配置与管理