dnf 软件源与 tar
RHEL 9 配置 yum/dnf 仓库、安装与查询软件包,以及 tar 归档、gzip/bzip2/xz 压缩与解压的完整流程。
本页目录
Linux 装软件不是「下载 exe 一路下一步」,而是:先有软件源(仓库),再用 dnf/yum 去装。归档与压缩则是备份日志、传材料、交作业的日常操作。本篇把「配源 → 装包 → 打包」收成一条可复现路径。
系列:从 RHCSA 到 RHCE · 第 5 / 17 篇 上一篇:VIM 三模式 下一篇:用户与基础权限 总目录:系列索引
环境说明
- 系统:RHEL 9 / Rocky 9 / AlmaLinux 9
- 身份:root(
dnf install需要特权) - 网络:能访问题面/环境提供的仓库;公网实验可用发行版官方或国内镜像
- 前置:会用 VIM 写文本文件
软件从哪来:仓库模型
可以把仓库想成「应用商店」:
- 某台 HTTP/HTTPS 服务器上放着
.rpm包和索引 - 本机在
/etc/yum.repos.d/*.repo里写清「去哪找」 dnf读这些 repo 文件,解析依赖,下载并安装
RHEL 9 常见两个仓库:
| 名称(示例) | 内容 |
|---|---|
| BaseOS | 核心系统组件 |
| AppStream | 应用与部分运行时(含 module 流) |
考试:考场通常已提供内网仓库地址,按题面写 repo 即可;不要假设有公网。
写一个 repo 文件
目录固定:
ls /etc/yum.repos.d/
在该目录下新建任意文件名、扩展名为 .repo 的文件。下面用 VIM:
vim /etc/yum.repos.d/el9.repo
示例(把 URL 换成你的环境):
[baseos]
name=BaseOS
baseurl=http://192.168.56.1/rhel9/BaseOS
enabled=1
gpgcheck=0
[appstream]
name=AppStream
baseurl=http://192.168.56.1/rhel9/AppStream
enabled=1
gpgcheck=0
| 字段 | 含义 |
|---|---|
| [id] | 仓库 ID,任意且唯一 |
| name | 描述名,任意 |
| baseurl | 软件包所在网址 |
| enabled | 1 启用 / 0 禁用 |
| gpgcheck | 是否校验包签名 |
| gpgkey | 校验用的密钥 URL/路径(gpgcheck=1 时常见) |
启用校验时:
[baseos]
name=BaseOS
baseurl=http://192.168.56.1/rhel9/BaseOS
enabled=1
gpgcheck=1
gpgkey=http://192.168.56.1/rhel9/RPM-GPG-KEY-redhat-release
易错:
baseurl打错、多空格、协议写错,后面dnf会报找不到仓库。 易错:repo 文件扩展名不是.repo,dnf 不会读。 考点:配置目录是/etc/yum.repos.d/,不能自定义到别处。
验证仓库
dnf repoinfo
# 或
yum repoinfo
dnf repolist
能看到 BaseOS / AppStream 且状态可用,再装包。清缓存有时能救「改了 repo 仍不行」:
dnf clean all
dnf makecache
安装 / 卸载 / 更新
RHEL 9 上 dnf 是正主;yum 多为兼容入口,参数几乎一样。系列后文统一写 dnf。
dnf -y install tar
dnf install tar # 会问 y/N
dnf -y install bzip2 xz
| 动作 | 命令 |
|---|---|
| 安装 | dnf -y install 包名 |
| 卸载 | dnf -y remove 包名 |
| 更新 | dnf -y update 或 dnf -y upgrade |
| 搜索 | dnf search 关键词 |
| 列出已装 | dnf list installed |
| 文件是谁装的 | dnf provides /etc/passwd |
| 命令来自哪个包 | dnf provides ifconfig |
-y 表示自动应答 yes,脚本和考试里常用。
provides 实用场景
dnf provides ifconfig
# 若无匹配,可再试:
dnf provides '*/ifconfig'
可能提示来自 net-tools,再:
dnf -y install net-tools
排障「命令不存在」时,先 dnf provides /usr/sbin/命令名 或 dnf provides 命令名,比瞎猜包名快。
组包
一组软件可以一起装:
dnf grouplist
dnf -y groupinstall "RPM Development Tools"
Available Groups:可装Installed Groups:已装
考试若点名某 group,用 grouplist 确认精确名称(空格、大小写要对)。
归档:tar
tar 负责打包(把多个文件收成一个归档),本身不等于压缩。压缩是 gzip/bzip2/xz 的事;tar 可以调用它们。
| 选项 | 含义 |
|---|---|
| -c | 创建 create |
| -x | 解包 extract |
| -t | 列出内容 list |
| -f | 指定归档文件名(file)——几乎总要 |
| -C | 解包到指定目录 |
| -z | 调用 gzip(.tar.gz / .tgz) |
| -j | 调用 bzip2(.tar.bz2) |
| -J | 调用 xz(.tar.xz) |
| -v | 显示过程(可选) |
记忆:
f后面紧跟文件名;考试里-cf、-xf、-tf最高频。
打包
cd /tmp
tar -cf backup.tar /etc/hostname /etc/hosts
tar -cf /tmp/logs.tar /var/log
ls -lh /tmp/logs.tar
查看
tar -tf /tmp/logs.tar
tar -tf /tmp/logs.tar | head
解包
tar -xf backup.tar # 解到当前目录
tar -xf /tmp/logs.tar -C /opt # 解到 /opt
ls /opt/var/log
易错:
-C目标目录必须已存在。 易错:归档里往往带着原路径结构(如var/log/...),解压后不要在错误目录找文件。
压缩:gzip / bzip2 / xz
单独压缩文件(不是目录):
dnf -y install gzip bzip2 xz
ls -lh /etc/services
gzip /etc/services # 变成 services.gz,原文件被替换
ls -lh /etc/services.gz
gzip -d /etc/services.gz # 解压
bzip2 /etc/services
bzip2 -d /etc/services.bz2
xz /etc/services
xz -d /etc/services.xz
| 工具 | 后缀 | 特点(相对) |
|---|---|---|
| gzip | .gz | 快,压缩比一般 |
| bzip2 | .bz2 | 更慢,压缩比更高 |
| xz | .xz | 通常最慢,压缩比常最高 |
注意:
gzip 文件默认删掉原文件只留.gz。要保留原文件:gzip -k 文件。
归档 + 压缩一步到位
tar -czf etc.tar.gz /etc
tar -cjf etc.tar.bz2 /etc
tar -cJf etc.tar.xz /etc
解压时 tar 会自动识别常见格式,或继续显式写选项:
tar -xf etc.tar.gz
tar -xf etc.tar.bz2 -C /tmp
tar -xf etc.tar.xz -C /opt
实用组合(备份日志目录):
tar -czvf /tmp/varlog-$(date +%F).tar.gz /var/log
tar -tf /tmp/varlog-$(date +%F).tar.gz | head
推荐实验(约 20 分钟)
# 1) 确认仓库(URL 换成你的)
dnf repoinfo
# 2) 装压缩工具
dnf -y install tar gzip bzip2 xz
# 3) 打包日志并查看
cd /tmp
tar -czf lab-logs.tar.gz /var/log
tar -tf lab-logs.tar.gz | head
# 4) 解到指定目录
mkdir -p /tmp/extract
tar -xf lab-logs.tar.gz -C /tmp/extract
ls /tmp/extract/var/log | head
# 5) provides 练习(若无结果可试 dnf provides '*/ifconfig')
dnf provides ifconfig
期望
dnf repoinfo不报「no enabled repos」/tmp/lab-logs.tar.gz存在且tar -tf能列出/var/log/.../tmp/extract/var/log/下能看到日志文件名
速查表
| 目标 | 命令 |
|---|---|
| 配置仓库 | vim /etc/yum.repos.d/xx.repo |
| 看仓库 | dnf repoinfo / dnf repolist |
| 装/卸/更 | dnf -y install/remove/update |
| 查文件来源 | dnf provides 路径 |
| 打包 | tar -cf xx.tar 路径 |
| 打包并 gzip | tar -czf xx.tar.gz 路径 |
| 列出 | tar -tf xx.tar |
| 解包 | tar -xf xx.tar -C 目标目录 |
考点与易错
考点:按题面写出可用的
.repo(baseurl、gpgcheck/gpgkey),并dnf装上指定包。 考点:tar -czf/tar -xf -C的选项顺序与含义。 易错:repo 文件放错目录或扩展名不对。 易错:gpgcheck=1却没给可用gpgkey。 易错:对目录只用gzip不tar;应先tar再压,或tar -z。 易错:tar -xf忘记-C,解压到错误的当前目录。 练习环境:课堂仓库若是http://server1.lab0.example.com/rhel9/...,步骤相同,只换 URL。
小结
- 装软件先有仓库:
/etc/yum.repos.d/*.repo写清baseurl,再dnf install。 - 查命令/文件来源用
dnf provides;批量自动应答加-y。 tar负责归档:-c建、-x解、-t看、-f文件名、-C目标目录。- 压缩用
-z/-j/-J对应 gzip/bzip2/xz;日常备份优先tar -czf。
下一篇进入用户与组:useradd、/etc/passwd 七列、chmod 数字权限——和软件、网络一起构成 RHCSA 主干。