Formations & Tutos
Tu es noté sur le résultat: observe → change minimal → rends persistant → prouve.
# Diagnostic express
systemctl status SERVICE
journalctl -xeu SERVICE
# Ports + process
ss -lntup
# Réseau
ip a
ip r
# SELinux (si c'est inexpliqué)
getenforce
ausearch -m AVC -ts recent
Manipulations de base: navigation, recherche, archivage, redirections I/O.
# Copier, déplacer, supprimer
cp -r /src /dest
mv file newname
rm -rf /dir
# Liens
ln file hardlink
ln -s /path/to/target symlink
# Infos fichier
file document.pdf
stat file
wc -l file
# Chercher dans fichiers
grep "pattern" file
grep -i "insensible" file # ignore casse
grep -r "pattern" /etc/ # récursif
grep -v "exclure" file # inversion
grep -c "count" file # nb occurrences
grep -E "regex|extended" file # ERE
# Exemples utiles
grep -E "^root" /etc/passwd
grep -E "failed|error" /var/log/messages
# Par nom
find / -name "*.conf" 2>/dev/null
find / -iname "*.LOG" # insensible casse
# Par type
find /home -type f # fichiers
find /home -type d # dossiers
# Par propriétaire / groupe
find / -user alice
find / -group devs
# Par taille
find / -size +100M # > 100 Mo
find / -size -1k # < 1 Ko
# Par date modif
find / -mtime -7 # modifié < 7 jours
# Par permissions
find / -perm /4000 # SUID
find / -perm -222 # world writable
# Actions
find /tmp -name "*.tmp" -delete
find / -user alice -exec cp {} /backup/ \;
# Créer archive
tar cf archive.tar /dir
tar czf archive.tar.gz /dir # gzip
tar cjf archive.tar.bz2 /dir # bzip2
tar cJf archive.tar.xz /dir # xz
# Lister contenu
tar tf archive.tar.gz
# Extraire
tar xf archive.tar.gz
tar xf archive.tar.gz -C /dest/ # vers destination
# Astuce: préserver les perms
tar czpf backup.tar.gz /etc/
# stdout → fichier
ls > output.txt # écrase
ls >> output.txt # ajoute
# stderr → fichier
cmd 2> errors.txt
cmd 2>/dev/null # ignorer erreurs
# stdout + stderr
cmd &> all.txt
cmd > out.txt 2>&1
# Pipes
cat /etc/passwd | grep bash | wc -l
journalctl | tail -50
# tee (écran + fichier)
cmd | tee output.txt
Tu as accès à la doc Red Hat pendant l'examen. man est ton meilleur ami.
# man pages
man passwd # commande
man 5 passwd # format fichier
man -k "keyword" # chercher
apropos selinux # = man -k
# Sections man
# 1=commandes 5=fichiers config
# 8=admin sys
# info
info coreutils
# Doc installée
ls /usr/share/doc/
# Modes: Normal → i=Insert → Esc=Normal → :=Command
# Navigation
gg # début fichier
G # fin fichier
/pattern # chercher (n=suivant, N=précédent)
# Édition
dd # supprimer ligne
yy # copier ligne
p # coller
u # undo
Ctrl+r # redo
# Sauver / quitter
:w # sauver
:q # quitter
:wq # sauver et quitter
:q! # quitter sans sauver
# Remplacement
:%s/old/new/g # remplacer tout
Créer, modifier, supprimer users. Gérer mots de passe et groupes.
# Créer un user
useradd alice
useradd -u 1050 -g devs -G wheel -s /bin/bash -d /home/alice alice
# Mot de passe
passwd alice
echo "P@ss123" | passwd --stdin alice
# Modifier
usermod -aG wheel alice # ajouter au groupe (ATTENTION -a !)
usermod -L alice # verrouiller compte
usermod -U alice # déverrouiller
usermod -s /sbin/nologin alice # no login shell
# Supprimer
userdel alice
userdel -r alice # + home + mail
# Créer groupe
groupadd devs
groupadd -g 2000 ops
# Modifier
groupmod -n newname oldname
# Supprimer
groupdel devs
# Voir les groupes d'un user
id alice
groups alice
# Fichiers clés
cat /etc/passwd # users
cat /etc/group # groupes
cat /etc/shadow # hash mdp (root only)
# Voir la politique
chage -l alice
# Configurer
chage -M 90 alice # max 90 jours
chage -m 7 alice # min 7 jours entre changements
chage -W 14 alice # warning 14 jours avant
chage -I 5 alice # inactive après 5 jours expiré
chage -E 2026-12-31 alice # date expiration
# Forcer changement au prochain login
chage -d 0 alice
Délégation de privilèges. Toujours visudo, jamais vim directement.
# Éditer (validation syntaxe)
visudo
# Ou fichier drop-in (recommandé)
visudo -f /etc/sudoers.d/alice
# Syntaxe: user HOST=(RUNAS) CMD
alice ALL=(ALL) ALL # tout
alice ALL=(ALL) NOPASSWD: ALL # sans mdp
alice ALL=(ALL) /usr/bin/systemctl restart httpd
# Groupe
%devs ALL=(ALL) /usr/bin/dnf # groupe devs
# Vérifier
sudo -l # lister ses droits
sudo -l -U alice # droits d'alice
Permissions Unix classiques + bits spéciaux.
# chmod symbolique
chmod u+x file # user +execute
chmod g=rw file # group = read+write
chmod o-rwx file # others = rien
chmod a+r file # all +read
# chmod numérique
chmod 755 file # rwxr-xr-x
chmod 640 file # rw-r-----
chmod -R 750 /dir # récursif
# chown
chown alice file
chown alice:devs file
chown -R alice:devs /dir
# chgrp
chgrp devs file
# Voir umask courant
umask # ex: 0022
# Logique: perms par défaut
# fichiers: 666 - umask = 644 (rw-r--r--)
# dossiers: 777 - umask = 755 (rwxr-xr-x)
# Changer (session)
umask 027 # fichiers=640, dirs=750
# Persistant: ajouter dans
# ~/.bashrc ou /etc/profile.d/custom.sh
# SUID (4): exécute avec les droits du propriétaire
chmod u+s /usr/bin/prog
chmod 4755 /usr/bin/prog
# ex: /usr/bin/passwd a SUID root
# SGID (2): sur dossier = nouveaux fichiers héritent du groupe
chmod g+s /shared
chmod 2770 /shared
# Sticky bit (1): seul le propriétaire peut supprimer
chmod o+t /shared
chmod 1777 /tmp
# Trouver SUID/SGID
find / -perm /4000 -type f 2>/dev/null # SUID
find / -perm /2000 -type d 2>/dev/null # SGID dirs
Le mask est le plafond. Default ACL = héritage à la création.
getfacl file
setfacl -m u:alice:rw file
setfacl -m g:devs:rx file
setfacl -m m::rwx file # mask
# default ACL (héritage dans un dossier)
setfacl -m d:u:alice:rwX /shared
setfacl -m d:g:devs:rx /shared
# Supprimer une entrée
setfacl -x u:alice file
# Tout supprimer
setfacl -b file
# Backup / restore
getfacl -R /shared > acls.backup
setfacl --restore=acls.backup
Zones + runtime vs permanent. Piège classique: ouvrir la bonne règle… dans la mauvaise zone.
systemctl enable --now firewalld
firewall-cmd --state
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all
firewall-cmd --get-zones
# runtime
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-port=8080/tcp
# permanent
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --reload
# Raccourci: runtime + permanent en 2 commandes
firewall-cmd --zone=public --add-service=https
firewall-cmd --runtime-to-permanent
firewall-cmd --get-active-zones
# Changer zone par défaut
firewall-cmd --set-default-zone=internal
# Assigner interface
firewall-cmd --zone=public --permanent --add-interface=ens192
firewall-cmd --reload
# Rich rules (pour des règles plus fines)
firewall-cmd --zone=public --permanent \
--add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=ssh accept'
firewall-cmd --reload
# Debug
ss -lntup
curl -I http://SERVER:80
firewall-cmd --zone=public --list-all
Le profil (connection) est persistant. ip montre l'état courant.
nmcli general status
nmcli device status
nmcli device show ens192
nmcli connection show
nmcli connection show "Wired connection 1"
# Hostname (souvent demandé)
hostnamectl set-hostname server.lab.local
hostnamectl
CON="Wired connection 1"
nmcli connection modify "$CON" \
ipv4.method manual \
ipv4.addresses 192.168.50.10/24 \
ipv4.gateway 192.168.50.1 \
ipv4.dns "1.1.1.1 9.9.9.9" \
ipv4.dns-search "lab.local" \
connection.autoconnect yes
nmcli connection down "$CON"
nmcli connection up "$CON"
ip a
ip r
CON="Wired connection 1"
nmcli connection modify "$CON" +ipv4.routes "10.10.0.0/16 192.168.50.254"
nmcli connection up "$CON"
# Vérification
ip route
getent hosts google.com
cat /etc/resolv.conf
journalctl -xeu NetworkManager
Pense "AVC → (fcontext | port | boolean) → restorecon/semanage → test".
getenforce
sestatus
# Mode temporaire
setenforce 0 # permissive (debug)
setenforce 1 # enforcing
# Mode permanent
vi /etc/selinux/config
# SELINUX=enforcing
# Triage AVC
ausearch -m AVC -ts recent
ls -lZ /path/to/file
ps -eZ | grep httpd
# Ajouter contexte persistant
semanage fcontext -a -t httpd_sys_content_t "/srv/site(/.*)?"
restorecon -Rv /srv/site
# Vérifier
ls -lZ /srv/site
# Lister les contextes existants
semanage fcontext -l | grep httpd
# httpd sur 8080
semanage port -a -t http_port_t -p tcp 8080
# si déjà pris: semanage port -m -t http_port_t -p tcp 8080
# Lister ports
semanage port -l | grep http
# Booleans
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on # -P = permanent !
# semanage boolean -l | grep httpd (descriptions)
Le pipeline RHCSA le plus rentable. Teste toujours mount -a.
lsblk -f
blkid
df -hT
pvs
vgs
lvs
pvcreate /dev/sdb
vgcreate vgdata /dev/sdb
lvcreate -n lvapp -L 5G vgdata
mkfs.xfs /dev/vgdata/lvapp
mkdir -p /mnt/app
mount /dev/vgdata/lvapp /mnt/app
blkid /dev/vgdata/lvapp
# fstab: UUID=... /mnt/app xfs defaults 0 0
vi /etc/fstab
mount -a
findmnt /mnt/app
# Ajouter un PV au VG
pvcreate /dev/sdc
vgextend vgdata /dev/sdc
# Étendre LV + resize FS en une commande (-r)
lvextend -r -L +2G /dev/vgdata/lvapp
# ou taille exacte:
lvextend -r -L 10G /dev/vgdata/lvapp
df -hT /mnt/app
lvcreate -n lvswap -L 2G vgdata
mkswap /dev/vgdata/lvswap
swapon /dev/vgdata/lvswap
# fstab
# UUID=... swap swap defaults 0 0
vi /etc/fstab
swapon -s
free -h
Partitions classiques, mkfs, fstab. UUID obligatoire dans fstab !
# MBR (< 2 To)
fdisk /dev/sdb
# n → p → +2G → w
# GPT (> 2 To ou moderne)
gdisk /dev/sdb
# ou
parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary xfs 1MiB 5GiB
(parted) quit
# Actualiser la table
partprobe /dev/sdb
# Créer filesystem
mkfs.xfs /dev/sdb1
mkfs.ext4 /dev/sdb2
# Mount temporaire
mkdir -p /mnt/data
mount /dev/sdb1 /mnt/data
# Récupérer UUID
blkid /dev/sdb1
# fstab (PERSISTANT !)
vi /etc/fstab
# UUID=xxxx-xxxx /mnt/data xfs defaults 0 0
# TOUJOURS TESTER
mount -a
findmnt /mnt/data
mkswap /dev/sdb3
swapon /dev/sdb3
# fstab
# UUID=... swap swap defaults 0 0
swapon -s
free -h
systemctl + journalctl. N'oublie pas enable pour la persistance !
# Start / stop / restart
systemctl start httpd
systemctl stop httpd
systemctl restart httpd
systemctl reload httpd # recharge config sans couper
# Activer au boot
systemctl enable httpd
systemctl enable --now httpd # enable + start
# Désactiver
systemctl disable httpd
# État
systemctl status httpd
systemctl is-active httpd
systemctl is-enabled httpd
# Lister
systemctl list-units --type=service
systemctl list-units --type=service --state=failed
# Masquer (empêche tout démarrage)
systemctl mask httpd
systemctl unmask httpd
# Voir target actuel
systemctl get-default
# Changer (persistant)
systemctl set-default multi-user.target
systemctl set-default graphical.target
# Changer en live
systemctl isolate multi-user.target
systemctl isolate rescue.target
systemctl isolate emergency.target
# Logs d'un service
journalctl -u httpd
journalctl -xeu httpd # explications + erreurs
# Filtres temporels
journalctl --since "1 hour ago"
journalctl --since "2025-01-01" --until "2025-01-02"
# Live
journalctl -f
journalctl -fu httpd
# Par priorité
journalctl -p err # erreurs et au dessus
# Boot
journalctl -b # boot actuel
journalctl -b -1 # boot précédent
# Rendre persistant (défaut RHEL 10)
mkdir -p /var/log/journal
systemctl restart systemd-journald
Planification de tâches. cron = récurrent, at = one-shot, timers = moderne.
# Éditer crontab user
crontab -e
crontab -l # lister
crontab -e -u alice # pour un autre user
# Format: min hour dom month dow command
# ┌──── minute (0-59)
# │ ┌── hour (0-23)
# │ │ ┌ day of month (1-31)
# │ │ │ ┌ month (1-12)
# │ │ │ │ ┌ day of week (0-7, 0 et 7 = dimanche)
# │ │ │ │ │
* * * * * command
# Exemples
30 2 * * * /root/backup.sh # 2h30 chaque jour
0 */4 * * * /root/check.sh # toutes les 4h
0 9 * * 1-5 /root/workday.sh # 9h lun-ven
*/5 * * * * /root/monitor.sh # toutes les 5 min
# Fichiers systèmes
ls /etc/cron.d/
ls /etc/cron.daily/
# Installer si absent
dnf install at
systemctl enable --now atd
# Planifier
at 14:30
> /root/script.sh
> Ctrl+D
at now + 5 minutes
at midnight
at noon tomorrow
# Lister / supprimer
atq
atrm 3
# Lister les timers
systemctl list-timers --all
# Créer un timer: 2 fichiers dans /etc/systemd/system/
# 1) Le service: /etc/systemd/system/backup.service
# [Unit]
# Description=Daily backup
# [Service]
# Type=oneshot
# ExecStart=/root/backup.sh
# 2) Le timer: /etc/systemd/system/backup.timer
# [Unit]
# Description=Run backup daily
# [Timer]
# OnCalendar=daily
# Persistent=true
# [Install]
# WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now backup.timer
systemctl list-timers
Savoir réparer un système qui ne boot pas = points quasi gratuits.
# 1) Reboot, interrompre GRUB (touche e)
# 2) Trouver la ligne linux et ajouter à la fin:
rd.break
# 3) Ctrl+x pour booter
# 4) Une fois dans le shell initramfs:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
# Taper le nouveau mot de passe
# 5) SELinux: relabeler au prochain boot
touch /.autorelabel
# 6) Quitter
exit
exit
# Le système reboote et relabel (patience !)
# Modifier GRUB temporairement
# Au boot: touche 'e', modifier la ligne linux
# Ajouter: systemd.unit=rescue.target
# ou: systemd.unit=emergency.target
# Ctrl+x
# Modifier GRUB permanent
vi /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# Logs du boot
journalctl -b # boot actuel
journalctl -b -1 # boot précédent
systemd-analyze # temps de boot
systemd-analyze blame # services les plus lents
# Services en échec
systemctl --failed
# Réparer fstab cassé (en rescue)
mount -o remount,rw /
vi /etc/fstab
mount -a
Trio logiciel RHEL 10. Flatpak est nouveau aux objectifs EX200.
# Chercher / installer / supprimer
dnf search httpd
dnf install httpd -y
dnf remove httpd -y
# Infos
dnf info httpd
dnf list installed
dnf list available
# Mise à jour
dnf update -y
dnf check-update
# Groupes
dnf group list
dnf group install "Development Tools" -y
# Historique
dnf history
dnf history undo 5
# Quel paquet fournit un fichier ?
dnf provides /etc/httpd/conf/httpd.conf
# Lister les repos
dnf repolist all
# Ajouter un repo
dnf config-manager --add-repo https://example.com/repo
# Ou manuellement
vi /etc/yum.repos.d/myrepo.repo
# [myrepo]
# name=My Custom Repo
# baseurl=http://repo.lab.local/rhel10/
# enabled=1
# gpgcheck=0
# Activer/désactiver
dnf config-manager --set-enabled myrepo
dnf config-manager --set-disabled myrepo
# Nettoyer cache
dnf clean all
dnf makecache
# Infos sur un paquet installé
rpm -qi httpd # info
rpm -ql httpd # lister fichiers
rpm -qf /usr/sbin/httpd # quel paquet possède ce fichier
rpm -qc httpd # fichiers config
rpm -qd httpd # fichiers doc
# Vérifier intégrité
rpm -V httpd
# Installer un RPM local
rpm -ivh package.rpm
dnf localinstall package.rpm # mieux (résout dépendances)
# Installer flatpak si absent
dnf install flatpak -y
# Ajouter un remote (dépôt Flatpak)
flatpak remote-add --if-not-exists flathub \
https://flathub.org/repo/flathub.flatpakrepo
# Lister les remotes
flatpak remotes
# Chercher une app
flatpak search gimp
# Installer
flatpak install flathub org.gimp.GIMP -y
# Lister installés
flatpak list
# Lancer
flatpak run org.gimp.GIMP
# Mettre à jour
flatpak update
# Supprimer
flatpak uninstall org.gimp.GIMP
# Info sur une app
flatpak info org.gimp.GIMP
# Lister les modules
dnf module list
# Activer un stream spécifique
dnf module enable php:8.3
dnf module install php:8.3
# Reset
dnf module reset php
Écrire des scripts simples: conditions, boucles, arguments, exit codes.
#!/bin/bash
# Shebang obligatoire !
# Variables
NAME="RHCSA"
echo "Préparation $NAME"
# Arguments
echo "Script: $0"
echo "Arg1: $1 Arg2: $2"
echo "Nb args: $#"
echo "Tous: $@"
# Exit code du dernier cmd
echo $?
# Lire input
read -p "Ton nom: " USERNAME
echo "Hello $USERNAME"
#!/bin/bash
# if/elif/else
if [ -f /etc/passwd ]; then
echo "Fichier existe"
elif [ -d /etc ]; then
echo "Dossier existe"
else
echo "Rien trouvé"
fi
# Tests fichiers
# -f fichier existe -d dossier existe
# -r lisible -w writable
# -x executable -s non vide
# Tests strings
# -z "$VAR" vide -n "$VAR" non vide
# "$A" = "$B" "$A" != "$B"
# Tests numériques
# $A -eq $B égal $A -ne $B différent
# $A -gt $B > $A -lt $B <
# $A -ge $B >= $A -le $B <=
# Exemple pratique
if [ $# -lt 1 ]; then
echo "Usage: $0 "
exit 1
fi
#!/bin/bash
# for
for USER in alice bob charlie; do
useradd "$USER" 2>/dev/null
echo "Créé: $USER"
done
# for avec séquence
for i in {1..10}; do
echo "Iteration $i"
done
# for sur fichiers
for FILE in /etc/*.conf; do
echo "$FILE"
done
# while
COUNT=0
while [ $COUNT -lt 5 ]; do
echo "Count: $COUNT"
COUNT=$((COUNT + 1))
done
# Lire un fichier ligne par ligne
while IFS= read -r LINE; do
echo "$LINE"
done < /etc/hosts
#!/bin/bash
# Créer des users à partir d'un fichier
# Usage: ./create_users.sh userlist.txt
if [ $# -ne 1 ]; then
echo "Usage: $0 "
exit 1
fi
if [ ! -f "$1" ]; then
echo "Fichier $1 introuvable"
exit 2
fi
while IFS= read -r USER; do
if id "$USER" &>/dev/null; then
echo "SKIP: $USER existe déjà"
else
useradd "$USER"
echo "redhat123" | passwd --stdin "$USER"
echo "OK: $USER créé"
fi
done < "$1"
exit 0
Authentification par clé, config sshd. Sécurise tes accès.
# Générer une paire de clés
ssh-keygen -t rsa -b 4096
# ou ed25519 (plus moderne)
ssh-keygen -t ed25519
# Copier la clé publique
ssh-copy-id alice@server2
# Connexion sans mdp
ssh alice@server2
# Copie de fichiers
scp file.txt alice@server2:/tmp/
scp -r /dir alice@server2:/tmp/
# Fichier config
vi /etc/ssh/sshd_config
# Options fréquentes
PermitRootLogin no # bloquer root SSH
PasswordAuthentication no # clés only
Port 2222 # changer port
AllowUsers alice bob # whitelist
# Appliquer
systemctl restart sshd
# ⚠️ Si port changé → SELinux + firewall
semanage port -a -t ssh_port_t -p tcp 2222
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
Synchronisation temps. chronyd remplace ntpd depuis RHEL 8.
# Service
systemctl enable --now chronyd
# Config
vi /etc/chrony.conf
# server ntp.lab.local iburst
# ou
# pool pool.ntp.org iburst
systemctl restart chronyd
# Vérifier
chronyc sources -v
chronyc tracking
# Timezone
timedatectl
timedatectl list-timezones | grep Paris
timedatectl set-timezone Europe/Paris
# Date/heure manuelles (si pas NTP)
timedatectl set-ntp false
timedatectl set-time "2025-06-15 14:30:00"
Profils de performance système. Simple mais souvent oublié.
# Service
systemctl enable --now tuned
# Profil actif
tuned-adm active
# Lister les profils
tuned-adm list
# Profils courants:
# throughput-performance → serveur
# virtual-guest → VM
# balanced → par défaut
# desktop → poste de travail
# latency-performance → faible latence
# Changer de profil
tuned-adm profile throughput-performance
# Recommandation auto
tuned-adm recommend
# Vérifier
tuned-adm active
tuned-adm verify
Monter des partages réseau. Autofs = montage à la demande.
# Installer client NFS
dnf install nfs-utils -y
# Voir les exports du serveur
showmount -e nfs-server.lab.local
# Mount temporaire
mkdir -p /mnt/nfsdata
mount -t nfs nfs-server:/share /mnt/nfsdata
# Mount persistant (fstab)
vi /etc/fstab
# nfs-server:/share /mnt/nfsdata nfs defaults 0 0
mount -a
# Installer
dnf install autofs -y
systemctl enable --now autofs
# Config master: /etc/auto.master.d/
vi /etc/auto.master.d/nfs.autofs
# /mnt/auto /etc/auto.nfs
# Config map: /etc/auto.nfs
vi /etc/auto.nfs
# data -rw,sync nfs-server:/share
# home -rw,sync nfs-server:/home
# Direct mount (point fixe)
vi /etc/auto.master.d/direct.autofs
# /- /etc/auto.direct
vi /etc/auto.direct
# /mnt/public -rw,sync nfs-server:/public
systemctl restart autofs
# Test: accéder au dossier (monte automatiquement)
ls /mnt/auto/data
# le dossier se monte quand tu y accèdes !
# Wildcard (home dirs)
# * -rw,sync nfs-server:/home/&
ps, top, kill, nice. Gérer les processus et signaux.
# Lister
ps aux # tous les processus
ps -ef # format complet
ps -eZ # avec contextes SELinux
# Filtrer
ps aux | grep httpd
pgrep -u alice # PIDs par user
pgrep -la httpd # PIDs + cmdline
# Arbre
pstree -p
# Temps réel
top
# dans top: M=tri RAM, P=tri CPU, k=kill, q=quit
# Envoyer un signal
kill PID # SIGTERM (15) - arrêt propre
kill -9 PID # SIGKILL - arrêt forcé
kill -HUP PID # reload config
# Par nom
killall httpd
pkill -u alice # tous les process d'alice
# Jobs (background/foreground)
command & # lancer en background
jobs # lister
fg %1 # ramener en foreground
bg %1 # reprendre en background
Ctrl+Z # suspendre
# Nice: -20 (haute priorité) → 19 (basse priorité)
# Défaut: 0
# Lancer avec priorité basse
nice -n 15 /root/heavy-script.sh
# Modifier un process en cours
renice -n 10 -p PID
renice -n -5 -u alice # tous les process d'alice
# Vérifier
ps -eo pid,ni,comm | head