📦 前言

在 Linux 系统管理中,打包压缩软件包管理 是最基础也最重要的两项技能。无论你是刚入门的运维新手,还是已有一定经验的开发者,熟练掌握这些工具和概念,都会让你的工作效率大幅提升。

本文将带你系统性地学习:

  • 如何使用 tar 命令进行打包与压缩
  • 常见的压缩工具(gzip、bzip2、xz)
  • RPM 软件包的管理与查询
  • YUM/DNF 仓库的配置与使用
  • 源码包的编译安装
  • 搭建内部私有 YUM 仓库

一、打包与压缩

1.1 打包和压缩的区别

很多人容易混淆“打包”和“压缩”,其实它们是两个不同的步骤:

操作

说明

目的

打包(Archive)

将多个文件或目录合并为一个包文件

方便传输和备份

压缩(Compress)

通过算法减小文件体积

节省存储空间

💡 实际工作中,通常先打包再压缩,最终生成一个 .tar.gz.tar.xz 文件。


1.2 tar 命令详解

tar 是 Linux 上最常用的归档工具,支持多种压缩算法。

基本用法
# 创建包文件
tar -cf archive.tar foo bar

# 查看包内容
tar -tvf archive.tar

# 解包到当前目录
tar -xf archive.tar

# 解包到指定目录
tar -xf archive.tar -C /tmp/

常用选项:

选项

说明

-c

创建包文件

-x

解包

-t

查看包内容

-f

指定包文件路径

-v

显示详细信息

-C

指定解包目标目录

