2 - Tâches basiques
Maîtrise du shell Bash sous RHEL 9 : ligne de commande, aide (man), éditeur vi/vim, redirections, historique, expansion, variables, alias et fichiers de démarrage. Cœur de l'objectif EX200 « Understand and use essential tools ».
A. Ligne de commande et terminal
- Le shell est l'environnement où l'utilisateur communique avec l'OS. Bash est le shell par défaut sous RHEL 9.
- GNOME est l'interface graphique (GUI) par défaut.
- Depuis le shell graphique, on ouvre une fenêtre terminal qui exécute Bash.
Terminal :
- C'est un environnement qui exécute le shell.
- En mode graphique, plusieurs terminaux peuvent être ouverts simultanément.
- En mode texte (console), un seul terminal est lancé depuis la console. Pour contourner cela, on dispose de terminaux virtuels accessibles via
Ctrl+Alt+Fn.
who # affiche les utilisateurs/terminaux connectés
w # qui est connecté + activité (load, idle, process)
sudo chvt 4 # bascule vers le terminal virtuel n°4 (sudo = superuser do)
# Ctrl+Alt+F4 : équivalent graphique de "chvt 4"
Exemple — ouverture d'un 2e terminal virtuel et vérification avec w :

💡 tty1 est généralement la session graphique (GNOME) sous RHEL 9 ; tty2–tty6 sont des consoles texte.
B. Anatomie d'une commande Linux
- Une commande peut prendre des arguments (ce sur quoi elle agit) et des options (qui modifient son comportement).
--helpdonne une aide rapide sur la plupart des commandes.
ls -l /etc # ls = commande, -l = option, /etc = argument
ls --help # aide synthétique de la commande
C. Aide système : man
man passwd # manuel de la commande passwd
man 5 passwd # section 5 : le format du fichier /etc/passwd
man -a passwd # parcourt toutes les sections disponibles une à une
Navigation dans man : / chercher en avant, ? chercher en arrière, G aller à la fin, g aller au début, q quitter.
Sections de man utiles pour le RHCSA :
| Section | Contenu |
|---|---|
| 1 | Programmes exécutables / commandes shell |
| 5 | Formats de fichiers (ex : /etc/passwd, /etc/fstab) |
| 8 | Administration système (commandes root) |
Les pages man sont indexées dans la mandb (base de données) :
sudo mandb # (re)construit la base de données man en root
man -k user # recherche par mot-clé "user" dans la mandb (= apropos)
man -k user | grep 8 # filtre les résultats sur la section 8 (admin système)

💡 apropos mot ≡ man -k mot. Autres outils d'aide : pinfo, info, et la doc dans /usr/share/doc/.
D. Éditeurs de texte
La configuration Linux se fait par modification de fichiers texte :
- ASCII : la plupart des fichiers de config classiques.
- YAML : management de config (ex : Ansible).
- JSON : format de stockage de données.
- XML : alternative plus ancienne à JSON/YAML.
Éditeurs courants : nano (simple), vim (version améliorée de vi, utilisée par les pros).
🚨 Sous RHEL 9, vi est un lien minimal ; le paquet complet est vim-enhanced (à installer si absent : sudo dnf install vim-enhanced).
Modes et raccourcis vim :
| Touche | Action |
|---|---|
Esc |
passer en mode commande |
i / a |
passer en mode insertion (avant / après le curseur) |
o |
ouvrir une nouvelle ligne en dessous + mode insertion |
:wq |
écrire (write) et quitter |
:q! |
quitter sans sauvegarder |
dd |
supprimer la ligne courante (coupe dans le buffer) |
yy |
copier (yank) la ligne courante |
p |
coller (paste) le contenu du buffer |
v |
entrer en mode visuel (sélection) |
u |
annuler (undo) la dernière modification |
Ctrl+R |
rétablir (redo) |
gg |
aller au début du document |
G |
aller à la fin du document |
/texte |
rechercher vers l'avant |
?texte |
rechercher vers l'arrière |
^ |
début de ligne |
$ |
fin de ligne |
w |
mot suivant |
:%s/old/new/g |
substituer toutes les occurrences de old par new |
:set number |
afficher la numérotation des lignes |
💡 vimtutor est un tutoriel interactif intégré pour apprendre vim.
E. Redirections et pipes
Trois flux standard : STDIN (0, entrée), STDOUT (1, sortie), STDERR (2, erreurs).
| Opérateur | Effet |
|---|---|
> |
redirige STDOUT vers un fichier (écrase) |
>> |
redirige STDOUT vers un fichier (ajoute à la suite) |
2> |
redirige STDERR |
2> /dev/null |
jette les erreurs (poubelle) |
&> |
redirige STDOUT et STDERR |
< |
utilise le contenu d'un fichier comme STDIN |
| |
pipe : STDOUT de la 1re commande → STDIN de la 2e |
echo "test hamid" > test # crée/écrase test avec une ligne
cat test # -> test hamid
echo "test une ligne en plus" >> test # ajoute à la suite
cat test # -> 2 lignes
cat test | grep plus # n'affiche que la ligne contenant "plus"
ls -l | grep user # liste filtrée sur "user"
Exemple complet (création, écrasement, ajout, filtrage) :

