RHCSA 9 (EX200) Study Guide
Hands-on study notes for RHCSA 9 (EX200) exam preparation. Based on Sander van Vugt’s "Red Hat RHCSA 9 Cert Guide" (Pearson IT Certification).
Exam Overview
Exam Code |
EX200 |
Duration |
3 hours |
Format |
Performance-based (hands-on tasks) |
Passing Score |
210 out of 300 (70%) |
Environment |
RHEL 9 virtual machines |
Study Approach
This is a hands-on first approach:
-
Read - Review chapter concepts
-
Type - Execute every command (no copy-paste for learning)
-
Document - Capture what works, what breaks
-
Diagram - Visualize with D2 diagrams
-
Repeat - Practice until muscle memory
|
The exam is 100% practical. You must TYPE commands from memory. Reading alone is insufficient. |
Chapter Progress
| Chapter | Topic | Status | Notes |
|---|---|---|---|
1 |
[ ] Not Started |
VM setup, kickstart |
|
2 |
[ ] Not Started |
man, vim, redirects |
|
3 |
Text File Management |
[ ] Not Started |
head, tail, grep, regex |
4 |
File System Hierarchy |
[ ] Not Started |
FHS, mounting |
5 |
User & Group Management |
[ ] Not Started |
useradd, passwd, groups |
6 |
Permissions |
[ ] Not Started |
chmod, chown, ACLs |
7 |
Network Configuration |
[ ] Not Started |
nmcli, ip, hostname |
8 |
Software Management |
[ ] Not Started |
dnf, rpm, repos |
9 |
Process Management |
[ ] Not Started |
ps, top, kill, nice |
10 |
Scheduled Tasks |
[ ] Not Started |
cron, at, systemd timers |
11 |
systemd |
[ ] Not Started |
systemctl, units, targets |
12 |
Logging |
[ ] Not Started |
journalctl, rsyslog |
13 |
Storage |
[ ] Not Started |
partitions, LVM, swap |
14 |
File Systems |
[ ] Not Started |
xfs, ext4, formatting |
15 |
NFS & Autofs |
[ ] Not Started |
mounts, automount |
16 |
Boot Process |
[ ] Not Started |
GRUB2, dracut, rescue |
17 |
SELinux |
[ ] Not Started |
contexts, booleans, troubleshooting |
18 |
SSH & Remote Access |
[ ] Not Started |
sshd, keys, tunnels |
19 |
Firewall |
[ ] Not Started |
firewalld, zones, services |
20 |
Time Synchronization |
[ ] Not Started |
chronyd, timedatectl |
21 |
Containers |
[ ] Not Started |
podman basics |
22 |
Exam Preparation |
[ ] Not Started |
Practice exam |
Architecture Diagrams
D2 source files are in examples/rhcsa/d2/. Render with Kroki or d2 CLI.
RHEL System Layers
# RHEL System Architecture Layers
# Edit this D2 diagram as you learn
direction: down
title: RHEL 9 System Layers {
shape: text
style.font-size: 24
}
# User space applications
apps: Applications {
shape: rectangle
style.fill: "#e3f2fd"
web: Web Server
db: Database
custom: Custom Apps
}
# Middleware / Services
services: System Services {
shape: rectangle
style.fill: "#fff3e0"
systemd: systemd (PID 1)
sshd: sshd
crond: crond
firewalld: firewalld
}
# Libraries
libs: Libraries (glibc, etc.) {
shape: rectangle
style.fill: "#f3e5f5"
}
# System Calls
syscall: System Call Interface {
shape: rectangle
style.fill: "#ffecb3"
style.stroke: "#ff6f00"
style.stroke-width: 2
}
# Kernel
kernel: Linux Kernel {
shape: rectangle
style.fill: "#c8e6c9"
style.stroke: "#2e7d32"
style.stroke-width: 2
process: Process Management
memory: Memory Management
fs: File Systems
network: Networking
device: Device Drivers
}
# Hardware
hardware: Hardware {
shape: rectangle
style.fill: "#90a4ae"
style.stroke: "#37474f"
style.stroke-width: 2
cpu: CPU
ram: RAM
disk: Storage
nic: Network
}
# Connections
apps -> services
services -> libs
libs -> syscall
syscall -> kernel
kernel -> hardware
# User vs Kernel space divider
user_space: User Space {
shape: text
style.fill: "#e8f5e9"
}
kernel_space: Kernel Space {
shape: text
style.fill: "#ffebee"
}
File System Hierarchy
# Linux File System Hierarchy Standard (FHS)
# Edit this D2 diagram as you learn
direction: down
title: RHEL 9 File System Hierarchy {
shape: text
style.font-size: 24
}
root: "/" (root) {
shape: rectangle
style.fill: "#ffcdd2"
style.stroke: "#c62828"
style.stroke-width: 3
}
# Essential directories
bin: /bin {
shape: rectangle
style.fill: "#c8e6c9"
label: "/bin\n(essential commands)"
}
sbin: /sbin {
shape: rectangle
style.fill: "#c8e6c9"
label: "/sbin\n(system commands)"
}
etc: /etc {
shape: rectangle
style.fill: "#fff9c4"
label: "/etc\n(configuration)"
}
home: /home {
shape: rectangle
style.fill: "#e3f2fd"
label: "/home\n(user directories)"
}
root_home: /root {
shape: rectangle
style.fill: "#f3e5f5"
label: "/root\n(root's home)"
}
var: /var {
shape: rectangle
style.fill: "#ffe0b2"
label: "/var\n(variable data)"
}
tmp: /tmp {
shape: rectangle
style.fill: "#b3e5fc"
label: "/tmp\n(temporary files)"
}
usr: /usr {
shape: rectangle
style.fill: "#d1c4e9"
label: "/usr\n(user programs)"
}
boot: /boot {
shape: rectangle
style.fill: "#ffccbc"
label: "/boot\n(bootloader, kernel)"
}
dev: /dev {
shape: rectangle
style.fill: "#b2dfdb"
label: "/dev\n(device files)"
}
proc: /proc {
shape: rectangle
style.fill: "#f0f4c3"
label: "/proc\n(process info)"
}
sys: /sys {
shape: rectangle
style.fill: "#f0f4c3"
label: "/sys\n(system info)"
}
mnt: /mnt {
shape: rectangle
style.fill: "#cfd8dc"
label: "/mnt\n(mount point)"
}
# Connections
root -> bin
root -> sbin
root -> etc
root -> home
root -> root_home
root -> var
root -> tmp
root -> usr
root -> boot
root -> dev
root -> proc
root -> sys
root -> mnt
# Subdirectories of interest
var_log: /var/log {
shape: rectangle
style.fill: "#ffe0b2"
}
var_spool: /var/spool {
shape: rectangle
style.fill: "#ffe0b2"
}
usr_bin: /usr/bin {
shape: rectangle
style.fill: "#d1c4e9"
}
usr_sbin: /usr/sbin {
shape: rectangle
style.fill: "#d1c4e9"
}
usr_local: /usr/local {
shape: rectangle
style.fill: "#d1c4e9"
}
etc_ssh: /etc/ssh {
shape: rectangle
style.fill: "#fff9c4"
}
etc_systemd: /etc/systemd {
shape: rectangle
style.fill: "#fff9c4"
}
var -> var_log
var -> var_spool
usr -> usr_bin
usr -> usr_sbin
usr -> usr_local
etc -> etc_ssh
etc -> etc_systemd
# Legend
legend: {
label: Directory Types
style.fill: "#fafafa"
static: "Static = rarely changes"
variable: "Variable = changes often"
virtual: "Virtual = /proc, /sys (kernel)"
}
Command Quick Reference
File Operations
# File Operations
# ============================================
# List files with details
ls -la /etc/
# Copy files
cp /etc/passwd /tmp/passwd.bak
# Copy directories recursively
cp -r /etc/ssh /tmp/ssh-backup/
# Move/rename
mv oldname.txt newname.txt
# Remove files (careful!)
rm file.txt
# Remove directories
rm -rf /tmp/testdir/
# Create directory with parents
mkdir -p /path/to/nested/dir
# Find files by name
find /etc -name "*.conf"
# Find files by type
find /var -type f -mtime -1 # modified in last day
# Read file contents
cat /etc/hostname
head -20 /var/log/messages
tail -f /var/log/messages
# File info
file /bin/bash
stat /etc/passwd
User Management
# User Management
# ============================================
# Create user
sudo useradd -m -s /bin/bash newuser
# Set password
sudo passwd newuser
# Create user with specific UID/GID
sudo useradd -u 1500 -g users -c "Test User" testuser
# Modify user
sudo usermod -aG wheel existinguser # add to group
sudo usermod -s /sbin/nologin svcacct # change shell
# Delete user
sudo userdel -r olduser # -r removes home dir
# View user info
id username
getent passwd username
# Create group
sudo groupadd developers
# Modify group
sudo groupmod -n newname oldname
# Delete group
sudo groupdel groupname
# View group membership
groups username
getent group groupname
Service Management
# Service Management (systemd)
# ============================================
# List all services
systemctl list-units --type=service
# List enabled services
systemctl list-unit-files --type=service | grep enabled
# Service status
systemctl status sshd
# Start/stop/restart
sudo systemctl start sshd
sudo systemctl stop sshd
sudo systemctl restart sshd
sudo systemctl reload sshd # reload config without restart
# Enable/disable at boot
sudo systemctl enable sshd
sudo systemctl disable sshd
# Enable and start in one command
sudo systemctl enable --now sshd
# Check if enabled
systemctl is-enabled sshd
systemctl is-active sshd
# View logs for service
journalctl -u sshd
journalctl -u sshd -f # follow
journalctl -u sshd --since "1 hour ago"
# Mask/unmask (prevent starting)
sudo systemctl mask sshd
sudo systemctl unmask sshd
# Reload systemd after unit file changes
sudo systemctl daemon-reload
Practice Environment
Requirements
-
RHEL 9 or compatible (Rocky Linux 9, AlmaLinux 9)
-
2GB RAM minimum per VM
-
20GB disk space per VM
-
KVM/QEMU or VirtualBox
Recommended Lab Setup
┌─────────────────────────────────────────────────────────┐
│ LAB ENVIRONMENT │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ server1 │ │ server2 │ │
│ │ RHEL 9 │────▶│ RHEL 9 │ │
│ │ Primary │ │ Secondary │ │
│ └─────────────┘ └─────────────┘ │
│ │ │ │
│ └───────┬───────────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Workstation │ │
│ │ (Arch/RHEL) │ │
│ └───────────────┘ │
│ │
│ server1: 192.168.122.10 │
│ server2: 192.168.122.20 │
│ │
└─────────────────────────────────────────────────────────┘
Resources
Primary
-
Sander van Vugt - RHCSA 9 Cert Guide (Pearson)
-
Red Hat Documentation: access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
Practice Exams
-
Book end-of-chapter labs
-
RHLS (Red Hat Learning Subscription) if available
Study Schedule Template
| Week | Chapters | Focus |
|---|---|---|
1 |
1-4 |
Installation, Tools, Files |
2 |
5-8 |
Users, Permissions, Network, Software |
3 |
9-12 |
Processes, Tasks, systemd, Logging |
4 |
13-16 |
Storage, File Systems, Boot |
5 |
17-21 |
SELinux, SSH, Firewall, Containers |
6 |
22 + Review |
Practice Exams |