<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: VMExam Study Notes</title>
    <description>The latest articles on DEV Community by VMExam Study Notes (@member_9d0d02ee).</description>
    <link>https://dev.to/member_9d0d02ee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4170107%2F10e6a17d-a592-429d-b624-892d2a062759.png</url>
      <title>DEV Community: VMExam Study Notes</title>
      <link>https://dev.to/member_9d0d02ee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/member_9d0d02ee"/>
    <language>en</language>
    <item>
      <title>RHCSA EX200 on RHEL 10: Make Every Task Survive the Reboot</title>
      <dc:creator>VMExam Study Notes</dc:creator>
      <pubDate>Fri, 16 Oct 2026 04:22:45 +0000</pubDate>
      <link>https://dev.to/member_9d0d02ee/rhcsa-ex200-on-rhel-10-make-every-task-survive-the-reboot-5djd</link>
      <guid>https://dev.to/member_9d0d02ee/rhcsa-ex200-on-rhel-10-make-every-task-survive-the-reboot-5djd</guid>
      <description>&lt;p&gt;On the RHCSA exam (EX200), a task only counts if it still works after the machine restarts. Red Hat says it plainly on the &lt;a href="https://www.redhat.com/en/services/training/ex200-red-hat-certified-system-administrator-rhcsa-exam" rel="noopener noreferrer"&gt;official EX200 exam page&lt;/a&gt;: "configurations must persist after reboot without intervention." So the habit worth drilling is not just knowing the command. It is knowing which half of a change lives in memory and which half is written to disk.&lt;/p&gt;

&lt;p&gt;This post pairs the runtime command with its persistent form for each area of the RHEL 10 objectives, then ends with a small script you can run after a reboot to prove your lab still holds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does "persist after reboot" mean on the RHCSA exam?
&lt;/h2&gt;

&lt;p&gt;EX200 is a hands-on exam. You get real systems and a list of tasks, not multiple-choice questions. The current version is based on Red Hat Enterprise Linux 10. Red Hat's training store lists it for the United States as a 3-hour individual exam at USD 500; prices differ by country. You cannot use the internet, notes or books, but for most Red Hat exams the documentation that ships with the product is available.&lt;/p&gt;

&lt;p&gt;The grader looks at the system state, and a reboot is part of how that state is judged. A firewall rule that only exists in the running config, a mount you typed by hand, or SELinux switched to enforcing with &lt;code&gt;setenforce 1&lt;/code&gt; alone will all look fine at the prompt. Then they disappear.&lt;/p&gt;

&lt;p&gt;Results arrive by email within three U.S. business days. They show pass or fail plus a score breakdown by objective, so a persistence slip shows up as a weak section rather than a mystery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which changes vanish at reboot if you do only the runtime half?
&lt;/h2&gt;

&lt;p&gt;Most RHCSA objectives have a "now" command and a "for good" command. Here are the pairs that catch people most often.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Works now, gone after reboot&lt;/th&gt;
&lt;th&gt;Survives the reboot&lt;/th&gt;
&lt;th&gt;Quick check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Firewall&lt;/td&gt;
&lt;td&gt;&lt;code&gt;firewall-cmd --add-service=http&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;add &lt;code&gt;--permanent&lt;/code&gt;, then &lt;code&gt;firewall-cmd --reload&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;firewall-cmd --list-services&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SELinux mode&lt;/td&gt;
&lt;td&gt;&lt;code&gt;setenforce 1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SELINUX=enforcing&lt;/code&gt; in &lt;code&gt;/etc/selinux/config&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;getenforce&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SELinux boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;setsebool httpd_enable_homedirs on&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;setsebool -P httpd_enable_homedirs on&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;getsebool httpd_enable_homedirs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File context&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;chcon -t ...&lt;/code&gt; (lost on the next relabel)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;semanage fcontext -a&lt;/code&gt; plus &lt;code&gt;restorecon&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls -Zd /srv/web&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mount&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mount /dev/vgdata/lvdata /data&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;a &lt;code&gt;UUID=&lt;/code&gt; line in &lt;code&gt;/etc/fstab&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;findmnt /data&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl start httpd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl enable --now httpd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl is-enabled httpd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boot target&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl isolate multi-user.target&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl set-default multi-user.target&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;systemctl get-default&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Journal&lt;/td&gt;
&lt;td&gt;volatile storage in &lt;code&gt;/run/log/journal&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Storage=persistent&lt;/code&gt; in &lt;code&gt;journald.conf&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;journalctl --list-boots&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kernel argument&lt;/td&gt;
&lt;td&gt;editing the entry at the GRUB menu&lt;/td&gt;
&lt;td&gt;&lt;code&gt;grubby --update-kernel=ALL --args=...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;grubby --info=ALL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The rest of this post walks through each group with commands you can paste into a RHEL 10 lab VM.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you build storage that mounts itself again after a reboot?
&lt;/h2&gt;

