Objectives
What the exam tests
- Boot, reboot, and shut down a system normally
- Boot systems into different targets manually
- Interrupt the boot process to gain access to a system
- Identify CPU/memory-intensive processes and kill or adjust process priority
- Adjust process scheduling with
niceandrenice - Manage tuning profiles using
tuned - Locate and interpret system log files and journals
- Preserve the systemd journal across reboots
- Start, stop, and check the status of network services
- Securely transfer files between systems
- Schedule tasks using
atandcron - Manage temporary files with
systemd-tmpfiles
Boot-target interruption (rescue mode / emergency mode) and service management with systemctl are the most heavily weighted tasks in this domain.
Coverage weight by topic
Boot and targets
Shutdown, reboot, and power commands
systemd targets
Targets replace SysV runlevels. Each defines a group of services to start. The table below shows the equivalents.
Only targets with AllowIsolate=yes in their unit file can be used with isolate. The main exam targets (rescue, multi-user, graphical, emergency) all support it.
Interrupting the boot to gain root access
This is a heavily tested RHCSA task — breaking into a system to reset the root password or fix a misconfiguration.
| Step | Action |
|---|---|
| 1 | Reboot the system. At the GRUB menu, press e to edit the selected boot entry. |
| 2 | Find the line starting with linux. Navigate to the end of that line. |
| 3 | Append rd.break to break into the initramfs before the root filesystem is mounted read-write. (Alternative: init=/bin/bash for an even more minimal shell.) |
| 4 | Press Ctrl+X to boot with the modified parameters. |
| 5 | Remount the real root filesystem read-write:mount -o remount,rw /sysroot |
| 6 | Change root into the real system:chroot /sysroot |
| 7 | Make your changes (e.g., passwd root). |
| 8 | Tell SELinux to relabel on next boot:touch /.autorelabel |
| 9 | Exit chroot (exit), then reboot (exit again or reboot -f). |
Always create /.autorelabel after changing files in chroot. Without it, SELinux will block logins because file contexts will be wrong.
systemd service management
systemctl — core service commands
enable --now is the most efficient exam command — it both enables the service to start at boot and starts it immediately in a single step.
Listing and inspecting units
Unit file anatomy
Always edit unit files in /etc/systemd/system/, never in /usr/lib/systemd/system/. Package updates will overwrite files in the latter location.
tuned — performance profiles
| Profile | Best for |
|---|---|
balanced | General-purpose compromise of power and performance |
throughput-performance | Maximum throughput — disables power saving |
latency-performance | Low-latency workloads (trading, real-time) |
virtual-guest | Running as a VM guest |
virtual-host | Running as a hypervisor host |
powersave | Minimize power consumption |
Process management
Viewing processes
Sending signals to processes
| Signal | Number | Effect |
|---|---|---|
| SIGHUP | 1 | Hangup — reload config (many daemons respond to this) |
| SIGINT | 2 | Interrupt — same as Ctrl+C |
| SIGTERM | 15 | Terminate — graceful shutdown request (default) |
| SIGKILL | 9 | Kill immediately — cannot be caught or ignored |
| SIGSTOP | 19 | Pause process (cannot be caught) |
| SIGCONT | 18 | Resume a stopped process |
Always try SIGTERM (15) first. Only use SIGKILL (9) if the process does not respond — it prevents cleanup and can corrupt data.
Process priority — nice and renice
Memory aid: a nicer process is more considerate of others — it gets less CPU. So a higher nice value = lower priority = less CPU time.
Job control
System logging
journalctl — querying the systemd journal
Persisting the journal across reboots
By default on RHEL 9, the journal is stored in /run/log/journal/ which is a tmpfs — it is lost on every reboot. To persist it:
Creating /var/log/journal/ is the simplest exam approach. journald detects the directory on restart and switches to persistent storage automatically.
Traditional log files and rsyslog
| Log file | Contents |
|---|---|
/var/log/messages | General system messages — the main log file |
/var/log/secure | Authentication and authorization (SSH, sudo, su) |
/var/log/cron | Cron job execution records |
/var/log/maillog | Mail service messages |
/var/log/boot.log | Boot-time service startup messages |
/var/log/dmesg | Kernel ring buffer from boot (also: dmesg command) |
/var/log/audit/audit.log | SELinux and audit framework messages |
/var/log/httpd/ | Apache web server access and error logs |
systemd-tmpfiles — managing temporary files
Job scheduling
at — one-time scheduled jobs
The atd service must be running: systemctl enable --now atd. Check with systemctl status atd.
cron — recurring scheduled jobs
Crontab field reference
| Field | Position | Valid values | Special |
|---|---|---|---|
| Minute | 1st | 0–59 | * every, */n every n, a-b range, a,b list |
| Hour | 2nd | 0–23 | Same as above |
| Day of month | 3rd | 1–31 | Same as above |
| Month | 4th | 1–12 or jan–dec | Same as above |
| Day of week | 5th | 0–7 or sun–sat (0 and 7 = Sunday) | Same as above |
System crontab locations
/etc/crontab— system crontab (has username field)/etc/cron.d/— drop-in cron files/etc/cron.hourly/— scripts run hourly/etc/cron.daily/— scripts run daily/etc/cron.weekly/— scripts run weekly/etc/cron.monthly/— scripts run monthly
Access control files
/etc/cron.allow— only listed users may use cron/etc/cron.deny— listed users are blocked/etc/at.allow— only listed users may use at/etc/at.deny— listed users are blocked from at- If
cron.allowexists,cron.denyis ignored
Secure file transfer
Cheat sheet
Most-tested commands — quick reference
systemctl enable --now svcsystemctl disable --now svcsystemctl status svcsystemctl restart svcsystemctl reload svcsystemctl --state=failedsystemctl daemon-reloadsystemctl set-default multi-user.targetsystemctl isolate rescue.targetsystemctl poweroffsystemctl rebootps auxkill 1234kill -9 1234pkill httpdnice -n 10 commandrenice -n 15 -p PIDjournalctl -fjournalctl -u sshd -fjournalctl --since yesterdaymkdir -p /var/log/journalecho "cmd" | at now +1 houratqcrontab -ecrontab -ltuned-adm profile balancedscp file.txt user@host:/tmp/Cron quick-build guide
| Goal | Crontab entry |
|---|---|
| Every minute | * * * * * /cmd |
| Every 5 minutes | */5 * * * * /cmd |
| Daily at 2:30 AM | 30 2 * * * /cmd |
| Weekdays at 8 AM | 0 8 * * 1-5 /cmd |
| Weekends at noon | 0 12 * * 6,0 /cmd |
| 1st of month at midnight | 0 0 1 * * /cmd |
| Every hour, first 5 min | 0-4 * * * * /cmd |
| Twice a day (8 AM, 8 PM) | 0 8,20 * * * /cmd |
Root password reset — step summary
| # | Action |
|---|---|
| 1 | Reboot → GRUB menu → press e |
| 2 | Find linux line, append rd.break |
| 3 | Press Ctrl+X to boot |
| 4 | mount -o remount,rw /sysroot |
| 5 | chroot /sysroot |
| 6 | passwd root |
| 7 | touch /.autorelabel |
| 8 | exit → exit → reboot |
Practice quiz
Question 1 of 8
You want to enable the httpd service to start at boot and also start it right now in a single command. Which is correct?
systemctl enable --now httpd enables the service for boot and starts it immediately in one atomic operation. Option A works but is two commands. Options C and D use invalid flags — --enable and --start are not valid systemctl options.Question 2 of 8
After interrupting the boot with rd.break and chrooting into /sysroot, you reset the root password. What must you do before rebooting to ensure SELinux does not block logins?
touch /.autorelabel triggers a full filesystem SELinux relabeling on the next boot. When you change /etc/shadow (or any file) in chroot, its SELinux context may be wrong. Without relabeling, SELinux will deny access. The other options either only apply to a running system (A) or are permanent policy changes (D) — neither solves the context mismatch.Question 3 of 8
Which command shows only journal entries from the current boot for the sshd service, following live output?
journalctl -u sshd -b -f combines three flags: -u sshd filters by unit, -b limits to the current boot, and -f follows live output. Option B would work for rsyslog but sshd doesn't have a dedicated log file by default. Options C and D use non-existent flags.Question 4 of 8
A cron entry reads: 30 4 * * 1 /usr/bin/cleanup.sh. When does this run?
Question 5 of 8
You need to send signal 15 to a process with PID 4422. Which two commands are equivalent?
kill 4422 sends SIGTERM (15) by default, and kill -SIGTERM 4422 sends the same signal explicitly. They are equivalent. Option A is wrong because kill -9 sends SIGKILL (9). Option C mixes SIGTERM (15) and SIGKILL (9) — different signals.Question 6 of 8
You want the systemd journal to survive reboots. What is the simplest method?
/var/log/journal/ exists, journald automatically switches from volatile (/run/log/journal/) to persistent storage. This is the simplest approach — no config file edits required. Option A sets the default behavior (auto = use /var/log/journal/ if it exists). Option C is not a valid journalctl flag.Question 7 of 8
Which command permanently changes the default boot target to multi-user (text) mode?
systemctl set-default multi-user.target creates a symlink at /etc/systemd/system/default.target pointing to multi-user.target, making it the permanent default on next boot. Option A only switches for the current session — it does not survive a reboot. Option C is not a valid systemctl subcommand.Question 8 of 8
A backup process is consuming too much CPU. You want to reduce its scheduling priority so other processes get more CPU time. Its PID is 7812. Which command lowers its priority?
renice -n 10 -p 7812 raises the nice value to +10, which lowers the scheduling priority (gives it less CPU time). Higher nice = nicer to others = lower priority. Option A uses -10 which would increase priority (only root can do that). Option C sends SIGSTOP which pauses the process entirely. Option D — nice is for starting new processes, not adjusting running ones (and the syntax is wrong).