1. RHCSA第二次作业:从命令熟练到系统管理思维的转变
RHCSA(Red Hat Certified System Administrator,红帽认证系统管理员)是很多Linux从业者考的第一张认证,它不考背诵、不考选择题,全是上机实操。我拿到“RHCSA第二次作业”这个任务时,第一反应是:终于不再是练单个命令了。第一次作业还停留在给网卡配IP、装个httpd、建几个文件这种“点状操作”,第二次作业直接把这些东西串成了一个完整场景——磁盘不够了要扩,服务起不来了要排查,权限不对了要调SELinux。这套东西做完,你对“系统管理员”这四个字的理解会完全不一样。
这篇内容适合两类人:一类是正在备考RHCSA,想找一套综合练习来模拟真实考试节奏的;另一类是刚入行Linux运维,想知道企业里“给用户开权限、扩容磁盘、让服务正常对外提供”到底是怎么一整套流程的。我会把第二次作业的完整任务拆解、每一步的实操命令、以及我当时踩过的坑全都写出来,你可以直接照着练。
先说明一下,我做这套练习用的环境是Red Hat Enterprise Linux 9(RHEL 9),考试官方用的也是RHEL,CentOS Stream在绝大多数命令上完全通用。虚拟化用的KVM,考试要求操作全在终端里完成,没有图形界面可用,所以下面所有步骤都是纯命令行操作,这一点也完全对应RHCSA的真实考场环境。
2. 第二次作业到底在考什么:核心任务全拆解
2.1 任务清单与考点分布
我拿到的第二次作业包含六个独立任务,每个都对应RHCSA考试的一道典型题型:
- 磁盘与LVM:给一个新加的虚拟磁盘做分区、创建物理卷、卷组、逻辑卷,格式化并挂载,还要写入fstab实现开机自动挂载。
- 用户与组管理:创建指定用户、指定组,批量修改附属组,设置sudo权限。
- 文件系统权限与ACL:针对一个共享目录配置属组权限,再用ACL给特定用户单独授权。
- SELinux:让HTTP服务能读取非默认目录下的网页文件,修改文件上下文并验证。
- firewalld:永久放行HTTP和HTTPS服务端口,重新加载并验证。
- 定时任务与日志:给指定用户配置周期执行的定时任务,能查看到执行日志。
这还不算完,作业要求每完成一项就要做一次验证,最后统一交一份截图报告。这其实比RHCSA真正考试还要严格一点,考试里你做完题点“提交”就行,没人看过程,但平时作业把“验证”这一步变成强制要求,反而帮我养成了好习惯——考试时做完题我会主动复查一遍,这个习惯直接决定了我最后能不能过。
2.2 为什么LVM和SELinux是必然考点
RHCSA考纲里LVM和SELinux几乎每次必出,原因很简单:企业真实环境里这两块是Linux运维日常最常碰到的。新机器磁盘满了,加块盘,要把空间分给现有目录,这就是LVM的典型场景;网站在/var/www/html下跑得好好的,运维把网站目录挪到了/data/web,结果网站打不开了,重启服务也报错,最后定位到是SELinux的文件上下文不对,这是Linux系统管理员的“必修课”。
LVM最大的价值是“可以在线扩容”——逻辑卷在文件系统挂载状态下就能扩大,不需要停机、不需要重新分区,这对在线服务来说太重要了。SELinux则是RHEL和CentOS默认强制开启的安全机制,它限制的不是“谁能登录系统”,而是“哪个进程能访问哪个文件、哪个端口”,相当于给系统上了一个细粒度的权限锁。RHCSA不要求你深入理解SELinux内部策略的编写,但要求你会用restorecon、semanage、setsebool这几个命令解决实际问题。
2.3 做作业前必须搞懂的几个底层概念
动手之前,有几个概念不弄明白,后面命令敲得再顺也是照猫画虎:
- PV/PG/LV的关系:物理卷(PV)是底层磁盘的抽象,卷组(VG)是把多个PV合并成一个大池子,逻辑卷(LV)才是在池子里切出来的“虚拟分区”。最核心的一句话:VG给你的是灵活性,LV才是你真正格式化、挂载、存放文件的地方。
- fstab与UUID:/etc/fstab是系统开机时自动挂载文件系统的配置表。生产环境里强烈建议用UUID而不是/dev/vdX这样的设备名挂载,因为设备名在系统启动过程中可能因为内核识别顺序不同而改变,UUID是文件系统创建时生成的唯一标识,不会变。
- ACL与普通权限的区别:传统权限只有owner、group、other三组,企业内部经常出现“这个目录属于开发组,但测试组的张三也要能读写”的需求,用ACL可以直接给张三这个人单独加一条访问规则,不用把张三硬塞进开发组。
- SEP类型决策:我把“SELinux阻止了服务访问”判断成一个“上下文标签不匹配”的问题,解决方式不是关SELinux,而是把文件的标签改成目标进程期望的标签,这是RHCSA答题的核心思维。
3. 完整实操:从环境准备到全流程实现
3.1 环境准备与初始检查
我习惯在动手前先摸清楚机器现状,这套检查动作在考试里也适用:
# 查看当前系统版本 cat /etc/redhat-release # 查看磁盘和分区现状 lsblk # 查看卷组和逻辑卷现状 vgs && lvs # 查看SELinux当前状态 getenforce # 查看防火墙状态 systemctl status firewalld我这次的测试机原始状态是:一块20G系统盘sda,另外加了一块10G的空盘vdb,系统自带httpd已经安装但还没启动,SELinux处于Enforcing(强制)模式,firewalld运行中。环境干净但又不完全干净——httpd装好没配,这其实就是故意模拟企业里“服务装了但没起来”的中间状态。
初始化检查还有个容易忽略的点:确认hostname和时区。RHCSA考试有一些任务会要求修改hostname,时区影响定时任务的执行时间,我在这台机器上把时区固定成了Asia/Shanghai:
timedatectl set-timezone Asia/Shanghai hostnamectl set-hostname server01.example.com3.2 LVM创建与扩容完整流程
第一个任务是:把/dev/vdb划分出一个逻辑卷vg01-lvdata,大小8G,格式化为xfs文件系统,挂载到/data,写入fstab实现开机自动挂载。另外预留2G空间不分配,模拟“以后要扩容”的场景。
第一步,给磁盘分区。考试环境里可以用fdisk也可以用parted,我习惯用fdisk,交互式更直观:
fdisk /dev/vdb # 依次输入 n(新建分区)→ p(主分区)→ 1(分区号)→ 回车(起始扇区默认)→ 回车(结束扇区默认) # 输入 t → 8e(把分区类型设为Linux LVM) # 输入 w(保存写入)这里有个细节:fdisk创建的分区要从磁盘头开始,起始扇区默认就行,不要手动改成2048以外的数字,否则可能对齐出错。分区类型改成8e(Linux LVM)是个好习惯,虽然RHEL9里pvcreate不检查分区类型也能创建成功,但你在考试里多写这步总没错,能少一个纠结点。
第二步,创建物理卷、卷组、逻辑卷:
# 通知内核重新读取分区表 partprobe /dev/vdb # 创建物理卷 pvcreate /dev/vdb1 # 确认物理卷状态 pvs # 创建卷组vg01,把vdb1放进去 vgcreate vg01 /dev/vdb1 # 创建逻辑卷,指定大小8G lvcreate -L 8G -n lvdata vg01 # 查看结果 lvs lsblk执行完你会在/dev/mapper/下看到一个vg01-lvdata的设备文件,这就是你后面要格式化和挂载的东西。/dev/mapper/vg01-lvdata是逻辑卷的标准路径,也可以简写为/dev/vg01/lvdata,两者指向同一个设备。
第三步,格式化并挂载:
# 格式化为xfs文件系统 mkfs.xfs /dev/vg01/lvdata # 创建挂载点 mkdir -p /data # 临时挂载 mount /dev/vg01/lvdata /data # 查看挂载结果 df -hT再扩展一点:RHCSA真实考试里必有一个LVM扩容题,通常是“给现有逻辑卷扩容到指定大小且不丢数据”,所以我当时额外多练了一步扩容。如果题目要求把vg01/lvdata扩到9G,就在挂载状态下执行:
# 扩大逻辑卷到9G lvextend -L 9G /dev/vg01/lvdata # 关键:让文件系统感知大小的变化 xfs_growfs /data # 或者用此命令,指定挂载点目录 xfs_growfs /data很多初学者做完lvextend后直接df -h,发现大小没变,就以为扩容失败。其实逻辑卷是“块设备层”的事情,文件系统是“文件层”的事情,lvextend改的是块设备的大小,文件系统不知道这个变化,必须用xfs_growfs通知它“你的地盘变大了”。xfs文件系统的扩容只能扩大不能缩小,这是设计如此,所以生产力场景基本是无脑用xfs。
第四步,写入fstab。这一步我把它放在最后做,因为挂载测试通过之后再写开机自启,才不会给自己挖坑:
# 使用UUID写入fstab blkid /dev/vg01/lvdata # 假设输出 UUID="xxxx-xxxx" echo 'UUID="xxxx-xxxx" /data xfs defaults 0 0' >> /etc/fstab # 验证fstab语法是否正常 mount -a df -hmount -a这条命令相当于“把fstab里所有还没挂载的条目都挂上”,如果你fstab写错了,这条命令会直接报错,正好可以在关机重启之前发现。我见过太多人在考试里fstab写错导致系统开不了机,然后慌了神不知道怎么进紧急模式修复,与其事后后悔,不如写完立即验证。
3.3 用户、组、sudo与ACL权限配置
第二个任务是:创建用户zhangsan、lisi、wangwu,这三个用户都要求能通过SSH登录;创建小组developers,把zhangsan和lisi加进去;给wangwu配置sudo权限,让他能执行所有管理命令;最后在/data目录下创建一个team共享目录,要求developers组成员可以读写,其他人不能访问,并且额外给wangwu开一个rw权限。
用户和组的创建不难,但有几个命令参数值得记牢:
# 批量创建用户,-m自动创建家目录,-s指定shell useradd -m -s /bin/bash zhangsan useradd -m -s /bin/bash lisi useradd -m -s /bin/bash wangwu # 设置密码,-d选项可以直接在一条命令里完成 echo 'P@ssw0rd' | passwd --stdin zhangsan # 创建组 groupadd developers # 把用户加入组,-aG参数是追加附属组 usermod -aG developers zhangsan usermod -aG developers lisi # 验证 id zhangsan grep developers /etc/groupsudo权限我给wangwu用了sudoers.d目录下的独立文件,这样更规范,万一出问题删掉一个文件就行,不影响系统自带的sudoers:
# 在/etc/sudoers.d/下创建配置文件 echo 'wangwu ALL=(ALL) ALL' > /etc/sudoers.d/wangwu # 设置权限,必须是0440或0444 chmod 440 /etc/sudoers.d/wangwu # 用visudo -c验证语法 visudo -c用visudo验证这步可以直接决定你的sudo配置文件能不能被正常加载,我见过同学直接把/etc/sudoers.d的文件权限写成0777,系统直接忽略,sudo报错半天查不出来。规定很严格:/etc/sudoers.d下的文件权限必须对owner和group只读,不能有write权限。
然后配置共享目录权限和ACL:
# 创建目录 mkdir -p /data/team # 修改属组,让developers组拥有目录 chown :developers /data/team # 设置传统权限:owner读写执行、group读写执行、other无任何权限 chmod 770 /data/team # 给wangwu单独加ACL授权 setfacl -m u:wangwu:rwx /data/team # 查看ACL规则 getfacl /data/team这里有个很重要的点:ACL的优先级比传统权限高。意思是即使wangwu不在owner和group这两个位置上,系统也会先看ACL条目不匹配,匹配到wangwu这个人时就按ACL权限执行。所以即使传统权限里other是0,wangwu依然能正常读写。在实际企业场景里,这种“组权限打底 + 个别用户ACL提权”的组合非常常见,因为进项目组的人会变,但你对某个临时合作的人只想授权一段时间,改ACL比改组成员更安全可控。
3.4 SELinux调整与HTTP服务配置
第三个任务是我觉得最有意思的:把网站页面放到/opt/web_content目录下,但是要让httpd服务能读出来给用户访问。如果你直接新建目录把网页放进去,然后用systemctl start httpd启动服务,浏览器访问一定会403 Forbidden,原因是SELinux给/opt目录下的文件贴的标签是default_t,而httpd进程期望读取的标签是httpd_sys_content_t,标签不匹配,即使文件权限是644也没用。
操作过程如下:
# 创建目录并放入测试页 mkdir -p /opt/web_content echo '<html><body><h1>RHCSA test page</h1></body></html>' > /opt/web_content/index.html chmod 644 /opt/web_content/index.html chown root:root /opt/web_content/index.html # 启动httpd systemctl start httpd # 尝试访问——大概率403 curl http://localhost/访问结果验证了我的判断。解决办法有两种,我两个都练了一遍,因为考试时用哪个取决于你对命令的熟练度:
方法一:restorecon恢复默认上下文。但前提是你把web_content目录放到了标准位置(比如/var/www/html),或者手动指定了映射关系。我这里目录在/opt下,不是标准位置,所以需要第二种方法。
方法二:用semanage定义目录的SELinux类型映射:
# 安装semanage工具(RHCSA环境一般预装policycoreutils-python-utils) dnf install -y policycoreutils-python-utils # 为/opt/web_content目录及子目录定义httpd_sys_content_t类型 semanage fcontext -a -t httpd_sys_content_t "/opt/web_content(/.*)?" # 把新规则应用到目录(restorecon被semanage映射后使用) restorecon -Rv /opt/web_content # 再次尝试访问 curl http://localhost/这次curl正常返回了页面内容。restorecon的作用是“根据当前系统的文件上下文映射表,重新给目录打标签”,它不是随便标一个类型,而是按semanage fcontext里定义好的规则来。所以流程是:先用semanage定义规则,再用restorecon应用规则,缺一不可。
还有一个额外考点:有时候网站程序要写文件进目录,这时候光有httpd_sys_content_t还不够,还得把httpd的布尔值打开。比如PHP上传功能:
# 允许httpd读写用户主目录下的文件 setsebool -P httpd_read_user_content 1 # 允许httpd访问NFS/用户家目录 setsebool -P httpd_use_nfs 1 # 检查布尔值状态 getsebool -a | grep httpd-P参数会把改动永久保存,重启后依然生效。考试时布尔值题目考得不多,但题目中的服务可能涉及目录权限读写和网络服务联动,比如提供文件下载的Apache服务,就必须结合这个来理解。常用的HTTP服务相关布尔值就这么几个,全部记下来也就4~5条,性价比很高。做作业时把这些常见布尔值的含义和默认值列个表抄在笔记本上,比死记不强太多。
3.5 firewalld防火墙端口的永久放行
第四个任务是把HTTP和HTTPS在firewalld里永久放行,并且立刻生效。RHCSA里防火墙考点相对固定,就是永久配置+立即生效,这个节奏不能乱:
# 先看默认区域 firewall-cmd --get-default-zone # 查看当前区域所有规则 firewall-cmd --list-all # 永久放行http服务(默认端口80) firewall-cmd --permanent --add-service=http # 永久放行https服务(默认端口443) firewall-cmd --permanent --add-service=https # 重新加载防火墙规则,让永久变更生效 firewall-cmd --reload # 验证规则 firewall-cmd --list-all firewall-cmd --list-services如果你要放行的是自定义端口,比如8989,就要用port而不是service:
firewall-cmd --permanent --add-port=8989/tcp firewall-cmd --reload这里有三个常见坑。第一个坑:只add了--permanent忘了reload,结果任务里的“立即生效”没达成。第二个坑:只add了临时规则没加--permanent,系统一重启防火墙规则就丢了,拷问时就扣分。第三个坑:HERADME。考试时一定要双击检查firewall-cmd --list-all的端口是否生效。
还有一个容易忽略的细节:firewalld的富规则(rich rule)虽然不常考,但如果你在练习时遇到“只允许特定IP访问某个服务”的题目,要用rich rule写。例如“允许192.168.1.0/24网段访问http服务”,考试里出现过变种,建议基础firewall-cmd命令熟练后,把rich rule语法也过一遍:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' firewall-cmd --reload3.6 定时任务、日志与内核参数验证
第五个任务是给zhangsan配置一个每天凌晨2点执行的定时任务,任务内容是“清理/tmp/test_cache目录下7天前的临时文件”。做这个任务你需要把定时任务的效率和日志机制一起理解:
# 创建要清理的目录 mkdir -p /tmp/test_cache # 用crontab -e编辑zhangsan的crontab crontab -e -u zhangsan # 内容如下: # 0 2 * * * find /tmp/test_cache -type f -mtime +7 -exec rm -f {} \; # 编辑保存后验证 crontab -l -u zhangsan # 查看定时任务执行情况(如果执行了) journalctl -u crond -f | grep zhangsan grep zhangsan /var/log/cron这里特别强调一个经验:写crontab命令时,find后面的-exec rm -f {}要小心。在crontab环境里,%字符有特殊含义,你如果写%Y%m%d这样的日期格式,必须转义成%。我见过不少人在crontab里写日期逻辑因为忘记转义导致任务根本没跑。另外,crontab里最好不要用相对路径,所有命令写绝对路径(/usr/bin/find这样可以避免PATH缺失导致命令找不到)。
日志方面,/var/log/cron是cron任务执行的详细记录,journalctl -u crond也能查到。考试里考日志最常见的两个场景:一是查某一个服务为什么失败,二是查定时任务是否执行。日志服务在RHEL9上默认就是journald,只需要会用journalctl的几个基础参数:
# 查看所有日志 journalctl # 查看某个服务最近的日志 journalctl -u httpd --since "5 minutes ago" # 查看当前启动周期的日志 journalctl -b # 跟踪日志输出,实时刷新 journalctl -f第六个任务是内核参数调整。RHCSA里面偶偶会考到VM内核参数,比如给sysctl设置vm.swappiness降低交换分区使用倾向。这个任务看起来不起眼,但在完整作业里做一遍印象特别深,因为涉及修改文件并让参数立即生效:
# 查看当前值 sysctl vm.swappiness # 永久修改配置 echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf # 立即生效 sysctl -p /etc/sysctl.d/99-swappiness.conf # 验证 sysctl vm.swappiness放到/etc/sysctl.d/下面而不是直接改/etc/sysctl.conf,是因为systemd的systemd-sysctl服务启动时会读取/etc/sysctl.d/下的所有.conf文件,这样管理更清晰、更利于版本控制。这是我在生产环境学来的习惯,考试里多能“加分”。虽然RHCSA不直接考这个,但真实项目中这个习惯很受欢迎。
3.7 远程连接与重启验证
作业的最后一步,我把机器重启了一次,验证所有配置在重启后都不会失效。这一步看起来简单,但很多人考完试心里没底就是因为没有做“重启后验证”这个动作。我一般重启后检查以下几条:
# 1. 检查/data和/opt挂载是否正常 df -h # 2. 检查httpd是否开机自启并且正常运行 systemctl status httpd # 3. 检查防火墙规则是否还在 firewall-cmd --list-all # 4. 检查SELinux状态 getenforce getsebool -a | grep httpd # 5. 检查crontab还在不在 crontab -l -u zhangsan重启后我发现一个问题:httpd没起来。原因是我一开始用systemctl start httpd启动的服务,这个操作不会设置开机自启。用systemctl enable httpd把服务标记为开机自启才是正确做法:
systemctl enable httpd # 同时可以使用enable --now,一步到位启动并设置自启 systemctl enable --now httpdenable --now是个极其常用的组合参数,表示“开机自启+立即启动”。命令敲一遍,既能满足当前需求又能照顾到重启后的状态,是RHCSA必会的加分命令。
4. 我踩过的坑:排查思路与避坑清单
4.1 问题一:LVM扩容后df没变化,到底动不动文件系统
这个我在前面提到过一次,但我还是想单独拿出来再说一遍,因为它在考试中出现的频率太高了。症状很简单:lvextend之后df -h显示大小没变,很多人当场就慌了。我的排查思路是:
# 确认逻辑卷本身已经扩大 lvs # 输出里lvdata在VG vg01下,size应该是9G # 确认文件系统类型 blkid /dev/vg01/lvdata # 看到TYPE="xfs"就知道要用xfs_growfs如果文件系统是xfs,方向只有一个,跑xfs_growfs /data。如果是ext4,要用resize2fs /dev/vg01/lvdata。分清楚这一点你就不会被卡住。
最后一个提醒:xfs_growfs扩大的不是物理空间,而是文件系统可以使用的逻辑空间。它只管文件系统那层,底层的LV的大小早就被lvextend处理过了。所以顺序绝对不能反:先扩LV,再扩文件系统。
4.2 问题二:SELinux上下文标错了,代码里写typeerror
RHEL9的SELinux报错信息其实已经很友好了,但你在终端里看到的只是“Permission denied”,不会告诉你“这是因为SELinux”。有一次我做完SELinux题目后,用curl访问httpd页面成功,但重启后发现依然403,检查了一下,发现问题出在我写错了semanage的路径正则表达式:
# 错误写法,只匹配目录本身,不含子目录 semanage fcontext -a -t httpd_sys_content_t "/opt/web_content" # 正确写法,用(/.*)?匹配目录下所有内容 semanage fcontext -a -t httpd_sys_content_t "/opt/web_content(/.*)?"正则表达式这个细节能决定题目成败。restorecon -Rv执行后,我用ls -Z /opt/web_content/index.html查看文件标签,发现还是default_t而不是httpd_sys_content_t,才意识到是semanage规则没覆盖到文件。
4.3 问题三:firewall-cmd的永久配置总是在重启后消失
这个问题不是firewall-cmd本身的问题,而是我写作业时忘了区分runtime和permanent两个概念。firewall-cmd默认改的是runtime配置,重启后恢复;你要写--permanent才会把配置持久化。如果你两个参数顺序写反了,比如firewall-cmd --add-service=http --permanent,其实也能执行成功,但整个命令看着就别扭,而且很容易漏掉reload。
正确操作流程一定是三步:--permanent加规则 → reload → 验证。reload这步我不能略,它把permanent配置加载到runtime里。没有reload,当前会话的规则集里没有这条,服务照样不通。
4.4 常见问题速查表
| 症状 | 可能原因 | 排查/解决命令 |
|---|---|---|
| 扩容后df没变化 | 忘了xfs_growfs/resize2fs | lvs查看LV大小,xfs_growfs /data |
| httpd访问403 | SELinux上下文不对 | ls -Z查看标签,restorecon -Rv |
| 放行防火墙后仍不通 | 规则没reload或者规则没加对 | firewall-cmd --list-all检查 |
| sudo命令报错 | sudoers.d权限不对或语法错误 | visudo -c,chmod 440 |
| crontab没执行 | %没转义、路径没写绝对路径 | crontab -l、grep用户名 /var/log/cron |
| fstab写错导致开机故障 | UUID错误或挂载选项错误 | mount -a测试,恢复后修改 |
| 服务未开机自启 | 只用start,没用enable | systemctl enable --now 服务名 |
| 重启后主机名不对 | hostnamectl没生效或没永久设置 | hostnamectl set-hostname --static |
4.5 考试现场的节奏把控
做了两次模拟作业之后,我总结出RHCSA考场上的一个关键节奏:先易后难、先做验证、别恋战。考试时间很紧张,遇到卡壳的题先跳过,把稳的题全做完、验证完,再回来啃难题。实践经验是,LVM、用户、权限、防火墙这些题是稳的,选在考试一开始做;SELinux和网络方面的题容易出意外,留足够时间。
另外建议考试前把所有重要配置文件提前背一遍位置:/etc/fstab、/etc/sysconfig/network-scripts/ifcfg-*、/etc/sudoers.d/、/etc/sysctl.d/、/etc/selinux/config、/var/log/cron。RHCSA是开卷操作,但开的是“系统操作”的卷,不是你笔记的卷,所以这些文件在哪、格式长什么样,最好形成肌肉记忆。
5. 二次作业之外的延展:RHCSA只是起点
做完第二次作业,你基本上把RHCSA的核心考点摸过一遍了。这个时候你会发现,自己已经从“会敲命令”变成了“会解决问题的人”——当你看到一个403页面,第一反应不再是怀疑服务器坏了,而是去看SELinux,看权限,看防火墙;当你看到df满了,第一反应是看VG还有没有空间、能不能在线扩。这就是系统管理员的核心能力,也是RHCSA真正要考核的东西。
我个人的建议是:把第二次作业当成一次模拟考。做完之后不要立刻看答案,先对照RHCSA考纲自己检查一遍,哪些没做出来,哪些做的时候犹豫了,这些就是你下一步要重点补的。我做了两遍,第一遍用时近两个小时,第二遍压缩到50分钟左右,到最后考试的时候,我做类似题目基本30分钟能完成,速度和准确率都上来了。
RHCSA这张认证的含金量不在证书本身,而在准备它的过程中逼你把Linux系统管理的基础技能学扎实。第二次作业是这段旅程的中段加油站,搞定它,RHCSA对你来说就是时间问题。