【Linux运维极简教程】05-软件包管理

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 - 网络配置与管理

相关推荐
Hiyajo pray1 小时前
SDN 访问控制性能调优方法
服务器·网络·网络安全
探索云原生2 小时前
终于搞懂 Kueue:5 个核心对象一次讲透
linux·docker·ai·云原生·kubernetes
huainingning3 小时前
交换机通过ftp下载文件或者传输文件到ftp服务器
运维·服务器·网络
An_s3 小时前
机器学习python之识别图中物品信息
java·linux·开发语言
edwarddamon3 小时前
CentOS 7 国内安装 Docker CE(阿里云源)
运维
Championship.23.243 小时前
Linux 3.0 LVDS驱动开发详解
linux·运维·驱动开发·lvds
小池先生4 小时前
Windows服务器如何备份
运维·服务器
风向决定发型丶4 小时前
Shell中的特殊变量
linux·运维·bash
FII工业富联科技服务5 小时前
灯塔工厂用例详解:AR 远程巡检与智能运维闭环落地实践
运维·ar
mounter6255 小时前
走向长时运行:引入协程(Coroutines),打破 BPF 程序的“一堂到底”限制
linux·ebpf·kernel