# commands.md — Contexte commandes CLI sécurisées > **Type :** Contexte — propriétaire : `vps`, `debug`, `ci-cd` > Rédigé : 2026-03-14 > Résout : "commandes destructives exécutées sans dry-run, flags dangereux non identifiés, prod impacté" --- ## Problème résolu Certaines commandes CLI sont irréversibles ou ont un impact prod immédiat. Sans protocole, un agent propose `rm -rf`, `docker system prune`, ou `git push --force` sans avertissement. Ce contexte donne les règles de comportement et les patterns de sécurité pour toute suggestion de commande. --- ## Règles fondamentales ### 1. Dry-run avant exécution Toute commande destructive doit avoir un équivalent dry-run proposé en premier : | Commande réelle | Dry-run | |----------------|---------| | `rsync src/ dest/` | `rsync -n src/ dest/` | | `find . -name "*.log" -delete` | `find . -name "*.log"` (sans -delete) | | `sed -i 's/old/new/' file` | `sed 's/old/new/' file` (sans -i) | | `docker system prune` | `docker system df` d'abord | | `git clean -fd` | `git clean -n` | | `certbot renew` | `certbot renew --dry-run` | ### 2. Flags dangereux — annotation obligatoire Toute commande avec un flag destructif ou irréversible est annotée `⚠️ DESTRUCTIF` ou `⚠️ IRRÉVERSIBLE` : ```bash rm -rf /path/ # ⚠️ DESTRUCTIF — irréversible, pas de corbeille git push --force # ⚠️ IRRÉVERSIBLE — écrase l'historique distant git reset --hard # ⚠️ DESTRUCTIF — perd les modifications non commitées docker system prune -a # ⚠️ DESTRUCTIF — supprime toutes les images inutilisées DROP TABLE users; # ⚠️ IRRÉVERSIBLE — données perdues ``` ### 3. Confirmation avant commande prod Avant toute commande sur un système de production : ``` ⚠️ Commande prod — confirme avant d'exécuter : Commande : Impact : Réversible : oui / non ``` --- ## Patterns sécurisés par domaine ### Git ```bash # Toujours préférer git push origin # branche explicite git revert # réversible — crée un commit inverse # Avec confirmation obligatoire git push --force-with-lease # moins destructif que --force (vérifie upstream) git reset --soft HEAD~1 # récupérable (staging intact) # Jamais sans confirmation git push --force # ⚠️ IRRÉVERSIBLE git reset --hard # ⚠️ DESTRUCTIF git clean -fd # ⚠️ DESTRUCTIF ``` ### Docker ```bash # Toujours lire avant d'agir docker ps -a # containers existants docker images # images présentes docker system df # espace utilisé # Dry-run equivalent docker system prune --dry-run # (si dispo) ou df d'abord # Avec confirmation docker stop # arrêt — reversible docker rm # ⚠️ supprime le container (données volumes ok) docker rmi # supprime l'image docker system prune -a # ⚠️ DESTRUCTIF — toutes images non utilisées ``` ### MySQL ```bash # Backup AVANT toute modification mysqldump -u root -p > backup-$(date +%Y%m%d-%H%M).sql # Transactions pour DDL risqués START TRANSACTION; ALTER TABLE ...; -- vérifier avant COMMIT ROLLBACK; -- ou COMMIT si ok # Jamais sans backup DROP TABLE ... # ⚠️ IRRÉVERSIBLE TRUNCATE TABLE .. # ⚠️ IRRÉVERSIBLE DELETE FROM ... # ⚠️ sans WHERE = table vidée ``` ### Fichiers système ```bash # Préférer cp avant modification cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak # Tester avant reload nginx -t # validation config apache2ctl configtest # Jamais sans backup rm -rf /var/www// # ⚠️ DESTRUCTIF ``` --- ## Ordre de validation pour les commandes VPS ``` 1. Lire l'état actuel (status, logs, df) 2. Proposer la commande + dry-run si disponible 3. Annoter les flags dangereux 4. Attendre confirmation si commande prod/destructive 5. Exécuter 6. Vérifier l'état après (status, logs) ``` --- ## Trigger de chargement ``` Propriétaire : vps, debug, ci-cd Trigger : session deploy, debug infra, ou toute commande shell sur VPS Section : Sources au démarrage (vps, ci-cd) — Sources conditionnelles (debug si infra détectée) ``` --- ## Maintenance ``` Propriétaire : vps (mise à jour si nouveau pattern CLI validé) Mise à jour : en fin de session si un nouveau flag dangereux ou pattern sécurisé identifié Jamais modifié par : agents non-infra ``` --- ## Cycle de vie | État | Condition | Action | |------|-----------|--------| | **Actif** | Sessions VPS/deploy fréquentes | Enrichi après chaque pattern validé | | **Stable** | Stack stable | Consulté, rarement modifié | | **Archivé** | N/A | Non applicable | --- ## Changelog | Date | Changement | |------|------------| | 2026-03-14 | Création — règles dry-run, flags dangereux annotés, patterns git/docker/mysql/fichiers |