📦 前言
在 Linux 系统管理中,打包压缩 和 软件包管理 是最基础也最重要的两项技能。无论你是刚入门的运维新手,还是已有一定经验的开发者,熟练掌握这些工具和概念,都会让你的工作效率大幅提升。
本文将带你系统性地学习:
一、打包与压缩
1.1 打包和压缩的区别
很多人容易混淆“打包”和“压缩”,其实它们是两个不同的步骤:
💡 实际工作中,通常先打包再压缩,最终生成一个 .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/
常用选项:
示例:打包系统认证文件
[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 |
| 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)使用的软件包格式。
🔄 Debian/Ubuntu 系列使用的是 .deb 包,对应工具为 dpkg/apt。
2.2 RPM 包命名规范
理解 RPM 包的命名,可以帮助你判断它是否适合当前系统。
vsftpd-3.0.5-5.el9.x86_64.rpm │ │ │ │ │ 包名 版本 修订 平台 架构
| |
|---|
vsftpd | |
3.0.5 | |
5 | |
el9 | |
x86_64 | |
aarch64 | |
noarch | |
查看系统信息
# 查看系统版本
cat /etc/redhat-release
# 查看系统架构
hostnamectl
uname -r
2.3 RPM 包的获取方式
- 本地 ISO 镜像(RHEL 8+ 分为 AppStream 和 BaseOS)
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 仓库分为两种类型:
配置文件位置
/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 为什么用源码包
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 |
| rpm -ivh |
| yum install |
| yum provides |
| |
| |
| yum groupinstall |
掌握这些技能,你将能够高效地管理 Linux 系统中的文件和软件,无论是日常运维还是生产环境部署,都能游刃有余。如果你有任何问题或经验分享,欢迎在评论区留言!
📅 本文基于 RHEL 9.3 环境编写,不同发行版可能略有差异。
觉得有用?点个赞支持一下吧! 🚀