Skip to Content

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 ; le man couvre le reste.

CommandeCe qu’elle fait
pwdAffiche le dossier courant.
ls -lahListe détaillée, cachés inclus, tailles lisibles.
cd -Revient au dossier précédent.
tree -L 2Arborescence sur 2 niveaux (si installé).
cp -a src dstCopie en préservant droits/liens/dates.
mv a bDéplace ou renomme.
rm -rf dossierSupprime récursivement, sans confirmation (danger).
mkdir -p a/b/cCrée toute l’arborescence.
ln -s cible lienCrée un lien symbolique.
find /var -name "*.log" -mtime +7Fichiers .log modifiés il y a plus de 7 jours.
du -sh *Taille de chaque élément du dossier.
df -hEspace disque par montage. df -i pour les inodes.
stat fichierMé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ègerm -rf ne pardonne pas et ne met rien à la corbeille. Vérifie trois fois le chemin, méfie-toi des variables (rm -rf "$DIR/" avec $DIR vide efface /). Sur une commande destructive, une seconde de relecture vaut des heures de restauration.

Utilisateurs & permissions

CommandeCe qu’elle fait
whoami / idQui suis-je / mes UID, GID, groupes.
sudo -u deploy <cmd>Exécute en tant que deploy.
adduser deployCrée un utilisateur (interactif).
usermod -aG sudo deployAjoute deploy au groupe sudo.
chown user:group fChange propriétaire et groupe.
chown -R deploy:deploy dirRécursif sur un dossier.
chmod 640 fApplique des droits en octal.
chmod +x script.shRend exécutable.
umaskMasque des droits par défaut.

Le modèle octal : chaque chiffre = r(4) + w(2) + x(1), pour utilisateur / groupe / others.

OctalSignificationUsage typique
600rw-------Secret (.env, clé privée) : proprio seul.
644rw-r--r--Fichier lisible par tous, écrit par le proprio.
640rw-r-----Fichier lisible par le groupe seulement.
700rwx------Dossier privé (~/.ssh).
755rwxr-xr-xDossier/exécutable public.
775rwxrwxr-xDossier partagé écrivable par le groupe.

🔒 Sécurité — Jamais chmod 777. Un secret est en 600, un dossier ~/.ssh en 700 et son authorized_keys en 600 — sinon sshd refuse de s’en servir.

Processus & signaux

CommandeCe qu’elle fait
htopMoniteur interactif (CPU/RAM/process). q pour quitter.
ps auxTous les processus (instantané).
ps aux | grep nodeFiltrer par nom.
pgrep -a nodePID + ligne de commande des node.
topMoniteur 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.
uptimeLoad average (1/5/15 min).
free -hRAM et swap.
nice / reniceAjuste 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-reload après avoir modifié un .service : systemd continue avec l’ancienne version. Le réflexe : daemon-reload puis restart.

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_ed25519

Ensuite : ssh formacampus, scp f formacampus:/tmp/, rsync ... formacampus:....

💡 Réflexersync -avz = archive (préserve tout) + verbeux + zcompressé. Ajoute --delete pour 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 / source

UFW (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ègeufw enable avant d’avoir autorisé SSH = tu te coupes l’accès. Toujours allow OpenSSH (ou ton port) d’abord, enable ensuite.

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 direct

Activer un site (structure Debian/Ubuntu) :

sudo ln -s /etc/nginx/sites-available/formacampus /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

Squelette — 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éflexenginx -t avant chaque reload. Une accolade ou un ; oublié empêche Nginx de recharger ; nginx -t te 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 auto

Docker & 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 relance

Git 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ègegit reset --hard et git clean -fd dé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, le man tranche — 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.

Last updated on