&lt;p&gt;Create the LVM stack, put a file system on it, and mount it by UUID, not by device name. Device names such as &lt;code&gt;/dev/vdb&lt;/code&gt; can change between boots. A UUID does not.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pvcreate /dev/vdb
vgcreate vgdata /dev/vdb
lvcreate &lt;span class="nt"&gt;--name&lt;/span&gt; lvdata &lt;span class="nt"&gt;--size&lt;/span&gt; 1G vgdata
mkfs.xfs /dev/vgdata/lvdata
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /data
blkid /dev/vgdata/lvdata          &lt;span class="c"&gt;# copy the UUID value&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'UUID=&amp;lt;paste-uuid-here&amp;gt;  /data  xfs  defaults  0 0'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
systemctl daemon-reload           &lt;span class="c"&gt;# regenerate mount units from fstab&lt;/span&gt;
mount &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; findmnt /data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;mount -a&lt;/code&gt; is your safety net. If it errors, the line in &lt;code&gt;/etc/fstab&lt;/code&gt; is wrong, and you want to learn that now and not from a system that will not boot. Red Hat's &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_logical_volumes/index" rel="noopener noreferrer"&gt;RHEL 10 guide to logical volumes&lt;/a&gt; uses the long option names shown above.&lt;/p&gt;

&lt;p&gt;Growing a volume is one command if you let LVM resize the file system for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lvextend &lt;span class="nt"&gt;--size&lt;/span&gt; +500M &lt;span class="nt"&gt;--resizefs&lt;/span&gt; vgdata/lvdata
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; /data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap follows the same pattern: &lt;code&gt;mkswap&lt;/code&gt; on the new device, &lt;code&gt;swapon&lt;/code&gt; to use it now, and a line such as &lt;code&gt;UUID=&amp;lt;uuid&amp;gt;  none  swap  defaults  0 0&lt;/code&gt; in &lt;code&gt;/etc/fstab&lt;/code&gt; so it comes back. The &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_file_systems/index" rel="noopener noreferrer"&gt;RHEL 10 file systems guide&lt;/a&gt; explains each &lt;code&gt;/etc/fstab&lt;/code&gt; field and the &lt;code&gt;systemctl daemon-reload&lt;/code&gt; step.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you make firewall and SELinux changes permanent?
&lt;/h2&gt;

&lt;p&gt;With firewalld, a rule without &lt;code&gt;--permanent&lt;/code&gt; lives only in the runtime configuration. Write it to the permanent configuration and reload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;firewall-cmd &lt;span class="nt"&gt;--permanent&lt;/span&gt; &lt;span class="nt"&gt;--add-service&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http
firewall-cmd &lt;span class="nt"&gt;--permanent&lt;/span&gt; &lt;span class="nt"&gt;--add-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;82/tcp
firewall-cmd &lt;span class="nt"&gt;--reload&lt;/span&gt;
firewall-cmd &lt;span class="nt"&gt;--list-all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you already built a working runtime setup, &lt;code&gt;firewall-cmd --runtime-to-permanent&lt;/code&gt; copies it over in one step. The &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_firewalls_and_packet_filters/index" rel="noopener noreferrer"&gt;RHEL 10 firewall guide&lt;/a&gt; uses both styles.&lt;/p&gt;

&lt;p&gt;SELinux has three separate persistence traps: the mode, the file labels and the booleans.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Mode: setenforce alone does not survive a reboot&lt;/span&gt;
setenforce 1
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/^SELINUX=.*/SELINUX=enforcing/'&lt;/span&gt; /etc/selinux/config

&lt;span class="c"&gt;# Labels: record the rule, then apply it&lt;/span&gt;
semanage fcontext &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; httpd_sys_content_t &lt;span class="s1"&gt;'/srv/web(/.*)?'&lt;/span&gt;
restorecon &lt;span class="nt"&gt;-Rv&lt;/span&gt; /srv/web

&lt;span class="c"&gt;# Non-standard port for a confined service&lt;/span&gt;
semanage port &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; http_port_t &lt;span class="nt"&gt;-p&lt;/span&gt; tcp 82

