最近在做 RHEL9 的系统部署与 Linux 命令操作实验,整套流程从镜像下载、虚拟机配置、系统安装到常用命令实操、故障排查,全部走了一遍。这篇博文就是这次实验的完整记录,把我踩过的坑、验证过的参数、敲过的命令都整理出来。不管你是在准备运维面试,还是企业里要做 Linux 系统部署的选型验证,或者是刚入门想系统化过一遍部署和常用命令,这篇内容都能给你一个可复现的参考路径。
我自己在实际实验中的体会是:RHEL9 的部署流程和 CentOS 7 时代差别不小,很多老经验得更新一下。而命令操作这块,与其去背大而全的命令大全,不如围绕部署场景把核心命令串起来,边部署边敲,印象会深刻得多。
1. 实验整体设计与部署思路拆解
1.1 为什么选 RHEL9 作为部署实验对象
RHEL9 是企业级 Linux 部署绕不开的一个版本。它基于 Fedora 34,内核版本升级到 5.14,默认文件系统是 XFS,引入了诸多新特性。选它做实验,主要有三个考虑:
- 企业生产环境存量极大,很多公司的核心业务跑在 RHEL 系操作系统上。RHEL9 是新版本,掌握它的部署和命令操作,对于后续接手系统运维、故障排查都有直接帮助。
- 从学习路径角度讲,RHEL9 的命令体系、网络管理方式(NetworkManager 全面接管)和软件包管理(dnf,替代了老旧的 yum)和上一代有显著差异,用新版本做实验才能避免“学完就过时”的尴尬。
- RHEL9 的生命周期长达 10 年,实验环境可以长期保留,不用频繁重装。
有一点需要明确:RHEL9 官方要求注册订阅才能获取软件源更新。实验环境如果没有订阅,则要提前处理好 dnf 仓库的可用性问题,这个我在后文会细讲。
1.2 部署方案的选型:物理机还是虚拟机
实验场景下,你大概率会考虑“物理机安装”、“虚拟机安装”和“云主机直接使用现成镜像”三个方向。我这次选用 VMware Workstation 虚拟机方案,原因很实际:
- 快照功能太重要了。系统装完、命令操作做实验之前打一个干净快照,之后无论怎么折腾(比如改错配置、误删文件),都能一键还原,实验容错率极高。
- 网络隔离灵活。虚拟机对物理网络环境影响为零,做网络配置实验(改 IP、配置网卡绑定)不会影响局域网内其他设备。
- 硬件资源可按需分配,方便模拟不同配置的实验环境。
如果你计划用 VirtualBox,或者手头有物理服务器想练手,整体流程也适用,只是网卡名称、驱动加载这些细节会略有差异。
1.3 实验环境的硬件规划参考
部署实验前要先规划好虚拟机的资源配额。下面是我这次实验使用并验证可行的配置:
| 资源项 | 实验配置 | 说明 |
|---|---|---|
| CPU | 2 核 | 安装过程编译量小,2 核足够 |
| 内存 | 4 GB | 最小 2 GB,4 GB 更流畅,图形界面下建议不低于 4 GB |
| 磁盘 | 60 GB | RHEL9 默认安装约 6~10 GB,60 GB 为后续实验留足空间 |
| 网络 | NAT 模式 | 虚拟机共享宿主机网络,便于出网下载软件包 |
需要注意一个硬件虚拟化关键点:物理机 BIOS 中必须开启 Intel VT-x / AMD-V 虚拟化支持,否则虚拟机安装 64 位 Linux 内核时会直接报错或卡死,这是新手最常遇到的硬件级别坑,下文会展开说明。
2. 系统镜像获取与安装前核心准备
2.1 镜像下载与完整性校验
RHEL9 官方镜像放在 Red Hat 官网的 Customer Portal 中,需要注册账号才能下载。对于实验环境和学习用途,你可以选择注册账号评估,也可以使用社区重建版本的学习镜像。
这里给一个通用的下载后校验方法。拿到 ISO 镜像后,不能直接双击就安装,要先校验 SHA-256 值,确保镜像文件在下载过程中没有损坏、没有被掉包。Linux 类系统下校验命令如下:
sha256sum rhel-baseos-9.2-x86_64-dvd.isosha256sum输出的一长串字符要与镜像官网提供的校验值逐一比对。Windows 宿主机下则可以用 PowerShell 计算:
Get-FileHash .\rhel-baseos-9.2-x86_64-dvd.iso -Algorithm SHA256校验这一步很多人会跳过,但我建议每次都做。网络传输导致的字节损坏并不罕见,镜像不完整会引发安装中途各种诡异报错。
2.2 虚拟机创建与关键参数设置
VMware Workstation 中新建虚拟机时,选择“典型”安装即可,但后续几处参数必须手动调整:
- 在“选择客户机操作系统”时,选“Red Hat Enterprise Linux 9 64 位”。如果虚拟机软件版本较旧,列表中可能没有 RHEL9 选项,此时选择“Other Linux 5.x 及更高版本内核 64 位”也可以正常使用。
- 磁盘类型建议选 NVMe,RHEL9 对 NVMe 支持已经非常成熟,性能也更接近现代固态硬盘的实际表现。
- 存储策略选“将虚拟磁盘存储为单个文件”,快照操作时性能损耗更小。
创建好虚拟机后,在虚拟机设置里把“CD/DVD”指向刚才下载的 RHEL9 ISO 文件,并勾选“启动时连接”。NAT 网络默认即可,后续如果需要,再自行切换到桥接模式。
2.3 分区方案设计与 LVM 选型
RHEL9 的安装器 Anaconda 支持自动分区和手动分区。实验环境建议用手动分区,但不要追求过于复杂的划分。我这次用的方案与容量规划如下:
| 挂载点 | 容量 | 文件系统 | 说明 |
|---|---|---|---|
| /boot | 1 GB | XFS | 引导分区,不参与 LVM |
| / | 30 GB | XFS | 根分区,系统与软件包所在 |
| swap | 4 GB | swap | 内存不足时的交换空间 |
| /home | 剩余空间 | XFS | 用户数据分区,方便单独管理 |
我用了 LVM 逻辑卷管理,将 / 和 /home 都放在同一个卷组中。这样以后磁盘空间不够时,可以灵活扩展逻辑卷,不必重新分区。
这里给个实际建议:swap 分区是否需要那么大,取决于你的内存大小。如果物理内存 8 GB 以上,swap 给 4 GB 就够用了。如果内存只有 2 GB,建议 swap 给到 4 GB,防止编译操作时系统 OOM。
3. 深入拆解安装全过程与初始化配置
3.1 从引导到分区:安装界面逐项操作实录
使用 ISO 镜像启动虚拟机后,会进入 GRUB 引导菜单。RHEL9 的安装界面里,第一项是Install Red Hat Enterprise Linux 9.0,按回车即可进入图形化安装程序。
进入安装摘要界面后,需要依次完成以下配置项:
- “安装目的地”:选择磁盘,点击“完成”后进入自定义分区。这里的操作逻辑是:先选择磁盘,再选择“自定义”配置,然后在“手动分区”中按上面设计好的分区方案逐步创建 /boot、/、/home 和 swap。
- “语言支持”:选择简体中文,同时键盘布局选择 English (US)。中文语言包对后续使用有帮助,键盘布局用美式键盘则最省心。
- “时间与日期”:选择“亚洲/上海”时区。如果不设置对时区,按系统默认的美国时区,后续日志时间会错乱。
- “软件选择”:这里有两种典型选择。做纯命令操作实验,选“最小安装”即可;如果需要图形界面,则选“带 GUI 的服务器”。我这次选的是最小安装,尽可能贴近生产服务器的真实形态。
安装过程中会有两次强制交互:一次是设置 root 密码,一次是创建普通用户。root 密码要足够强壮(我建议大小写字母+数字+特殊字符,不少于 10 位),普通用户可以勾选“此用户为管理员”,这样后续可以用这个账号执行 sudo 命令。
3.2 安装源与软件仓库的可用性处理
如果你使用官方 RHEL9 ISO 且没有订阅,安装完成执行dnf install时会提示This system is not registered with an entitlement server,这是实验环境最常见的问题。
处理方案是在完成最小安装后,修改 dnf 的仓库配置文件,将 baseos 和 appstream 仓库指向本地挂载的安装镜像。实验中我采用的方式是直接把 ISO 挂载到一个固定目录,然后写好本地仓库配置文件:
mkdir -p /mnt/cdrom mount -o loop /dev/sr0 /mnt/cdrom然后在/etc/yum.repos.d/下新建rhel9-local.repo,内容为标准的本地仓库指向方式。这种“本地仓库”模式有两个好处:不依赖外网,下载速度远快于公共互联网源;同时还能用来验证“企业内网离线部署”的场景。
如果你用的是社区重建版本镜像,EPEL 和官方源一般自带,dnf update可以直接用,无需额外处理。
3.3 首次启动的基础配置与快照备份
系统安装完成后会自动重启。首次登录用 root 账号,进入系统后我建议按以下顺序做初始化:
- 更新系统软件包:
dnf update -y,把内核和基础组件升到最新补丁级别。 - 安装常用工具。最小安装连
tar都有,但没vim、wget、net-tools、bash-completion、unzip。一次性安装:dnf install -y vim wget net-tools bash-completion unzip bind-utils - 配置主机名:
hostnamectl set-hostname rhel9-lab - 关闭或调整 SELinux?我的建议是实验环境下先保持
enforcing不动,遇到权限被拒时检查上下文,这样能学到排查思路,也能在真实环境中反映问题。如果实在想省事,可以临时setenforce 0,但不要永久禁用。 - 配置完系统后,在 VMware 中对虚拟机执行“拍摄快照”,命名为“初始安装完成”。
这一步做完,你就拥有了一个干净、可随时回溯的实验底座。之后学命令、跑服务、模拟故障,都不怕系统搞坏。
4. 命令操作实验:从基础到实战场景
4.1 系统信息与运行状态核心命令
RHEL9 部署完成后,首先要熟练使用查看系统状态的一套命令。我把它们分成“系统信息”和“运行状态”两类。
系统信息常用命令:
uname -a # 查看内核完整版本 cat /etc/os-release # 查看发行版详细信息 hostnamectl # 查看主机名、操作系统、内核信息 lscpu # CPU 架构和核心数详情 free -h # 内存和 swap 使用情况 df -hT # 各分区文件系统类型和使用率这里重点说free -h。RHEL9 的 free 输出含义有细微变化,available列比free列更能反映系统实际可分配内存。free -h显示的都是人类可读单位,没有基础也能快速看懂。
运行状态查看常用命令:
top # 动态查看进程与资源占用 ps -ef --forest # 进程树,看父子进程关系 ss -tlnp # 当前监听的 TCP 端口和对应进程 dmesg | tail # 内核日志最后数十行生产环境排查故障时最常用的是ss -tlnp。比如启动了一个服务,想知道服务有没有真正监听端口,就靠这条命令确认。传统上用netstat,但 RHEL9 上推荐用ss,效率更高。
4.2 用户、权限与文件操作实验要点
这一部分是命令操作实验的重头戏。在 RHEL9 上创建用户、分配权限、切换身份是最基本的操作,也是日常运维中每天都要做的。
创建用户与设置密码实验:
useradd -m -d /home/dev01 -s /bin/bash dev01 # 创建用户 dev01 passwd dev01 # 交互式设置密码 usermod -aG wheel dev01 # 将用户加入 wheel 组,获得 sudo 权限usermod -aG wheel dev01中的-aG是“追加到组”,而不是“覆盖组”。如果漏掉-a,会把用户当前所在的其他组全部清掉,换成只有 wheel 组,这是非常常见的误操作。
文件权限实验演示一组完整案例:
touch /tmp/test.txt # 创建文件 chmod 754 /tmp/test.txt # 设置权限:拥有者可读写执行,属组可读执行,其他人只读 chown dev01:dev01 /tmp/test.txt # 修改属主和属组 ls -l /tmp/test.txt # 查看权限状态数字方式配置权限很容易记错,核心逻辑是:r=4、w=2、x=1,数字相加。754 就是拥有者 7(4+2+1),属组 5(4+1),其他人 4(4)。如果只是熟悉文件操作逻辑,chmod u+rwx,g+rx,o+r这种符号模式更直观。
删除文件夹是日常高频命令,也是事故率最高的命令:
rm -rf /tmp/test_dir-r是递归删除目录及内容,-f是忽略不存在的文件不询问。这条命令必须小心使用,特别要确认路径前面没有空格、没有打错目录名。
4.3 文件查找、内容检索与文本处理实战
找文件、找内容、处理文本,这三个能力在运维里是刚需。实验过程中我建议把这些命令放在一起连做,效果更好。
文件定位类:
find /etc -name "*.conf" -type f # 找 /etc 下所有 .conf 配置文件 which systemctl # 查看命令对应的绝对路径 whereis nginx # 查找相关的二进制、源码、手册页位置内容检索类:
grep -rn "PermitRootLogin" /etc/ssh/ # 递归检索 ssh 配置中的关键参数 grep -E "Failed|Accepted" /var/log/secure # 查看登录失败或成功的认证日志文本处理类:
cat /var/log/messages | tail -n 50 # 查看日志最后 50 行 awk '{print $1}' /etc/passwd # 打印 passwd 第一列(用户名) sed -i 's/^#PasswordAuthentication/PasswordAuthentication/' /etc/ssh/sshd_configsed -i这里要注意,加-i才会真正修改文件,不加则只是把替换结果显示到屏幕。实验时可以先不加-i预览效果,确认无误后再加参数执行。
4.4 系统时间同步管理
系统时间错误会导致日志时间错乱、证书验证失败、集群节点间数据不一致等连锁问题。RHEL9 默认使用 chrony 作为 NTP 客户端,部署实验必须验证时间同步正常。
查看时间同步状态:
timedatectl # 查看时区与时间同步状态 chronyc tracking # 查看当前时间源和偏差情况 chronyc sources -v # 查看 NTP 源列表,^ 表示已经可用如果显示System clock synchronized: no,说明同步存在问题。排查思路是:确认 chrony 服务是否启动(systemctl status chronyd)、确认网络能访问 NTP 服务器、确认防火墙没有阻断 UDP 123 端口。配置时间源可编辑/etc/chrony.conf,加入可信的 NTP 服务器地址。
4.5 软件包管理 dnf 命令操作
RHEL9 的yum命令虽然还存在,但已经被 dnf 取代,底层实现完全重做。常用操作如下:
dnf repolist # 列出当前可用仓库 dnf search nginx # 搜索软件包 dnf install -y nginx # 安装软件包及依赖 dnf remove nginx # 卸载软件包 dnf history # 查看 dnf 事务历史,可回滚dnf history是维护阶段非常好用的命令。如果更新后系统异常,可以查看历史事务 ID 并执行dnf history rollback <ID>,将软件包状态回退到之前某个时间点。
实验时如果软件源没有配置好,dnf install会报Error: Unable to find a match或仓库不可用错误。这时回到上文本地仓库配置的部分排查。
4.6 Shell 脚本实验:从人工到自动化
命令操作的核心进阶是 Shell 脚本。实验项目里我编写了一个最小可用的系统备份脚本,这个脚本能串联前面练习过的命令,验证“命令组合”解决实际问题的能力:
#!/bin/bash # 系统配置备份脚本:打包 /etc 下关键配置,按日期命名 BACKUP_DIR="/root/backup" DATE=$(date +%Y%m%d_%H%M%S) if [ ! -d "$BACKUP_DIR" ]; then mkdir -p "$BACKUP_DIR" fi tar czf "$BACKUP_DIR/etc_backup_$DATE.tar.gz" -C / etc/hosts etc/fstab etc/passwd find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete echo "备份完成: $BACKUP_DIR/etc_backup_$DATE.tar.gz"写完后给执行权限并运行:
chmod +x backup.sh ./backup.sh脚本里有一行非常重要的经验:-mtime +7 -delete做的事情是清理 7 天前的备份文件。如果这行漏了,一次备份占一点空间,迟早挤爆硬盘。实际生产环境中“备份没做清理”引发的磁盘告警,我见过不止一次。
5. 常见问题与故障排查实操记录
5.1 虚拟机安装 RHEL9 蓝屏与卡死的根因排查
“虚拟机装 Linux 蓝屏”这个问题,在一众 Linux 相关的热搜词里出现频率极高。我自己也在初学阶段遇到过。
用 VMware 安装 RHEL9 时,如果启动虚拟机后还没进入安装界面就蓝屏、报错或黑屏,大概率原因有两个:
- 虚拟机软件本身版本太旧,对新内核的虚拟化支持不全。解决方案是升级虚拟机软件到较新版本,或改用 VirtualBox 最新版。
- 物理机 BIOS 没有开启 CPU 虚拟化功能。可以进入宿主机 BIOS/UEFI,找到 Intel Virtualization Technology(或 AMD SVM Mode),启用后重启宿主机再试。
确认 Windows 下虚拟化是否开启,可以在“任务管理器 - 性能 - CPU”中查看“虚拟化”状态,显示“已启用”才表示硬件虚拟化可用。
5.2 网络不通与 IP 地址配置问题
最小安装完成后,系统可能没有自动获取到 IP 地址。排查顺序建议如下:
ip addr show # 查看所有网卡和当前 IP 状态 ip route show # 查看路由表 nmcli device status # 查看设备状态,确认网卡是否被 NetworkManager 管理如果网卡没有 IP,使用 NetworkManager 配置静态 IP 的方式如下:
nmcli con mod ens160 ipv4.addresses 192.168.1.100/24 nmcli con mod ens160 ipv4.gateway 192.168.1.1 nmcli con mod ens160 ipv4.dns "8.8.8.8 223.5.5.5" nmcli con mod ens160 ipv4.method manual nmcli con up ens160RHEL9 的网络配置命令已经全面切换到nmcli,不建议再手动修改/etc/sysconfig/network-scripts/ifcfg-ens160旧文件方式。新版本 NetworkManager 更智能,也更容易排查配置状态。
配置完静态 IP 以后,用ping -c 4 网关地址测试三层连通性,再用dig或nslookup验证 DNS 解析。
5.3 命令找不到与 PATH 环境变量问题
实验时经常遇到“明明安装了,却提示 command not found”的情况。原因一般不是没装,而是命令所在目录不在 PATH 中。
比如安装完pip后,有些版本会把命令安装到/usr/local/bin,普通用户登录时这个目录不在默认 PATH 里。处理方式:
echo $PATH # 查看当前 PATH 包含哪些目录 which pip # 查看 pip 实际路径如果命令确实存在于某个目录,可以手动执行完整路径,也可以把目录追加到 PATH:
export PATH=$PATH:/usr/local/bin这个设置只在当前终端会话有效。要永久生效,需要写进配置文件(~/.bashrc或/etc/profile),这是新手容易忽略的细节。
5.4 SELinux 导致的服务权限被拒问题
RHEL9 上 SELinux 默认是 enforcing 状态。实验过程中如果启动了一个自定义服务,或者修改了非默认路径下的文件,很可能遇到“明明权限对了,但服务访问文件被拒绝”的异常。
典型案例:Nginx 服务使用了自定义 web 根目录/data/www,结果打开页面 403 或 404。此时先看审计日志:
ausearch -m avc -ts recent如果确认是 SELinux 拒绝,而不是文件权限问题,可以恢复文件的安全上下文:
restorecon -Rv /data/www更规范的做法是用semanage把自定义目录标记为 httpd 可用的类型,但实验阶段执行restorecon已经可以解决大部分问题。
5.5 忘记 root 密码的破解与重置流程
这个操作在实验环境里值得做一遍,因为生产环境迟早会用到(虽然名义上叫“忘记密码”,但本质是进入单用户模式重置密码)。
RHEL9 重置 root 密码流程:
- 重启虚拟机,在 GRUB 引导菜单出现时按下
E键进入编辑模式。 - 找到以
linux开头的那一行,在末尾追加rd.break。 - 按
Ctrl+X启动,等待系统进入switch_root:/#提示符。 - 依次执行:
mount -o remount,rw /sysroot chroot /sysroot passwd root touch /.autorelabel exit reboot
touch /.autorelabel这一步很关键,作用是让系统下次启动时重新标记 SELinux 安全上下文,否则改过密码后可能因 SELinux 策略问题无法正常登录。
6. 实验过程的复盘与扩展建议
整套 RHEL9 部署与命令操作实验做下来,我对这套系统的认知有了几个明显提升:第一,RHEL9 的命令体系已经全面拥抱新一代工具,yum、iptables、ifconfig这些老命令虽然在,但运维场景中应该逐步切换到dnf、nftables、ip组合;第二,SELinux 和 NetworkManager 不再是“可关可不管”的选项,它们深度影响系统行为,报错时第一反应应该是看 SELinux 和网络配置,而不是怀疑软件本身;第三,快照与回滚绝对是实验场景中的最佳实践,任何改动前打一个快照,节省的时间难以估算。
这个实验做完之后,还可以继续扩展以下几个方向,每个方向都值得单独写一篇实操记录:
- 服务化部署实验:把 Nginx、MySQL、Redis 等常用服务装起来,配合 systemd 管理。重点看服务单元文件怎么写、如何设置开机自启、如何通过 journalctl 查看服务日志。
- Shell 脚本进阶实验:从备份脚本扩展到批量修改用户密码、批量部署配置文件、定时任务配合脚本实现日志轮转。
- 系统监控与性能排查:熟悉
top、iostat、sar、perf这些工具,学会通过压力测试定位 CPU、内存、磁盘、网络瓶颈。 - 进程与服务管理深入:掌握 systemd 的单元依赖关系、资源限制配置,理解进程信号与退出码机制,这些内容对日后排查“服务莫名其妙挂掉”类问题价值极大。
Linux 运维能力的成长曲线从来不是线性的,大量的经验来自一次次“把系统搞挂再恢复”。RHEL9 部署实验提供了这样一个低成本试错环境,推荐每个想深入 Linux 运维的人认真做一遍,切忌跳过故障排查环节直接在干净系统上敲命令。那些排查问题的思考过程,才是这份实验报告最具价值的部分。