前言在 Linux 系统管理中打包压缩和软件包管理是最基础也最重要的两项技能。无论你是刚入门的运维新手还是已有一定经验的开发者熟练掌握这些工具和概念都会让你的工作效率大幅提升。本文将带你系统性地学习如何使用tar命令进行打包与压缩常见的压缩工具gzip、bzip2、xzRPM 软件包的管理与查询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指定解包目标目录示例打包系统认证文件[rootlab1 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/.tgzbzip2较好中等.tar.bz2xz最高慢.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.xz1.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 什么是 RPMRPMRed 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 9x86_6464 位 x86 架构aarch64ARM 架构noarch无架构限制查看系统信息# 查看系统版本 cat /etc/redhat-release # 查看系统架构 hostnamectl uname -r2.3 RPM 包的获取方式官方网站access.redhat.com开源镜像站阿里云、腾讯云、清华源本地 ISO 镜像RHEL 8 分为 AppStream 和 BaseOS第三方网站rpmfind.net2.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 vsftpd2.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 为什么需要 YUMRPM 工具有一个很大的痛点——依赖地狱[rootlab1 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_64YUMYellowdog 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] nameBaseOS baseurlfile:///media/BaseOS gpgcheck1 gpgkeyfile:///media/RPM-GPG-KEY-redhat-release enabled1 [AppStream] nameAppStream baseurlfile:///media/AppStream gpgcheck1 gpgkeyfile:///media/RPM-GPG-KEY-redhat-release enabled1 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 history3.4 下载 RPM 包但不安装# 仅下载包及其依赖到指定目录 yum install --downloadonly --destdir/path/to/dir httpd四、搭建内部私有 YUM 仓库在企业环境中通常需要搭建内部 YUM 仓库方便内网主机安装软件。架构图┌─────────────┐ HTTP/HTTPS ┌─────────────┐ │ YUM 客户端 │ ──────────────────▶ │ YUM 仓库主机 │ │ (内网主机) │ │ (repodata) │ └─────────────┘ └─────────────┘搭建步骤1. 安装必要工具yum install httpd createrepo -y2. 准备 RPM 包# 在 httpd 根目录创建 packages 目录 mkdir -p /var/www/html/packages # 下载需要的 RPM 包到该目录 yum install --downloadonly --destdir/var/www/html/packages httpd vsftpd3. 生成 repodatacd /var/www/html createrepo -v .4. 启动服务systemctl start httpd systemctl enable httpd # 关闭防火墙生产环境建议开放 80 端口 systemctl stop firewalld setenforce 05. 客户端配置cat /etc/yum.repos.d/internal.repo EOF [internal] nameInternal YUM Repo baseurlhttp://yum-server-ip/ gpgcheck0 enabled1 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 install6.3 配置 systemd 服务源码包安装的程序不会被systemctl管理需要手动编写服务文件cat /usr/lib/systemd/system/nginx.service EOF [Unit] DescriptionThe nginx HTTP and reverse proxy server Afternetwork-online.target remote-fs.target nss-lookup.target Wantsnetwork-online.target [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx [Install] WantedBymulti-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 环境编写不同发行版可能略有差异。觉得有用点个赞支持一下吧