ls -l chasse fixe, gras : à taper tel quelfichier italique : valeur à remplacersudo en tête : droits d’administration requislscommande-l -hoptions/var/logargument-l -h = -lh ; forme longue : --human-readable.ls -r (ordre inverse) ≠ ls -R (récursif).-- clôt les options : rm -- -fichier.cd "Mes documents" ou cd Mes\ documents.0 = succès, toute autre valeur = échec → echo $?.aliceutilisateur@pcmachine:~/docsdossier courant$invite$ : utilisateur ordinaire · # : administrateur (root).
| man commande | manuel complet ; q quitter, /mot chercher |
| commande --help | aide résumée |
| man -k mot | chercher une commande par mot-clé (= apropos) |
| whatis commande | description en une ligne |
| type commande | alias, commande interne ou programme ? |
| which commande | chemin du programme lancé |
| help commande | commandes internes de Bash (cd, export…) |
Sections du manuel : 1 commandes · 5 formats de fichiers · 8 administration. Ex. man 5 crontab.
| /etc/ssh | absolu : part de la racine / |
| docs/a.txt | relatif : part du dossier courant |
| ~ | dossier personnel (= $HOME) |
| . · .. | dossier courant · dossier parent |
| - | avec cd : dossier précédent |
| .bashrc | fichier caché : nom commençant par un point |
! La casse compte : Photo.jpg ≠ photo.jpg. Séparateur : / (et non \).
sudo sur une machine dont on dépend.| Tab | compléter un nom ; deux fois : propositions |
| ↑ ↓ | parcourir l’historique |
| Ctrl+R | rechercher dans l’historique |
| Ctrl+C | interrompre la commande en cours |
| Ctrl+D | fin de saisie ; sur ligne vide : quitter le shell |
| Ctrl+Z | suspendre (reprendre : fg ou bg) |
| Ctrl+L | effacer l’écran (= clear) |
| Ctrl+A Ctrl+E | début · fin de ligne |
| Ctrl+U Ctrl+K | couper jusqu’au début · jusqu’à la fin |
| Ctrl+W Ctrl+Y | couper le mot précédent · coller |
| Alt+. | dernier argument de la commande précédente |
| Ctrl+Maj+C Ctrl+Maj+V | copier · coller (terminal graphique) |
! Ctrl+S fige l’affichage ; Ctrl+Q le libère.
| Ctrl+O Entrée | enregistrer | |||||||
| Ctrl+X | quitter | |||||||
| Ctrl+W | chercher | |||||||
| Ctrl+K · Ctrl+U | couper la ligne · coller | |||||||
| Alt+U | annuler | |||||||
Dans les menus de nano : ^ = Ctrl · M- = Alt | ||||||||
| i | mode insertion : saisir du texte |
| Échap | retour au mode normal (commandes) |
| :w · :q | enregistrer · quitter |
| :wq | enregistrer et quitter |
| :q! | quitter sans enregistrer |
/motif · n | chercher · occurrence suivante |
u · Ctrl+R | annuler · rétablir |
| dd · yy · p | couper · copier la ligne · coller |
| gg · G | début · fin du fichier |
| :set nu | numéros de ligne |
! Coincé dans vim : Échap puis :q! Entrée.
| AltGr+6~ AltGr+2# AltGr+3{ AltGr+4[ AltGr+5` AltGr+7\ AltGr+8@ AltGr+0] AltGr+)} AltGr+=Touche morte (~, `) : ajouter Espace.
| / | racine unique de tout le système |
| /bin /sbin | commandes essentielles (souvent liens vers /usr/bin, /usr/sbin) |
| /boot | noyau et chargeur de démarrage |
| /dev | périphériques : disques, terminaux… |
| /etc | configuration du système et des services |
| /home | dossiers personnels des utilisateurs |
| /root | dossier personnel de l’administrateur |
| /lib | bibliothèques, modules du noyau |
| /media /mnt | supports amovibles · montages temporaires |
| /opt | logiciels tiers autonomes |
| /proc /sys | fichiers virtuels : processus, noyau, matériel |
| /run | données d’exécution, effacées à l’arrêt |
| /srv | données servies (web, FTP…) |
| /tmp | fichiers temporaires |
| /usr | programmes, bibliothèques, documentation |
| /var | données variables : journaux (/var/log), caches |
« Tout est fichier » : disques, processus et réglages du noyau se lisent comme des fichiers.
| pwd | afficher le dossier courant |
| cd dossier | aller dans un dossier |
| cd | revenir au dossier personnel |
| cd .. | remonter d’un niveau |
| cd - | revenir au dossier précédent |
| ls -l | format long : droits, taille, date |
| ls -a | inclure les fichiers cachés |
| ls -lh | tailles lisibles (K, M, G) |
| ls -lt · ls -ltr | par date : récent en tête · en dernier |
| ls -lS | par taille décroissante |
| ls -R | récursif (sous-dossiers) |
| ls -d */ | les dossiers seulement |
| tree -L 2 | arbre sur 2 niveaux (paquet tree) |
echo $?.-v, --verbose, bash -x.journalctl -u service -e, /var/log/.| touch f | créer un fichier vide (ou actualiser sa date) |
| mkdir d | créer un dossier |
| mkdir -p a/b/c | créer toute la hiérarchie d’un coup |
| cp source destination | copier un fichier |
| cp -r d1 d2 | copier un dossier et son contenu |
| cp -a source destination | copie fidèle : droits, dates, liens conservés |
| cp -i · mv -i | demander avant d’écraser |
| cp -n | ne jamais écraser |
| mv ancien nouveau | renommer |
| mv f1 f2 d/ | déplacer plusieurs fichiers dans un dossier |
| rm f | supprimer un fichier |
| rm -i f | supprimer avec confirmation |
| rm -r d | supprimer un dossier et tout son contenu |
| rmdir d | supprimer un dossier vide |
! Pas de corbeille : rm est définitif et rm -rf ne demande rien. Vérifier d’abord le motif avec ls motif.
! cp et mv écrasent sans prévenir un fichier de même nom (sauf -i ou -n).
| ln -s cible lien | lien symbolique : un raccourci (peut pointer dans le vide) |
| ln cible lien | lien physique : second nom des mêmes données |
| ls -l lien | affiche lien -> cible |
| readlink -f lien | chemin réel final |
Ordre : cible d’abord, comme cp source destination. Lien physique : même système de fichiers, jamais un dossier.
| * | toute suite de caractères, même vide | *.txt |
| ? | exactement un caractère | photo?.jpg |
| [abc] | un caractère parmi a, b, c | [Rr]apport* |
| [0-9] | un caractère de l’intervalle | log[0-9] |
| [!0-9] | un caractère hors de l’ensemble | [!0-9]* |
| {a,b} | variantes | f{,.bak} → f f.bak |
| {1..5} | séquence | mkdir s{1..5} |
C’est le shell qui remplace les jokers, avant de lancer la commande ; * ignore les fichiers cachés. Voir d’avance : echo *.txt.
| diff a b | différences ligne à ligne |
| diff -u a b | format unifié : + ajouté, - retiré |
| diff -r d1 d2 | comparer deux dossiers |
| sha256sum f | empreinte SHA-256 d’un fichier |
| sha256sum -c f.sha256 | vérifier des empreintes publiées |
Un téléchargement est intact si son empreinte est identique à celle que publie la source officielle.
| file f | encodage et fins de ligne (« CRLF » = Windows) |
| dos2unix f · unix2dos f | convertir les fins de ligne (paquet dos2unix) |
| iconv -f ISO-8859-1 -t UTF-8 f > g | convertir l’encodage en UTF-8 |
| locale | langue et encodage de la session |
Noms sûrs : lettres sans accent, chiffres, -, _, . ; ni espace ni caractère spécial.
| cat f · cat -n f | afficher tout · avec numéros de ligne |
| less f | lire page par page (touches ci-dessous) |
| head f · head -n 20 f | 10 (ou 20) premières lignes |
| tail f · tail -n 20 f | 10 (ou 20) dernières lignes |
| tail -f f | suivre en direct (journal) ; Ctrl+C pour sortir |
| wc -l f | compter les lignes (-w mots, -c octets) |
| file f | nature réelle du contenu |
| stat f | taille, droits, dates, inode |
| Espace · b | page suivante · précédente |
/mot · n · N | chercher · suivant · précédent |
| g · G | début · fin |
| F | suivre les ajouts (comme tail -f) |
| q | quitter |
| tar -czf a.tar.gz d/ | créer une archive compressée (gzip) |
| tar -cJf a.tar.xz d/ | idem en xz : plus compact, plus lent |
| tar -tzf a.tar.gz | lister le contenu sans extraire |
| tar -xzf a.tar.gz | extraire ici |
| tar -xf a.tar.gz -C d/ | extraire dans d (compression détectée) |
| gzip f · gunzip f.gz | compresser · décompresser (remplace l’original) |
| zip -r a.zip d/ | archive zip |
| unzip a.zip · unzip -l a.zip | extraire · lister |
Mémo tar : c créer · x extraire · t lister · z gzip · J xz · j bzip2 · v détails · f fichier — f en dernier, suivi du nom de l’archive.
| df -h | espace libre par système de fichiers |
| df -i | inodes libres (nombre de fichiers possibles) |
| du -sh d | taille totale d’un dossier |
| du -h --max-depth=1 | taille de chaque sous-dossier |
| du -sh * | sort -h | éléments du dossier courant, triés |
| lsblk -f · findmnt | disques et partitions · points de montage |
| sudo mount /dev/sdb1 /mnt | monter une partition |
| sudo umount /mnt | démonter (fermer d’abord les fichiers ouverts) |
/etc/fstab : montages au démarrage. ! Une erreur peut bloquer le démarrage : contrôler avec findmnt --verify, puis sudo mount -a.
! mkfs, dd, fdisk sur le mauvais disque effacent tout : vérifier son nom avec lsblk, deux fois.
| rm -rf chemin | suppression définitive, sans question : relire le chemin |
| rm -rf "$d"/* | ! si d est vide → /* ! Écrire "${d:?}"/* |
| dd · mkfs · fdisk | écrasent un disque entier en cas d’erreur de nom |
| chmod -R · chown -R | sur / ou /etc : système cassé, sécurité perdue |
| > f | vide le fichier sans confirmation |
| curl url | sh | exécute un script jamais lu : télécharger, lire, puis lancer |
Règle d’or : comprendre chaque option avant Entrée ; simuler d’abord (--dry-run, -i, echo) ; ne jamais coller une commande que l’on ne comprend pas.
Syntaxe : find où critères action
| find . -name "*.log" | par nom (casse respectée) |
| find . -iname "photo*" | par nom, casse ignorée |
| find d -type f | fichiers seulement (d dossiers, l liens) |
| find . -size +100M | plus de 100 Mio |
| find . -mtime -7 | modifiés il y a moins de 7 jours |
| find . -mtime +30 | modifiés il y a plus de 30 jours |
| find . -mmin -60 | modifiés dans la dernière heure |
| find . -user nom | appartenant à un utilisateur |
| find . -empty | fichiers et dossiers vides |
| find . -maxdepth 1 | sans descendre dans les sous-dossiers |
| find . -name "*.sh" -exec chmod +x {} + | agir sur les résultats |
| find . -name "*.tmp" -delete | ! supprimer les résultats : lancer d’abord sans -delete |
| find / -name f 2>/dev/null | masquer les « Permission denied » |
Combiner : -a et (implicite) · -o ou · ! non · \( … \) groupe.
! Motif entre guillemets, sinon le shell le remplace avant find.
| grep motif f | lignes contenant le motif |
| grep -i | ignorer la casse |
| grep -v | inverser : lignes sans le motif |
| grep -n | afficher les numéros de ligne |
| grep -c | compter les lignes trouvées |
| grep -w | mot entier seulement |
| grep -o | n’afficher que la partie trouvée |
| grep -r motif d/ | chercher dans tout un dossier |
| grep -rl motif d/ | seulement les noms de fichiers |
| grep -E "a|b" | expression régulière étendue (a ou b) |
| grep -F "a.b" | texte littéral : aucun caractère spécial |
| grep -A 3 · -B 3 · -C 3 | 3 lignes après · avant · autour |
| grep -q | silencieux : seul le code de retour compte (scripts) |
| history | grep ssh | retrouver une ancienne commande |
| ps aux | grep nom | trouver un processus |
| du -sh * | sort -h | tail | les plus gros éléments |
| sort f | uniq -c | sort -rn | head | les 10 lignes les plus fréquentes |
| grep -v '^#' f | grep -v '^$' | configuration sans commentaires ni lignes vides |
| awk '{print $1}' access.log | sort | uniq -c | sort -rn | head | adresses les plus fréquentes d’un journal web |
| find . -name '*.md' -print0 | xargs -0 grep -l TODO | fichiers .md contenant TODO (espaces dans les noms gérés) |
| ls | wc -l | nombre d’éléments du dossier |
| ls -lt | head | les fichiers modifiés en dernier |
| tail -f journal | grep -i error | surveiller les erreurs en direct |
| cut -d: -f1 /etc/passwd | sort | liste triée des comptes |
| . | un caractère quelconque |
| ^ · $ | début · fin de ligne |
| * | l’élément précédent, 0 fois ou plus |
| + · ? | 1 fois ou plus · 0 ou 1 fois |
| {2,4} | de 2 à 4 fois |
| [abc] · [^abc] | un caractère parmi · hors de |
| [0-9] · [a-z] | un caractère d’un intervalle |
| a|b · ( ) | alternative · groupe |
| \. · \* | caractère spécial pris à la lettre |
| \b | limite de mot (GNU) |
| ^# | lignes de commentaire |
| ^$ | lignes vides |
| ^[0-9]+$ | lignes faites uniquement de chiffres |
| [0-9]{1,3}(\.[0-9]{1,3}){3} | forme d’une adresse IPv4 (valeurs non contrôlées) |
! Joker ≠ expression régulière : *.txt (shell) ↔ \.txt$ (grep).
| sort f | trier : -n numérique · -r inverse · -h tailles (2K, 1G) · -k 2 selon la 2e colonne · -u sans doublon |
| uniq | fusionner les doublons consécutifs (-c compter) : trier avant |
| cut -d: -f1 /etc/passwd | 1er champ, séparateur « : » |
| tr a-z A-Z | remplacer des caractères (ici : en majuscules) |
| tr -d '\r' | supprimer des caractères (fins de ligne Windows) |
| sed 's/ancien/nouveau/g' f | remplacer partout (affiche le résultat) |
| sed -i.bak 's/a/b/g' f | ! modifier le fichier lui-même (copie .bak) |
| sed -n '5,10p' f | afficher les lignes 5 à 10 |
| sed '/^#/d' f | retirer les lignes de commentaire |
| awk '{print $1}' f | 1re colonne (séparateur : espaces) |
| awk -F: '{print $1, $7}' /etc/passwd | colonnes 1 et 7, séparateur « : » |
| awk '$3 > 100' f | lignes dont la 3e colonne dépasse 100 |
| tee f | afficher et écrire dans un fichier |
| xargs | transformer l’entrée en arguments |
| column -t | aligner en colonnes |
| tac · rev | inverser l’ordre des lignes · des caractères |
| locate nom | recherche instantanée dans un index (paquet plocate) ; mise à jour : sudo updatedb |
| which commande | programme effectivement lancé |
| whereis commande | programme, sources et manuel |
| type -a commande | toutes les définitions : alias, fonction, fichier |
| command -v commande | la commande existe-t-elle ? (forme portable, scripts) |
| realpath f | chemin absolu d’un fichier |
| droits | |||||||||
- | rwx | r-x | --- | 1 | alice | compta | 4096 | Sep 28 10:15 | rapport.sh |
| type | propriétaire u | groupe g | autres o | liens | propriétaire | groupe | taille (octets) | dernière modification | nom |
Type : - fichier · d dossier · l lien symbolique · b c périphérique (bloc, caractère) · p tube nommé · s socket. Droits dans l’ordre r lire · w écrire · x exécuter ; - = droit absent.
| sur un fichier | sur un dossier | |
|---|---|---|
| r (4) | lire le contenu | lister les noms (ls) |
| w (2) | modifier le contenu | créer, renommer, supprimer des éléments |
| x (1) | exécuter (programme, script) | entrer (cd) et accéder aux éléments |
Supprimer un fichier dépend des droits sur le dossier qui le contient, pas sur le fichier lui-même.
---1 --x2 -w-3 -wx4 r--5 r-x6 rw-7 rwx644 | rw-r--r-- | fichier ordinaire |
600 | rw------- | fichier privé (clé SSH) |
755 | rwxr-xr-x | programme, script, dossier |
700 | rwx------ | dossier privé (~/.ssh) |
664 · 775 | rw-rw-r-- · rwxrwxr-x | travail en groupe |
777 | rwxrwxrwx | ! tout à tous : à proscrire |
Un chiffre par catégorie u · g · o ; chaque chiffre = somme de r 4 + w 2 + x 1. Ex. 6 = 4 + 2 = rw-.
| chmod 644 f | fixer les droits en octal |
| chmod u+x f | ajouter x au propriétaire |
| chmod g-w f | retirer w au groupe |
| chmod o= f | retirer tout droit aux autres |
| chmod a+r f | lecture pour tous (a = u + g + o) |
| chmod u=rw,go=r f | fixer chaque catégorie (= 644) |
| chmod -R u+rwX d | récursif ; X : x pour les dossiers seulement (et fichiers déjà exécutables) |
| sudo chown util f | changer le propriétaire |
| sudo chown util:groupe f | propriétaire et groupe |
| sudo chown -R util: d | récursif ; groupe principal de util |
| chgrp groupe f | changer le groupe (si l’on en est membre) |
! chmod -R 777 ne résout rien : il ouvre tout à tous. Chercher plutôt qui doit accéder, et à quoi.
| umask | masque appliqué aux créations ; souvent 0022 → fichiers 644, dossiers 755 (ou 0002 → 664, 775) |
| chmod u+s f | setuid (4000) : le programme s’exécute avec les droits de son propriétaire (ex. passwd) |
| chmod g+s d | setgid (2000) sur un dossier : les nouveaux fichiers héritent de son groupe |
| chmod +t d | sticky (1000) : seul le propriétaire d’un fichier peut le supprimer (ex. /tmp : drwxrwxrwt) |
s ou t minuscule : bit spécial avec x ; S ou T majuscule : bit spécial sans x.
| whoami · id | utilisateur courant · identifiants et groupes |
| groups util | groupes d’un utilisateur |
| who · w | utilisateurs connectés (et leur activité) |
| passwd | changer son mot de passe |
| sudo adduser util | créer un utilisateur (Debian, Ubuntu : interactif) |
| sudo useradd -m -s /bin/bash util | créer un utilisateur (toutes distributions) |
| sudo passwd util | définir son mot de passe |
| sudo usermod -aG groupe util | ajouter à un groupe |
| sudo groupadd groupe | créer un groupe |
| sudo passwd -l util | verrouiller le mot de passe du compte |
| sudo userdel -r util | supprimer le compte et son dossier personnel |
! usermod -G sans -a remplace tous les groupes secondaires. Un nouveau groupe prend effet à la connexion suivante.
| sudo commande | exécuter une commande en administrateur (root) |
| sudo !! | relancer la commande précédente avec sudo |
| sudo -i | ouvrir un shell root (quitter : exit) |
| sudo -u util commande | exécuter en tant qu’un autre utilisateur |
| sudo -l | voir ce que l’on a le droit de faire |
| su - util | ouvrir une session en tant que util (son mot de passe) |
| sudo visudo | modifier /etc/sudoers avec contrôle de syntaxe |
Invite : $ utilisateur ordinaire · # root. Droits d’administration : groupe sudo (Debian, Ubuntu) ou wheel (Fedora, RHEL).
! Root n’a aucun garde-fou : réserver sudo à la seule commande qui l’exige.
alicenom:xmot de passe:1000UID:1000GID:Aliceinfo:/home/alicedossier:/bin/bashshell| /etc/passwd | comptes, une ligne chacun (lisible par tous) |
| /etc/shadow | empreintes des mots de passe (root seul) ; x y renvoie |
| /etc/group | groupes : nom:x:GID:membre1,membre2 |
| /etc/sudoers | règles de sudo (modifier via visudo) |
UID 0 = root. Comptes ordinaires : en général à partir de 1000 ; en dessous, comptes système (services).
| getfacl f | afficher les droits détaillés |
| setfacl -m u:util:rw f | lecture et écriture pour un utilisateur précis |
| setfacl -m g:groupe:rx d | idem pour un groupe |
| setfacl -x u:util f | retirer cette entrée |
Un + après les droits (-rw-r--r--+) signale des ACL.
| cmd > f | sortie vers f — ! écrase son contenu |
| cmd >> f | sortie ajoutée à la fin de f |
| cmd 2> f | erreurs vers f |
| cmd > f 2>&1 | sortie et erreurs vers f (ordre important) |
| cmd &> f | idem, forme courte de Bash |
| cmd 2>/dev/null | jeter les erreurs |
| cmd < f | lire l’entrée depuis f |
| cmd1 | cmd2 | tube : la sortie de cmd1 alimente cmd2 |
| cmd | tee f | afficher et enregistrer à la fois |
| cmd <<< "texte" | une chaîne comme entrée |
cat > notes.txt <<'EOF' Texte sur plusieurs lignes, écrit tel quel dans notes.txt. EOF
<<'EOF' : texte pris tel quel · <<EOF : variables remplacées.
! sort f > f vide f : le shell l’ouvre en écriture avant la lecture. Écrire ailleurs, ou sort -o f f.
| a ; b | a puis b, quoi qu’il arrive |
| a && b | b seulement si a réussit |
| a || b | b seulement si a échoue |
| a & | a en arrière-plan |
| ( a ; b ) | sous-shell : un cd n’y affecte pas le shell courant |
| $(cmd) | remplacé par la sortie de cmd |
mkdir -p sauv && cp -a docs "sauv/docs-$(date +%F)"
→ copie datée sauv/docs-AAAA-MM-JJ, seulement si mkdir a réussi.
| cmd & | lancer en arrière-plan |
| jobs | lister les tâches du shell |
| fg %1 · bg %1 | tâche 1 au premier plan · poursuivie en arrière-plan |
| nohup cmd & | survivre à la fermeture du terminal (sortie : nohup.out) |
| disown | détacher la dernière tâche du shell |
| tmux | session qui survit à la déconnexion (page 8) |
| history | liste numérotée |
| !! | relancer la dernière commande |
| !n | relancer la commande numéro n |
| !ssh | relancer la dernière commande commençant par ssh |
| !$ | dernier argument de la commande précédente |
| ^a^b | relancer la précédente en remplaçant a par b |
| Ctrl+R | recherche au fil de la frappe ; encore Ctrl+R : plus ancien |
Debian, Ubuntu : une commande précédée d’une espace n’est pas mémorisée (HISTCONTROL=ignoreboth).
| nom=valeur | définir — ! aucune espace autour de = |
| echo "$nom" | utiliser |
| "${nom}_v2" | accolades : délimiter le nom |
| export nom=valeur | transmettre aux programmes lancés ensuite |
| unset nom | supprimer |
| env · printenv | lister les variables d’environnement |
| ${nom:-défaut} | valeur par défaut si vide ou absente |
| ${#nom} | longueur |
| ${f%.txt} | retirer le suffixe .txt |
| ${f##*/} | retirer le chemin (≈ basename) |
| ${nom/a/b} | remplacer la 1re occurrence (// : toutes) |
| $(( 3 * 4 )) | calcul entier → 12 |
| $HOME · $USER · $PWD | dossier personnel · utilisateur · dossier courant |
| $PATH | dossiers où chercher les commandes, séparés par : |
| $SHELL · $EDITOR · $LANG | shell · éditeur par défaut · langue |
| $? · $$ | code de retour précédent · numéro (PID) du shell |
| '…' | littéral : rien n’est interprété | echo '$HOME' → $HOME |
| "…" | variables et $( ) remplacés, espaces préservées | echo "$HOME" → /home/alice |
| \ | neutralise le caractère suivant | echo \$HOME → $HOME |
Règle : toujours "$variable" entre guillemets doubles — sinon un nom contenant une espace se coupe en deux arguments.
| ~/.bashrc | lu par chaque shell interactif : alias, invite, fonctions |
| ~/.profile · ~/.bash_profile | lu à la connexion : variables d’environnement |
| /etc/profile | équivalent pour tous les utilisateurs |
| source ~/.bashrc | appliquer les changements sans rouvrir le terminal |
| alias ll='ls -lh' | créer un raccourci (à placer dans ~/.bashrc) |
| alias · unalias nom | lister · supprimer les alias |
| export PATH="$HOME/bin:$PATH" | ajouter un dossier au PATH |
| date · date +%F | date et heure · format AAAA-MM-JJ |
| sleep 5 | attendre 5 secondes |
| watch -n 2 cmd | relancer une commande toutes les 2 s |
| time cmd | mesurer la durée d’exécution |
| seq 1 10 | suite de nombres de 1 à 10 |
| echo 'scale=2; 7/2' | bc | calcul décimal → 3.50 (paquet bc) |
| reset | rétablir un terminal déréglé |
| xdg-open f | ouvrir avec l’application par défaut (bureau) |
#!/usr/bin/env bash # sauvegarde.sh — archive datée d’un dossier set -euo pipefail dossier="${1:?usage : $0 dossier}" dest="$HOME/sauvegardes" jour="$(date +%F)" # AAAA-MM-JJ archive="$dest/$(basename "$dossier")-$jour.tar.gz" mkdir -p "$dest" tar -czf "$archive" "$dossier" echo "Archive créée dans $dest"
| #!/usr/bin/env bash | « shebang » : l’interpréteur à utiliser (1re ligne) |
| set -e | arrêter à la première commande en échec |
| set -u | erreur si une variable n’est pas définie |
| set -o pipefail | un tube échoue si l’une de ses commandes échoue |
| ${1:?message} | arrêt avec message si l’argument manque |
| chmod +x sauvegarde.sh | rendre exécutable (une fois) |
| ./sauvegarde.sh docs | lancer depuis son dossier |
| bash sauvegarde.sh docs | lancer sans le droit x |
! ./ est nécessaire : le dossier courant n’est pas dans $PATH.
! Script écrit sous Windows (fins de ligne CRLF) → bad interpreter ou $'\r': command not found. Corriger : sed -i 's/\r$//' script ou dos2unix script.
| $0 | nom du script |
| $1 … $9 · ${10} | arguments de position |
| $# | nombre d’arguments |
| "$@" | tous les arguments, chacun intact (à préférer) |
| "$*" | tous les arguments en une seule chaîne |
| $? | code de retour de la dernière commande |
| $$ · $! | PID du script · du dernier processus lancé en arrière-plan |
| shift | décaler : $2 devient $1 |
| exit 0 · exit 1 | terminer : succès · échec |
| -e f | existe |
| -f f · -d d | fichier ordinaire · dossier |
| -L f | lien symbolique |
| -r · -w · -x f | lisible · modifiable · exécutable |
| -s f | existe et n’est pas vide |
| f1 -nt f2 | f1 plus récent que f2 |
| -z "$s" · -n "$s" | vide · non vide |
| "$a" == "$b" · != | égales · différentes |
| "$f" == *.txt | correspond au joker (sans guillemets à droite) |
| "$s" =~ ^[0-9]+$ | correspond à l’expression régulière |
| -eq · -ne | égal · différent |
| -lt · -le · -gt · -ge | < · ≤ · > · ≥ |
| (( a > b )) | comparaison arithmétique, plus lisible |
Combiner : &&, ||, ! à l’intérieur de [[ ]]. ! Espaces obligatoires : [[ -f "$f" ]], jamais [[-f "$f"]].
[ ] (POSIX) : mêmes tests de fichiers, = pour les chaînes, guillemets indispensables.
if [[ -f "$f" ]]; then
echo "fichier présent"
elif [[ -d "$f" ]]; then
echo "c’est un dossier"
else
echo "introuvable : $f" >&2
exit 1
ficase "$reponse" in
o|O|oui) echo "d’accord" ;;
n|N|non) echo "abandon"; exit 1 ;;
*) echo "réponse inattendue" ;;
esacToute commande peut servir de condition : code 0 = vrai. if grep -q motif f; then …
for f in *.jpg; do
echo "Traitement de $f"
done
for i in {1..5}; do echo "$i"; done
for (( i = 0; i < 3; i++ )); do echo "$i"; done
while IFS= read -r ligne; do
echo "> $ligne"
done < fichier.txt
n=0
until (( n >= 3 )); do n=$(( n + 1 )); donebreak sortir de la boucle · continue passer au tour suivant. Lire un fichier ligne à ligne : while IFS= read -r (espaces et \ conservés).
saluer() {
local nom="${1:-inconnu}" # variable locale
echo "Bonjour, $nom"
}
saluer "le monde"
message="$(saluer "vous")" # capturer la sortie| read -rp "Nom : " nom | demander une saisie |
| printf '%s : %d\n' "$nom" "$n" | affichage formaté |
| return n | code de retour d’une fonction (0 à 255) |
| bash -n script | vérifier la syntaxe sans exécuter |
| bash -x script | afficher chaque commande exécutée |
| set -x · set +x | activer · couper la trace dans le script |
| shellcheck script | détecter erreurs et pièges (paquet shellcheck) |
| echo "debug : $var" >&2 | message vers la sortie d’erreur |
| tmp="$(mktemp)" | fichier temporaire sûr |
| trap 'rm -f "$tmp"' EXIT | nettoyer à la sortie, même en cas d’erreur |
"$f".[[ ]] plutôt que [ ] en Bash ; $( ) plutôt que les accents graves.PATH, HOME).echo une commande destructrice pour voir ce qu’elle ferait.set -e, (( n++ )) arrête le script quand n vaut 0 (l’expression vaut « faux ») → n=$(( n + 1 )).| ps aux | tous les processus : utilisateur, PID, %CPU, %MEM, commande |
| ps -ef --forest · pstree | avec la filiation parent → enfant |
| pgrep -a nom | PID et ligne de commande, par nom |
| top | moniteur : P tri CPU · M tri mémoire · k tuer · q quitter |
| htop | moniteur plus lisible (à installer) |
| kill PID | demander l’arrêt (signal TERM) |
| kill -9 PID | forcer l’arrêt (KILL) : dernier recours |
| pkill nom · killall nom | arrêter par nom |
| nice -n 10 cmd | lancer avec une priorité plus basse |
| renice -n 10 -p PID | changer la priorité (−20 prioritaire … 19 discret) |
| lsof f · lsof -i :port | qui utilise ce fichier · ce port |
| N° | Nom | Effet |
|---|---|---|
| 1 | HUP | raccrochage ; souvent : relire la configuration |
| 2 | INT | interruption (Ctrl+C) |
| 9 | KILL | arrêt immédiat, impossible à intercepter |
| 15 | TERM | demande d’arrêt propre (défaut de kill) |
| 18 | CONT | reprendre un processus suspendu |
| 19 | STOP | suspendre (impossible à intercepter) |
| 20 | TSTP | suspension au clavier (Ctrl+Z) |
Liste complète : kill -l. Numéros valables sur PC (x86) et ARM.
.---------- minute (0-59) | .-------- heure (0-23) | | .------ jour du mois (1-31) | | | .---- mois (1-12) | | | | .-- jour de la semaine (0-7 ; 0 et 7 = dimanche) | | | | | * * * * * commande
| 30 2 * * * /chemin/script.sh | chaque jour à 2 h 30 |
| */15 * * * * cmd | toutes les 15 minutes |
| 0 9 * * 1-5 cmd | à 9 h, du lundi au vendredi |
| 0 0 1 * * cmd | le 1er de chaque mois, à minuit |
| @reboot cmd | à chaque démarrage |
| crontab -e · crontab -l | modifier · afficher sa table |
| crontab -r | ! supprime toute la table, sans confirmation (voisin de -e) |
! Environnement minimal : chemins absolus, sortie redirigée (>> /chemin/log 2>&1), % écrit \%.
| uname -a · uname -r | noyau et architecture · version du noyau |
| cat /etc/os-release | distribution et version |
| hostnamectl | nom de la machine, système, matériel |
| uptime | durée de fonctionnement ; charge moyenne sur 1, 5, 15 min |
| free -h | mémoire vive et swap |
| lscpu · nproc | processeur · nombre de cœurs |
| lspci · lsusb | périphériques PCI · USB |
| sudo dmesg -T | messages du noyau (matériel, pilotes) |
| timedatectl | date, heure, fuseau, synchronisation |
| systemctl status service | état et dernières lignes du journal |
| sudo systemctl start service | démarrer (stop : arrêter) |
| sudo systemctl restart service | redémarrer |
| sudo systemctl reload service | relire la configuration sans couper |
| sudo systemctl enable --now service | activer au démarrage et lancer aussitôt |
| sudo systemctl disable service | ne plus lancer au démarrage |
| systemctl is-active service | réponse courte (is-enabled : activé ?) |
| systemctl --failed | services en échec |
| systemctl list-units --type=service | services chargés |
| systemctl list-timers | minuteries (alternative à cron) |
| sudo systemctl daemon-reload | après modification d’un fichier d’unité |
| sudo systemctl reboot | redémarrer (poweroff : éteindre) |
Fichiers d’unité : /etc/systemd/system/ (administrateur) l’emporte sur /usr/lib/systemd/system/ (paquets).
| journalctl -u service | journal d’un service |
| journalctl -f | suivre en direct |
| journalctl -b · -b -1 | depuis le démarrage · démarrage précédent |
| journalctl -p err | erreurs et plus grave |
| journalctl --since today | depuis minuit (ou "1 hour ago") |
| journalctl -xe | fin du journal, avec explications |
| journalctl --disk-usage | place occupée par le journal |
Fichiers texte (si rsyslog est installé) : /var/log/syslog (Debian) ou /var/log/messages (Fedora, RHEL) ; connexions et sudo : /var/log/auth.log ou /var/log/secure.
| Action | Debian, Ubuntu | Fedora, RHEL | Arch |
|---|---|---|---|
| Mettre à jour la liste | sudo apt update | automatique (dnf makecache) | compris dans -Syu |
| Tout mettre à jour | sudo apt upgrade | sudo dnf upgrade | sudo pacman -Syu |
| Installer | sudo apt install p | sudo dnf install p | sudo pacman -S p |
| Installer un fichier local | sudo apt install ./f.deb | sudo dnf install ./f.rpm | sudo pacman -U f.pkg.tar.zst |
| Supprimer | sudo apt remove p (purge : + config.) | sudo dnf remove p | sudo pacman -Rns p |
| Dépendances devenues inutiles | sudo apt autoremove | sudo dnf autoremove | pacman -Qdtq | sudo pacman -Rns - |
| Rechercher · informations | apt search mot · apt show p | dnf search mot · dnf info p | pacman -Ss mot · pacman -Si p |
| Paquets installés | apt list --installed | dnf list --installed | pacman -Q |
| Quel paquet fournit ce fichier ? | dpkg -S /chemin | dnf provides /chemin | pacman -Qo /chemin |
Formats universels : flatpak install … · snap install …. ! N’ajouter de dépôt tiers qu’en connaissance de cause : il reçoit les droits de root à chaque mise à jour.
| ip a · ip -br a | interfaces et adresses IP · résumé |
| ip r | routes ; passerelle : ligne default via … |
| ping -c 4 hôte | joignabilité (4 essais) |
| tracepath hôte | chemin suivi jusqu’à l’hôte |
| ss -tulpn | ports en écoute (sudo : avec tous les processus) |
| dig nom · dig +short nom | interroger le DNS |
| resolvectl status | serveurs DNS utilisés (systemd-resolved) |
| curl -I https://example.com | en-têtes de la réponse HTTP |
| curl -LO url · wget url | télécharger un fichier |
| nmcli device status | interfaces gérées par NetworkManager |
| /etc/hosts · /etc/resolv.conf | noms locaux · DNS configurés |
ip a : ai-je une adresse ?ip r : ai-je une passerelle ? ping vers elleping -c 3 1.1.1.1 : Internet répond-il ?dig nom : le DNS répond-il ?curl -I url : le service répond-il ?| ssh util@hôte | se connecter |
| ssh -p 2222 util@hôte | port non standard |
| ssh util@hôte 'cmd' | exécuter une commande à distance |
exit · Ctrl+D | se déconnecter |
| ssh-keygen -t ed25519 | créer une paire de clés (~/.ssh/id_ed25519 et .pub) |
| ssh-copy-id util@hôte | installer sa clé publique sur le serveur |
| ssh -L 8080:localhost:80 util@hôte | tunnel : port local 8080 → port 80 du serveur |
| ssh -J rebond util@hôte | passer par une machine de rebond |
Host srv
HostName 203.0.113.10
User util
Port 2222
IdentityFile ~/.ssh/id_ed25519→ ssh srv suffit.
! La clé privée (sans .pub) ne se transmet jamais. Droits : chmod 700 ~/.ssh · chmod 600 ~/.ssh/id_ed25519.
! « REMOTE HOST IDENTIFICATION HAS CHANGED » : ne pas passer outre ; vérifier l’empreinte du serveur avant ssh-keygen -R hôte.
| scp f util@hôte:/chemin/ | copier vers le serveur |
| scp util@hôte:/chemin/f . | copier depuis le serveur |
| rsync -avh src/ util@hôte:dest/ | synchroniser : seules les différences transitent |
| rsync -avh --dry-run … | simuler d’abord |
| rsync -avh --delete src/ dest/ | ! miroir : efface dans dest ce qui a disparu de src |
| sftp util@hôte | session interactive : put, get, ls, bye |
rsync : -a archive (récursif, droits, dates, liens) · -v détails · -h tailles lisibles · -z compresser · -P progression et reprise.
! src/ copie le contenu de src ; src sans barre finale copie le dossier lui-même.
Liste de référence locale : /etc/services.
Dans /etc/ssh/sshd_config, après avoir vérifié que la connexion par clé fonctionne :
PasswordAuthentication no PermitRootLogin no
| sudo sshd -t | vérifier la syntaxe de la configuration |
| sudo systemctl reload ssh | appliquer (service sshd sur Fedora, RHEL) |
| sudo ufw allow 22/tcp | pare-feu ufw (Debian, Ubuntu) : autoriser SSH… |
| sudo ufw enable · ufw status | … puis activer · contrôler |
| sudo firewall-cmd --list-all | firewalld (Fedora, RHEL) : état |
| sudo firewall-cmd --permanent --add-service=http | ouvrir un service, puis --reload |
! Garder une session ouverte et tester depuis une seconde fenêtre avant de la fermer. Un fichier de /etc/ssh/sshd_config.d/ peut primer : la première valeur lue l’emporte.
command not found | faute de frappe, paquet absent, dossier hors du PATH → type, installer |
No such file or directory | chemin ou casse erronés → pwd, ls, Tab ; script : fins de ligne CRLF |
Permission denied | droits insuffisants, x manquant → ls -l, chmod +x, sudo si légitime |
Is a directory | option -r oubliée ou mauvais argument |
No space left on device | disque ou inodes pleins → df -h, df -i, du -sh * |
Read-only file system | montage en lecture seule, souvent après une erreur disque → sudo dmesg -T |
Device or resource busy | fichier ou montage en cours d’usage → lsof |
Connection refused | aucun service n’écoute ce port → ss -tulpn, systemctl status |
Connection timed out | hôte injoignable ou pare-feu → ping, ip r |
Address already in use | port déjà occupé → sudo ss -tulpn |
Could not get lock … | une autre installation tourne → attendre ; ne pas effacer le verrou |
… is not in the sudoers file | compte sans droits d’administration → groupe sudo ou wheel |
| tmux new -s nom | ouvrir une session nommée |
| Ctrl+B puis D | se détacher : tout continue de tourner |
| tmux ls | lister les sessions |
| tmux attach -t nom | retrouver une session |
| Ctrl+B puis C · N | nouvelle fenêtre · fenêtre suivante |
| Ctrl+B puis % · " | partager l’écran : côte à côte · l’un sous l’autre |
| Ctrl+B puis ↑ ↓ ← → | changer de volet |
Sur un serveur : un travail long lancé dans tmux survit à une coupure de la connexion SSH.