Chapitre 16.2 — Cheatsheets
⏱️ TL;DR — Les aide-mémoire du cours, condensés par domaine : navigation Linux, permissions, processus, systemd, SSH,
apt, UFW, Nginx (avec squelettes de server block), Certbot, Docker, git de déploiement et diagnostic réseau. Pas d’explications ici — elles sont dans les parties correspondantes. Juste les commandes qui comptent, prêtes à copier. Garde cette page ouverte pendant que tu bosses.
🎯 Objectifs
- Retrouver instantanément la bonne commande sans rouvrir tout un chapitre.
- Copier un squelette de config (server block, unit) sans repartir de zéro.
- Avoir sous les yeux les options utiles (pas toutes : les bonnes).
💡 Réflexe — Une cheatsheet ne remplace pas le
man. Quand une option te manque ou qu’un comportement surprend,man <commande>(ou<commande> --help) fait autorité. Ici, on te donne le 90 % du quotidien ; lemancouvre le reste.
Navigation & fichiers
| Commande | Ce qu’elle fait |
|---|---|
pwd | Affiche le dossier courant. |
ls -lah | Liste détaillée, cachés inclus, tailles lisibles. |
cd - | Revient au dossier précédent. |
tree -L 2 | Arborescence sur 2 niveaux (si installé). |
cp -a src dst | Copie en préservant droits/liens/dates. |
mv a b | Déplace ou renomme. |
rm -rf dossier | Supprime récursivement, sans confirmation (danger). |
mkdir -p a/b/c | Crée toute l’arborescence. |
ln -s cible lien | Crée un lien symbolique. |
find /var -name "*.log" -mtime +7 | Fichiers .log modifiés il y a plus de 7 jours. |
du -sh * | Taille de chaque élément du dossier. |
df -h | Espace disque par montage. df -i pour les inodes. |
stat fichier | Métadonnées (droits, dates, inode). |
# Lire / chercher dans les fichiers
cat f # tout afficher | less f # pager (q pour quitter)
head -n 20 f # 20 premieres lignes | tail -f f # suit un fichier qui grossit (logs)
grep -rn "TODO" . # cherche recursivement, avec numeros de ligne
grep -i "error" app.log # insensible a la casse⚠️ Piège —
rm -rfne pardonne pas et ne met rien à la corbeille. Vérifie trois fois le chemin, méfie-toi des variables (rm -rf "$DIR/"avec$DIRvide efface/). Sur une commande destructive, une seconde de relecture vaut des heures de restauration.
Utilisateurs & permissions
| Commande | Ce qu’elle fait |
|---|---|
whoami / id | Qui suis-je / mes UID, GID, groupes. |
sudo -u deploy <cmd> | Exécute en tant que deploy. |
adduser deploy | Crée un utilisateur (interactif). |
usermod -aG sudo deploy | Ajoute deploy au groupe sudo. |
chown user:group f | Change propriétaire et groupe. |
chown -R deploy:deploy dir | Récursif sur un dossier. |
chmod 640 f | Applique des droits en octal. |
chmod +x script.sh | Rend exécutable. |
umask | Masque des droits par défaut. |
Le modèle octal : chaque chiffre = r(4) + w(2) + x(1), pour utilisateur / groupe / others.
| Octal | Signification | Usage typique |
|---|---|---|
600 | rw------- | Secret (.env, clé privée) : proprio seul. |
644 | rw-r--r-- | Fichier lisible par tous, écrit par le proprio. |
640 | rw-r----- | Fichier lisible par le groupe seulement. |
700 | rwx------ | Dossier privé (~/.ssh). |
755 | rwxr-xr-x | Dossier/exécutable public. |
775 | rwxrwxr-x | Dossier partagé écrivable par le groupe. |
🔒 Sécurité — Jamais
chmod 777. Un secret est en600, un dossier~/.sshen700et sonauthorized_keysen600— sinonsshdrefuse de s’en servir.
Processus & signaux
| Commande | Ce qu’elle fait |
|---|---|
htop | Moniteur interactif (CPU/RAM/process). q pour quitter. |
ps aux | Tous les processus (instantané). |
ps aux | grep node | Filtrer par nom. |
pgrep -a node | PID + ligne de commande des node. |
top | Moniteur natif si htop absent. |
kill <pid> | Envoie SIGTERM (arrêt propre). |
kill -9 <pid> | Envoie SIGKILL (force brute, dernier recours). |
kill -HUP <pid> | SIGHUP : souvent « recharge ta config ». |
pkill -f "next start" | Tue par motif de ligne de commande. |
uptime | Load average (1/5/15 min). |
free -h | RAM et swap. |
nice / renice | Ajuste la priorité CPU. |
Signaux utiles : SIGTERM (15, arrêt propre — le défaut, à privilégier), SIGKILL (9, tue net, aucun nettoyage), SIGHUP (1, rechargement), SIGINT (2, comme Ctrl+C).
systemd & journaux
# Gérer un service
sudo systemctl start formacampus-web # demarre maintenant
sudo systemctl stop formacampus-web # arrete
sudo systemctl restart formacampus-web # stop puis start
sudo systemctl reload formacampus-web # recharge sans couper (si supporte)
sudo systemctl enable formacampus-web # demarrera au boot
sudo systemctl disable formacampus-web # ne demarrera PLUS au boot
sudo systemctl enable --now formacampus-web # enable + start d'un coup
# Vérifier
systemctl status formacampus-web # etat + extrait de log
systemctl is-enabled formacampus-web # "enabled" = survit au reboot
systemctl is-active formacampus-web # "active" = tourne la
systemctl list-timers # timers (ex: renouvellement certbot)
# APRÈS avoir édité un fichier .service :
sudo systemctl daemon-reload # OBLIGATOIRE, sinon ancienne config# journalctl : les logs d'un service
journalctl -u formacampus-web # tout
journalctl -u formacampus-web -f # suivre en direct (comme tail -f)
journalctl -u formacampus-web -n 50 --no-pager # 50 dernieres lignes
journalctl -u formacampus-web --since "1 hour ago"
journalctl -u formacampus-web -p err # niveau erreur et pire
journalctl -k # logs du NOYAU (kernel) : voir OOM, materiel
journalctl --vacuum-time=7d # purge les journaux de plus de 7 jours⚠️ Piège — Oublier
daemon-reloadaprès avoir modifié un.service: systemd continue avec l’ancienne version. Le réflexe :daemon-reloadpuisrestart.
SSH, transferts & tunnels
# Connexion
ssh deploy@203.0.113.10 # connexion simple
ssh -p 2222 deploy@203.0.113.10 # port non standard
ssh -v deploy@203.0.113.10 # verbeux : diagnostiquer un refus
# Clés
ssh-keygen -t ed25519 -C "poste-alex" # genere une paire (recommande)
ssh-copy-id deploy@203.0.113.10 # copie ta cle publique sur le serveur
# Transferts de fichiers
scp fichier.txt deploy@203.0.113.10:/tmp/ # envoyer un fichier
scp deploy@203.0.113.10:/var/log/app.log ./ # recuperer un fichier
rsync -avz --delete ./dist/ deploy@203.0.113.10:/var/www/formacampus/ # sync (deploiement)
# Tunnels
ssh -L 5432:127.0.0.1:5432 deploy@203.0.113.10 # port distant 5432 accessible en local (ex: psql)Un ~/.ssh/config bien réglé transforme la commande en un mot :
Host formacampus
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519Ensuite : ssh formacampus, scp f formacampus:/tmp/, rsync ... formacampus:....
💡 Réflexe —
rsync -avz= archive (préserve tout) + verbeux + zcompressé. Ajoute--deletepour un miroir exact (supprime côté distant ce qui n’existe plus localement) — puissant, donc à manier avec soin. Teste d’abord avec--dry-run.
APT (paquets)
sudo apt update # rafraichit l'index (TOUJOURS avant d'installer)
sudo apt upgrade # met a jour les paquets installes
sudo apt full-upgrade # + gere les changements de dependances
sudo apt install nginx certbot # installe
sudo apt remove <paquet> # desinstalle (garde la config)
sudo apt purge <paquet> # desinstalle + config
sudo apt autoremove # enleve les dependances devenues inutiles
apt list --installed # ce qui est installe
apt policy <paquet> # versions disponibles / sourceUFW (pare-feu)
sudo ufw status verbose # etat + regles (numerotees avec "status numbered")
sudo ufw default deny incoming # tout ferme en entree par defaut (base saine)
sudo ufw default allow outgoing # sorties autorisees
sudo ufw allow OpenSSH # ouvre SSH (profil applicatif)
sudo ufw allow 80,443/tcp # HTTP + HTTPS
sudo ufw allow from 203.0.113.5 to any port 22 # SSH depuis UNE IP seulement
sudo ufw delete allow 8080/tcp # retire une regle
sudo ufw enable # active le pare-feu
sudo ufw reload # recharge apres modif⚠️ Piège —
ufw enableavant d’avoir autorisé SSH = tu te coupes l’accès. Toujoursallow OpenSSH(ou ton port) d’abord,enableensuite.
Nginx
sudo nginx -t # TESTE la config (fais-le AVANT tout reload)
sudo systemctl reload nginx # applique sans couper les connexions
sudo systemctl restart nginx # redemarre (coupe brievement)
sudo nginx -T # affiche la config complete effective
sudo tail -f /var/log/nginx/error.log # erreurs en direct
sudo tail -f /var/log/nginx/access.log # trafic en directActiver un site (structure Debian/Ubuntu) :
sudo ln -s /etc/nginx/sites-available/formacampus /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginxSquelette — reverse proxy vers une app locale (le cas Next.js / Node) :
server {
listen 80;
server_name formacampus.fr www.formacampus.fr;
return 301 https://$host$request_uri; # force HTTPS
}
server {
listen 443 ssl;
server_name formacampus.fr www.formacampus.fr;
ssl_certificate /etc/letsencrypt/live/formacampus.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/formacampus.fr/privkey.pem;
client_max_body_size 25M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Squelette — site statique (SPA buildée, fichiers dans un dossier) :
server {
listen 443 ssl;
server_name app.formacampus.fr;
root /var/www/formacampus/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html; # fallback SPA (routes cote client)
}
}💡 Réflexe —
nginx -tavant chaquereload. Une accolade ou un;oublié empêche Nginx de recharger ;nginx -tte donne le fichier et la ligne fautifs avant que ça casse la prod.
Certbot (HTTPS Let’s Encrypt)
sudo certbot --nginx # obtient un cert ET configure Nginx tout seul
sudo certbot --nginx -d formacampus.fr -d www.formacampus.fr
sudo certbot certificates # liste les certs geres et leur expiration
sudo certbot renew --dry-run # SIMULE le renouvellement (ne consomme pas les quotas)
sudo certbot renew # renouvelle pour de vrai (auto normalement)
sudo systemctl list-timers | grep certbot # verifie le timer de renouvellement autoDocker & compose
# Images & conteneurs
docker ps # conteneurs qui tournent (-a pour tous)
docker images # images locales
docker logs -f <conteneur> # logs en direct
docker exec -it <conteneur> sh # shell DANS le conteneur
docker stats # conso live (CPU/RAM) par conteneur
docker build -t formacampus-web:1.4.0 . # construit une image taguee
# Ménage (disque plein !)
docker system df # ce que Docker consomme
docker system prune -a # supprime images/conteneurs NON utilises
docker volume prune # volumes orphelins (attention aux donnees)
# docker compose (v2 : "docker compose", sans tiret)
docker compose up -d # demarre en arriere-plan
docker compose down # arrete et supprime les conteneurs
docker compose ps # etat des services
docker compose logs -f web # logs d'un service
docker compose pull && docker compose up -d # met a jour et relanceGit de déploiement
git status # etat du working tree
git pull --ff-only # recupere sans merge surprise
git fetch --all --tags # recupere branches et tags
git checkout v1.4.0 # bascule sur un tag (release precise)
git log --oneline -10 # 10 derniers commits, compact
git reset --hard origin/main # ALIGNE FORCE sur le distant (destructif : jette le local)
git clean -fd # supprime fichiers/dossiers non suivis
git rev-parse --short HEAD # le hash du commit deploye (pour tracer une release)⚠️ Piège —
git reset --hardetgit clean -fddétruisent le travail local non commité, sans corbeille. Sur un serveur de déploiement c’est voulu (on veut l’état exact du dépôt) ; sur ta machine de dev, réfléchis avant.
Diagnostic réseau
# DNS : le nom pointe où ?
dig +short formacampus.fr # l'IP renvoyee (doit etre celle du VPS)
dig formacampus.fr AAAA # enregistrement IPv6
dig formacampus.fr @1.1.1.1 # interroge un resolveur precis
# Ports : qui écoute en local ?
sudo ss -tulpn # tous les ports en ecoute + process (t=tcp u=udp l=listen p=process n=numerique)
sudo ss -tulpn | grep :443 # focus sur un port
# HTTP : que répond le serveur ?
curl -I https://formacampus.fr # juste les en-tetes + code HTTP
curl -v https://formacampus.fr # verbeux : voir TLS, redirections
curl -o /dev/null -s -w "%{http_code} %{time_total}s\n" https://formacampus.fr # code + duree
# Connectivité brute
ping -c 4 formacampus.fr # le hote repond-il ? (ICMP)
nc -zv formacampus.fr 443 # le port 443 accepte-t-il une connexion ?
traceroute formacampus.fr # le chemin reseau saute par saut
# Certificat TLS
echo | openssl s_client -connect formacampus.fr:443 -servername formacampus.fr 2>/dev/null | openssl x509 -noout -dates📚 La doc — Chaque commande a un
man(man ss,man curl,man dig) qui liste toutes les options. Ici on ne montre que celles du quotidien de dépannage. En cas de doute sur un flag, lemantranche — n’improvise pas une option de mémoire.
Tu sais réparer et retrouver la commande. Reste à ne rien oublier avant un go-live : 16.3 — Checklist de mise en prod.