示例:打包系统认证文件
[root@lab1 opt]# tar -cf etc.tar /etc/passwd /etc/group /etc/shadow /etc/gshadow
tar: Removing leading `/' from member names

⚠️ 注意:tar 默认会移除绝对路径开头的 /,这是为了防止解包时覆盖系统文件。


1.3 三大压缩工具对比

工具

压缩率

速度

常用后缀

gzip

一般

.tar.gz / .tgz

bzip2

较好

中等

.tar.bz2

xz

最高

.tar.xz

压缩命令
# gzip 压缩
gzip filename          # 压缩,删除源文件
gzip -k filename       # 压缩,保留源文件

# bzip2 压缩
bzip2 filename
bzip2 -k filename

# xz 压缩
xz filename
xz -k filename
解压缩命令
gunzip file.gz
bunzip2 file.bz2
unxz file.xz

1.4 打包 + 压缩一步到位

tar 支持在打包的同时调用压缩工具:

# 使用 gzip 压缩
tar -czf /opt/etc-1.tar.gz /etc

# 使用 bzip2 压缩(备份示例)
tar -cjf /root/backup-$(date +%F).tar.bz2 /usr/local

# 使用 xz 压缩
tar -cJf /opt/etc-1.tar.xz /etc

对应解压:

# tar 会自动根据后缀调用对应的解压工具
tar -xf etc-1.tar.gz
tar -xf etc-1.tar.bz2
tar -xf etc-1.tar.xz

💡 -xf 会自动识别压缩格式,非常方便!


二、RPM 软件包管理

2.1 什么是 RPM

RPM(Red Hat Package Manager) 是红帽系 Linux 发行版(RHEL、CentOS、Fedora)使用的软件包格式。

  • 包格式:.rpm 结尾
  • 主要功能:安装、卸载、查询、校验
  • 优点:方便快捷,自带校验机制

🔄 Debian/Ubuntu 系列使用的是 .deb 包,对应工具为 dpkg/apt


2.2 RPM 包命名规范

理解 RPM 包的命名,可以帮助你判断它是否适合当前系统。

vsftpd-3.0.5-5.el9.x86_64.rpm
│       │     │  │    │
包名    版本  修订 平台 架构

字段

说明

vsftpd

软件包名称

3.0.5

版本号

5

修订次数

el9

适用于 Enterprise Linux 9

x86_64

64 位 x86 架构

aarch64

ARM 架构

noarch

无架构限制

查看系统信息
# 查看系统版本
cat /etc/redhat-release

# 查看系统架构
hostnamectl
uname -r

2.3 RPM 包的获取方式

  1. 官方网站:access.redhat.com
  2. 开源镜像站:阿里云、腾讯云、清华源
  3. 本地 ISO 镜像(RHEL 8+ 分为 AppStream 和 BaseOS)
  4. 第三方网站:rpmfind.net

2.4 rpm 命令实战

安装/升级/降级
# 安装
rpm -ivh vsftpd-3.0.5-4.el9.x86_64.rpm

# 升级(若未安装则安装)
rpm -Uvh vsftpd-3.0.5-5.el9.x86_64.rpm

# 仅升级已安装的包
rpm -Fvh vsftpd-3.0.5-5.el9.x86_64.rpm

# 降级
rpm -Uvh --oldpackage vsftpd-3.0.5-4.el9.x86_64.rpm

# 卸载
rpm -evh vsftpd

# 重新安装(不会覆盖修改过的配置文件)
rpm -ivh --reinstall vsftpd
查询操作
# 查询是否安装
rpm -q vsftpd

# 列出所有已安装的包
rpm -qa | grep httpd

# 列出包释放的所有文件
rpm -ql vsftpd

# 列出配置文件
rpm -qc vsftpd

# 列出帮助文档
rpm -qd vsftpd

# 查询文件属于哪个包
rpm -qf /etc/ssh/sshd_config

# 查看包的详细信息
rpm -qi vsftpd

2.5 RPM 安全校验(数字签名)

RPM 使用 GPG 签名 保证包的完整性和来源可信。

导入公钥
# 挂载 ISO 镜像
mount /dev/sr0 /media

# 导入公钥文件
rpm --import /media/RPM-GPG-KEY-redhat-release

# 查看已导入的公钥
rpm -qa | grep pubkey
校验包
rpm -K vsftpd-3.0.5-5.el9.x86_64.rpm
# 输出: digests signatures OK
校验已安装的文件
rpm -Vp vsftpd-3.0.5-4.el9.x86_64.rpm
# 如果输出 missing,表示文件缺失

三、YUM/DNF 包管理工具

3.1 为什么需要 YUM

RPM 工具有一个很大的痛点——依赖地狱

[root@lab1 Packages]# rpm -ivh httpd-2.4.57-5.el9.x86_64.rpm
error: Failed dependencies:
httpd-core = 0:2.4.57-5.el9 is needed by httpd-2.4.57-5.el9.x86_64

YUM(Yellowdog Updater Modified)可以自动解决依赖关系,极大简化了安装过程。

💡 在 RHEL 9 中,yum 命令已软链接到 dnf-3,功能基本一致。


3.2 YUM 仓库配置

YUM 仓库分为两种类型:

类型

协议

说明

本地仓库

file://

RPM 包在本机目录

网络仓库

http:// / https:// / ftp://

RPM 包在远程服务器

配置文件位置
/etc/yum.repos.d/*.repo
本地仓库配置示例(RHEL 9)
# 挂载 ISO
mount /dev/sr0 /media

# 创建 repo 文件
cat > /etc/yum.repos.d/dvd.repo << EOF
[BaseOS]
name=BaseOS
baseurl=file:///media/BaseOS
gpgcheck=1
gpgkey=file:///media/RPM-GPG-KEY-redhat-release
enabled=1

[AppStream]
name=AppStream
baseurl=file:///media/AppStream
gpgcheck=1
gpgkey=file:///media/RPM-GPG-KEY-redhat-release
enabled=1
EOF

# 生成缓存
yum clean all
yum makecache

⚠️ baseurl 指向的是 repodata 目录的上一级


3.3 YUM 常用操作

安装/卸载/重装
# 安装(-y 自动确认)
yum install httpd -y

# 卸载
yum remove httpd -y

# 重新安装(只重装指定包,不含依赖)
yum reinstall httpd -y
更新
# 更新指定包(需要仓库中有更高版本)
yum update httpd

# 更新所有包
yum update
查询
# 列出所有可用包
yum list

# 查看包信息
yum info kernel-core

# 搜索包
yum search nfs

# 根据文件查找所属包(文件可以不存在)
yum provides /usr/sbin/ifconfig
yum provides */nginx
历史记录
yum history

3.4 下载 RPM 包但不安装

# 仅下载包及其依赖到指定目录
yum install --downloadonly --destdir=/path/to/dir httpd

四、搭建内部私有 YUM 仓库

在企业环境中,通常需要搭建内部 YUM 仓库,方便内网主机安装软件。

架构图

┌─────────────┐      HTTP/HTTPS      ┌─────────────┐
│  YUM 客户端  │ ──────────────────▶ │ YUM 仓库主机 │
│  (内网主机)  │                      │  (repodata) │
└─────────────┘                      └─────────────┘

搭建步骤

1. 安装必要工具
yum install httpd createrepo -y
2. 准备 RPM 包
# 在 httpd 根目录创建 packages 目录
mkdir -p /var/www/html/packages

# 下载需要的 RPM 包到该目录
yum install --downloadonly --destdir=/var/www/html/packages httpd vsftpd
3. 生成 repodata
cd /var/www/html
createrepo -v .
4. 启动服务
systemctl start httpd
systemctl enable httpd

# 关闭防火墙(生产环境建议开放 80 端口)
systemctl stop firewalld
setenforce 0
5. 客户端配置
cat > /etc/yum.repos.d/internal.repo << EOF
[internal]
name=Internal YUM Repo
baseurl=http://yum-server-ip/
gpgcheck=0
enabled=1
EOF

yum clean all
yum makecache

五、软件包组管理

包组是一系列功能相关 RPM 包的集合,适合批量安装。

# 查看所有包组
yum group list

# 安装包组
yum groupinstall "Development Tools"

# 卸载包组
yum groupremove "Development Tools"

# 查看包组详情
yum groupinfo "Virtualization Host"

常见包组:

  • Development Tools:开发工具链(gcc、make 等)
  • Server with GUI:带图形界面的服务器
  • Virtualization Host:虚拟化相关包

六、源码包编译安装

6.1 为什么用源码包

方式

优点

缺点

RPM/YUM

安装简单,自动处理依赖

版本固定,定制性差

源码包

可获取最新版本,自由定制功能

安装复杂,需手动解决依赖

6.2 编译安装三部曲

Nginx 为例:

# 1. 下载并解压
wget https://nginx.org/download/nginx-1.31.2.tar.gz
tar -xf nginx-1.31.2.tar.gz
cd nginx-1.31.2

# 安装依赖(需要开发工具和 PCRE 库)
yum groupinstall "Development Tools" -y
yum install pcre-devel -y

# 2. 预配置(指定安装路径和功能)
./configure --prefix=/usr/local/nginx

# 3. 编译
make

# 4. 编译安装
make install

6.3 配置 systemd 服务

源码包安装的程序不会被 systemctl 管理,需要手动编写服务文件:

cat > /usr/lib/systemd/system/nginx.service << EOF
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx

[Install]
WantedBy=multi-user.target
EOF

# 重新加载 systemd
systemctl daemon-reload

# 启动服务
systemctl start nginx

七、提取 RPM 包中的文件

如果某个配置文件丢失,又不想重启服务,可以通过 rpm2cpio 提取单个文件。

# 列出包中所有文件
rpm2cpio vsftpd-3.0.5-5.el9.x86_64.rpm | cpio -tv

# 提取所有文件到当前目录
rpm2cpio vsftpd-3.0.5-5.el9.x86_64.rpm | cpio -id

# 提取后复制需要的文件到对应位置
cp ./etc/vsftpd/vsftpd.conf /etc/vsftpd/

✅ 这种方法不需要停止正在运行的服务,比重新安装更安全!


📌 总结

场景

推荐工具

文件归档传输

tar

节省磁盘空间

xz / bzip2

单个 RPM 包安装

rpm -ivh

需要解决依赖

yum install

查询文件来源

yum provides / rpm -qf

企业内网部署

私有 YUM 仓库

需要最新版本或定制功能

源码编译

批量安装开发工具

yum groupinstall


掌握这些技能,你将能够高效地管理 Linux 系统中的文件和软件,无论是日常运维还是生产环境部署,都能游刃有余。如果你有任何问题或经验分享,欢迎在评论区留言!


📅 本文基于 RHEL 9.3 环境编写,不同发行版可能略有差异。


觉得有用?点个赞支持一下吧! 🚀

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