&lt;span class="c"&gt;# Booleans: -P writes the value to the policy on disk&lt;/span&gt;
setsebool &lt;span class="nt"&gt;-P&lt;/span&gt; httpd_enable_homedirs on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;chcon&lt;/code&gt; does change a label, and that change even survives a reboot. But the next &lt;code&gt;restorecon&lt;/code&gt; or full relabel puts the policy's default back, which is why the exam objective says "restore default file contexts". The &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/using_selinux/index" rel="noopener noreferrer"&gt;RHEL 10 SELinux guide&lt;/a&gt; shows &lt;code&gt;semanage fcontext -a&lt;/code&gt; followed by &lt;code&gt;restorecon&lt;/code&gt; as the lasting fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do services, boot targets and time sync come back on their own?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;systemctl start&lt;/code&gt; runs a service now. &lt;code&gt;systemctl enable&lt;/code&gt; makes it start at boot. Using &lt;code&gt;--now&lt;/code&gt; does both, so it is the safer reflex on the exam:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; httpd
systemctl set-default multi-user.target
systemctl get-default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Time sync is a client setting in &lt;code&gt;/etc/chrony.conf&lt;/code&gt; plus an enabled &lt;code&gt;chronyd&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'server classroom.example.com iburst'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/chrony.conf
systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; chronyd
systemctl restart chronyd
chronyc sources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;classroom.example.com&lt;/code&gt; with whatever server the task names. The &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_time_synchronization/index" rel="noopener noreferrer"&gt;RHEL 10 time synchronization guide&lt;/a&gt; documents the &lt;code&gt;server ... iburst&lt;/code&gt; line and the &lt;code&gt;chronyc sources&lt;/code&gt; output.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you keep the system journal across reboots?
&lt;/h2&gt;

&lt;p&gt;The objective "preserve system journals" means logs from the previous boot must still be readable after a restart. Set the storage mode in the journald config and restart the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/systemd/journald.conf.d
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'[Journal]\nStorage=persistent\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/systemd/journald.conf.d/persist.conf
systemctl restart systemd-journald
journalctl &lt;span class="nt"&gt;--list-boots&lt;/span&gt;            &lt;span class="c"&gt;# after a reboot, the earlier boot is listed too&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With &lt;code&gt;Storage=persistent&lt;/code&gt;, journald writes below &lt;code&gt;/var/log/journal&lt;/code&gt; and creates the directory if needed. With &lt;code&gt;auto&lt;/code&gt;, it only does so when that directory already exists. The &lt;a href="https://man7.org/linux/man-pages/man5/journald.conf.5.html" rel="noopener noreferrer"&gt;journald.conf manual page&lt;/a&gt; spells out all four storage modes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you change kernel arguments and network settings for good?
&lt;/h2&gt;

&lt;p&gt;A kernel argument typed at the GRUB menu lasts for one boot. &lt;code&gt;grubby&lt;/code&gt; writes it to every boot entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;grubby &lt;span class="nt"&gt;--update-kernel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ALL &lt;span class="nt"&gt;--args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"audit=1"&lt;/span&gt;
grubby &lt;span class="nt"&gt;--info&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ALL | &lt;span class="nb"&gt;grep &lt;/span&gt;args
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/managing_monitoring_and_updating_the_kernel/index" rel="noopener noreferrer"&gt;RHEL 10 kernel guide&lt;/a&gt; covers &lt;code&gt;--args&lt;/code&gt; and &lt;code&gt;--remove-args&lt;/code&gt; for the "modify the system bootloader" objective.&lt;/p&gt;

&lt;p&gt;Network settings belong in a NetworkManager connection profile, which is already stored on disk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nmcli connection modify ens3 ipv4.method manual ipv4.addresses 192.0.2.10/24 &lt;span class="se"&gt;\&lt;/span&gt;
  ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 connection.autoconnect &lt;span class="nb"&gt;yes
&lt;/span&gt;nmcli connection up ens3
hostnamectl set-hostname server1.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the connection name your system shows in &lt;code&gt;nmcli connection show&lt;/code&gt;. &lt;code&gt;ip addr add&lt;/code&gt; would work only until the next reboot.&lt;/p&gt;

&lt;h2&gt;
  
  
  How can you test persistence before you hand in the exam?
&lt;/h2&gt;

&lt;p&gt;Reboot your practice VM on purpose, then run a check script. Writing it is also practice for the "create simple shell scripts" objective, since it uses &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt; and a script argument.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# after-reboot.sh  usage: ./after-reboot.sh /data&lt;/span&gt;
&lt;span class="nv"&gt;mnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;/data&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;fail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
check&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null 2&amp;gt;&amp;amp;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"OK   &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;else &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"FAIL &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;fail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;fi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