🚨 > écrase sans avertissement. Une faute de frappe sur un fichier important = perte de données.
F. Historique de commandes
L'historique se trouve dans ~/.bash_history.
history # affiche l'historique numéroté
!42 # ré-exécute la commande n°42 de l'historique
!! # ré-exécute la dernière commande
history -w # écrit l'historique courant dans le fichier
history -c # vide l'historique de la session courante (mémoire)
history -d 5 # supprime l'entrée n°5
HISTSIZE: nombre de commandes gardées en mémoire pour la session.HISTFILESIZE: nombre de lignes conservées dans le fichier~/.bash_history.

G. Raccourcis clavier du shell
| Raccourci | Action |
|---|---|
Ctrl+C |
interrompt le process en cours |
Ctrl+D |
envoie EOF (end-of-file) au process interactif (≈ logout) |
Ctrl+A |
curseur en début de ligne |
Ctrl+E |
curseur en fin de ligne |
Ctrl+R |
recherche inversée dans l'historique |
Ctrl+L |
efface l'écran (≈ clear) |
Ctrl+U |
efface du curseur au début de ligne |
Alt+B |
curseur recule d'un mot (backward) |
Alt+F |
curseur avance d'un mot (forward) |
H. Shell expansion (globbing & expansion)
ls * # tous les fichiers
ls a? # "a" suivi d'UN seul caractère
ls [a-e]* # commence par a, b, c, d ou e
touch file{1..9} # crée file1 ... file9 (expansion d'accolades)
useradd {hamid,hamid1,hamid2} # 3 fois useradd (1 par élément)
ls -l $(which passwd) # command substitution : output de "which passwd" en argument
💡 {1..9} = séquence ; {a,b,c} = liste. Le * (glob) est interprété par le shell, pas par la commande.
I. Guillemets et échappement : " ' \
"…"(double) : conserve le sens des variables ($), mais protège les espaces.'…'(simple) et\: suppriment le sens spécial (littéral).
echo $PATH # affiche le contenu de la variable PATH
echo "$PATH" # affiche aussi le contenu (variable interprétée)
echo '$PATH' # affiche littéralement : $PATH
echo \$PATH # affiche littéralement : $PATH (échappement du $)
ls -l hamid hamid2 # 2 arguments séparés
ls -l "hamid hamid2" # 1 seul argument (fichier nommé "hamid hamid2")
J. Variables
- Séparent les données spécifiques du code ; utiles dans les scripts.
- Bash possède des variables prédéfinies.
envles liste.
env # variables d'environnement de la session
color=blue # variable LOCALE (shell courant uniquement)
echo $color # -> blue
export color=green # variable d'ENVIRONNEMENT (héritée par les sous-shells)
Pour rendre une variable globale et persistante, on l'ajoute à un fichier de config (voir section L).
K. Alias
alias del='rm -rf' # "del" exécutera "rm -rf"
unalias del # supprime l'alias
alias # liste les alias actifs
🚨 Ne jamais créer un alias dangereux comme alias del='rm -rf /'. Un alias persistant qui masque une commande système peut détruire des données ou rendre une commande inopérante.
L. Startup files (fichiers de démarrage)
| Fichier | Rôle |
|---|---|
/etc/profile |
settings système chargés par un login shell (tous les users) |
/etc/bashrc |
exécuté à l'ouverture d'un sous-shell (non-login) |
~/.bash_profile |
version par utilisateur de /etc/profile (login shell) |
~/.bashrc |
version par utilisateur de /etc/bashrc (sous-shell) |
Pour des variables/alias personnels et persistants, on les met dans ~/.bashrc (et ~/.bash_profile).
# Dans ~/.bash_profile :
export color=red
alias dir='ls -ltr'
export HISTFILESIZE=2500
source ~/.bash_profile # applique les changements sans rouvrir de session
echo $color # -> red
echo $HISTFILESIZE # -> 2500
dir # -> résultat de "ls -ltr"
💡 source fichier ≡ . fichier : exécute le fichier dans le shell courant (les variables restent définies).
M. Compléments EX200 (« essential tools ») non détaillés dans les notes
L'objectif officiel « Understand and use essential tools » de l'EX200 inclut aussi des points non couverts ci-dessus. Rappel synthétique :
# grep + expressions régulières
grep -i "motif" fichier # recherche insensible à la casse
grep -E "ab+c" fichier # ERE (regex étendues)
# Gestion fichiers / répertoires
cp -r src/ dest/ ; mv a b ; rm -r dir/ ; mkdir -p a/b/c
# Liens
ln fichier lien_dur # hard link (même inode)
ln -s fichier lien_symbolique # lien symbolique (soft link)
# Permissions ugo/rwx
chmod 644 fichier ; chmod u+x script.sh ; chown user:group fichier
# Archivage / compression
tar czf arch.tar.gz dossier/ # crée (gzip)
tar xzf arch.tar.gz # extrait
gzip f / gunzip f.gz ; bzip2 f / bunzip2 f.bz2
# Accès distant
ssh user@hote ; su - user # SSH + changement d'utilisateur
⚠️ Non couvert par les notes :
grep/regex, liens durs vs symboliques, permissionsugo/rwx, archivagetar/gzip/bzip2, accès SSH etsu. Ces sujets font partie de l'objectif EX200 et sont traités dans d'autres modules (permissions, stockage, réseau) — à réviser séparément.
Sources : EX200 – Red Hat Certified System Administrator exam