check &lt;span class="s2"&gt;"mount &lt;/span&gt;&lt;span class="nv"&gt;$mnt&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;        &lt;span class="s2"&gt;"findmnt &lt;/span&gt;&lt;span class="nv"&gt;$mnt&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
check &lt;span class="s2"&gt;"selinux enforcing"&lt;/span&gt; &lt;span class="s2"&gt;"[ &lt;/span&gt;&lt;span class="se"&gt;\"\$&lt;/span&gt;&lt;span class="s2"&gt;(getenforce)&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; = Enforcing ]"&lt;/span&gt;
check &lt;span class="s2"&gt;"http in firewall"&lt;/span&gt;  &lt;span class="s2"&gt;"firewall-cmd --list-services | grep -qw http"&lt;/span&gt;
check &lt;span class="s2"&gt;"journal kept"&lt;/span&gt;      &lt;span class="s2"&gt;"journalctl -q -b -1 -n 1"&lt;/span&gt;   &lt;span class="c"&gt;# fails if the last boot's log is gone&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;svc &lt;span class="k"&gt;in &lt;/span&gt;httpd chronyd&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;check &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$svc&lt;/span&gt;&lt;span class="s2"&gt; enabled"&lt;/span&gt; &lt;span class="s2"&gt;"systemctl is-enabled &lt;/span&gt;&lt;span class="nv"&gt;$svc&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done
&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="nv"&gt;$fail&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9xiy1ije9fzn5fqti4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa9xiy1ije9fzn5fqti4g.png" alt="Runtime versus persistent command pairs for RHCSA EX200 on RHEL 10, with the check for each" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A clean run after a real reboot is the closest you can get at home to how the exam will be judged. On exam day, leave time at the end to reboot and check your work. Fixing a missed &lt;code&gt;--permanent&lt;/code&gt; takes seconds. Finding out from your score report takes days.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does RHCSA lead after you pass?
&lt;/h2&gt;

&lt;p&gt;Since May 11, 2026, Red Hat sorts its certifications into five tracks. Its &lt;a href="https://www.redhat.com/en/services/training-and-certification/faq" rel="noopener noreferrer"&gt;training and certification FAQ&lt;/a&gt; says EX200 is the foundational exam for both the Enterprise Linux track and the Ansible track. The usual next step is EX294, now titled Red Hat Certified Advanced System Administrator in Ansible. The VMExam channel has no RHCSA video yet, so here is its short take on EX294, the exam that builds on these skills:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/KGKKdshkCoU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;For a side-by-side view of every EX200 objective group, the &lt;a href="https://www.vmexam.com/red-hat/red-hat-ex200-rhcsa-certification-exam-syllabus" rel="noopener noreferrer"&gt;RHCSA EX200 exam syllabus&lt;/a&gt; lists them in the same order as Red Hat, which makes it easy to tick off each one as your reboot script passes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Is the RHCSA EX200 exam multiple choice?
&lt;/h3&gt;

&lt;p&gt;No. EX200 is a performance-based exam. You complete real system administration tasks on live systems within 3 hours, and your configurations must still work after a reboot.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Which version of RHEL is EX200 based on?
&lt;/h3&gt;

&lt;p&gt;The current EX200 exam is based on Red Hat Enterprise Linux 10. Practice on a RHEL 10 system so commands, defaults and documentation match what you will see.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Can I use documentation during the RHCSA exam?
&lt;/h3&gt;

&lt;p&gt;You get no internet access and cannot bring notes, books or electronic documents. For most Red Hat exams, the documentation that ships with the product is available on the exam system.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. What happens if I fail EX200 on my first attempt?
&lt;/h3&gt;

&lt;p&gt;Red Hat gives a free retake after an unsuccessful first attempt at an individual exam. Your results arrive within three U.S. business days with a score breakdown by objective, so you can see which sections to rework.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. How long does the RHCSA certification stay valid?
&lt;/h3&gt;

&lt;p&gt;Red Hat certifications are current for three years from the date you earn them. You can renew by retaking the exam for your highest certification, earning another one at the same level, or earning a higher-level certification.&lt;/p&gt;

&lt;p&gt;Written by the team behind VMExam, which publishes study notes and practice tests for cloud, virtualization and Linux certification exams.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>redhat</category>
      <category>sysadmin</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
