glossaire-linux

Fichiers et navigation

Toutes les commandes essentielles pour se déplacer dans le système de fichiers, créer, copier, déplacer et supprimer des fichiers et répertoires, et inspecter leurs métadonnées.

Manipulation de fichiers

Créer, copier, déplacer, supprimer fichiers et répertoires.

touch

Créer un fichier vide ou mettre à jour ses horodatages

Si le fichier n'existe pas, touch le crée vide. S'il existe, elle met à jour ses dates d'accès et de modification. Très utilisée pour créer rapidement des fichiers de test ou forcer une recompilation (make se base sur les dates).

Options utiles

-aModifie uniquement la date d'accès (atime).
-mModifie uniquement la date de modification (mtime).
-d "date"Force une date précise (ex. "2024-01-15 10:00").
-cNe crée pas le fichier s'il n'existe pas.
$ touch notes.txt
Crée un fichier vide nommé notes.txt.
$ touch fichier1.txt fichier2.txt fichier3.txt
Crée plusieurs fichiers d'un coup.
$ touch -d "2024-01-01 00:00" archive.log
Met les dates d’accès et de modification au 1er janvier 2024. Cela peut servir à tester un filtre find -mtime ; logrotate utilise aussi son fichier d’état et sa configuration, pas simplement le mtime du journal.
$ touch src/main.c && make
Force make à recompiler une cible précise : en mettant à jour le mtime du source, on rend toutes les cibles qui en dépendent « obsolètes » et donc à reconstruire. Plus chirurgical qu'un make clean qui efface tout.
$ touch -r modele.txt nouveau.txt
-r (reference) copie les horodatages d'un autre fichier. Utile quand on extrait une archive : on peut « reconstituer » la date d'origine d'un fichier régénéré à partir d'un fichier témoin.

cp

Copier un fichier ou un répertoire

Copie une source vers une destination. Pour un répertoire, activer la récursion avec -r, -R ou -a (qui inclut aussi la préservation des attributs).

Syntaxe

cp [OPTIONS] SOURCE... DESTINATION

Options principales

-r, -RRécursif : copie aussi les sous-dossiers.
-iInteractif : demande confirmation avant d'écraser.
-nN'écrase jamais un fichier existant.
-vVerbeux : affiche chaque fichier copié.
-pPréserve permissions, dates et propriétaire.
-aMode archive : équivalent à -dR --preserve=all.
-uCopie si la destination est absente ou si la source est plus récente ; ne recopie pas une destination de date égale ou plus récente.
$ cp config.ini config.ini.bak
Crée une sauvegarde simple avant modification.
$ cp -rv mon_projet/ /sauvegarde/
Copie le dossier complet en affichant la liste des fichiers traités.
$ cp -a /etc/nginx/ /backup/nginx-$(date +%F)/
Sauvegarde datée d'un dossier de configuration en préservant tout (permissions, liens, timestamps).
Attention : sans -i, cp écrase silencieusement la destination. Pour les copies critiques, ajoutez systématiquement -i ou utilisez -n.

Voir aussi : mv ln rm

mv

Déplacer ou renommer un fichier ou un répertoire

mv sert à la fois à déplacer et à renommer : si la destination est dans le même répertoire, c'est un renommage ; sinon c'est un déplacement. Sur le même système de fichiers, l'opération est instantanée (seule l'entrée de répertoire change).

Options utiles

-iDemande confirmation avant d'écraser.
-nN'écrase jamais.
-vVerbeux.
-bCrée une sauvegarde du fichier écrasé (suffixe ~).
$ mv ancien_nom.txt nouveau_nom.txt
Renommage simple dans le répertoire courant.
$ mv rapport.pdf ~/Documents/
Déplacement vers un autre dossier (le nom reste le même).
$ mv *.log /var/log/archives/
Déplace tous les fichiers .log vers un dossier d'archives.
$ for f in old-*.txt; do mv -- "$f" "${f/old-/new-}"; done
Renommage en masse via expansion de paramètre Bash : ${f/old-/new-} remplace la première occurrence de old- par new-. Le -- protège contre les noms commençant par -. Pour remplacer toutes les occurrences, utiliser la double barre ${f//old-/new-}.
$ rename 's/\.JPG$/.jpg/' *.JPG
Cet exemple cible rename en version Perl sur Debian/Ubuntu. Sur Fedora, installer le paquet prename et utiliser prename avec la même expression. Le rename fourni par util-linux emploie une autre syntaxe : vérifier rename --version avant de recopier une recette.
Atomicité : sur le même système de fichiers, mv est atomique au niveau du noyau. mv config.new config remplace l'ancienne version sans qu'aucun lecteur ne tombe sur un état intermédiaire. D'où le pattern courant « écrire dans .new, puis mv » pour mettre à jour un fichier de configuration sans risque de lecture partielle.

rm

Supprimer un fichier ou un répertoire

rm supprime définitivement les fichiers, sans corbeille. Aucune récupération facile n'est possible ensuite. Réfléchissez avant de valider, surtout avec des jokers (*) ou en mode récursif.

Options principales

-r, -RRécursif : supprime un dossier et tout ce qu'il contient.
-fForce : ne demande aucune confirmation, ignore les fichiers absents.
-iInteractif : demande pour chaque fichier.
-IDemande une confirmation si plus de trois fichiers sont fournis ou si la suppression est récursive.
-vVerbeux.
--preserve-rootRefuse d'agir sur / (par défaut sur la plupart des distributions).
$ rm fichier.txt
Suppression simple, immédiate.
$ rm -rI vieux_projet/
Supprime un dossier complet avec une confirmation unique. -I est plus pratique que -i pour les gros volumes.
$ rm -- -fichier-bizarre
Le -- termine l'analyse des options : utile quand un nom de fichier commence par un tiret.
Règle d'or : Une suppression est définitive. rm -rf /* vise les éléments de la racine et n’est pas bloqué comme rm -rf /. Les guillemets ne protègent pas d’une variable vide : "$VAR/" vaut aussi / si VAR est vide. Valider explicitement la cible, par exemple : "${VAR:?cible obligatoire}", puis examiner son chemin avant toute suppression.

Voir aussi : rmdir mv

mkdir

Créer un ou plusieurs répertoires

Crée des répertoires. Avec -p, peut créer une arborescence complète d'un coup et ne renvoie pas d'erreur si le dossier existe déjà.

Options

-pCrée les répertoires parents au besoin, sans erreur s'ils existent.
-m MODEDéfinit les permissions à la création (ex. -m 700).
-vVerbeux.
$ mkdir notes
Crée un dossier notes.
$ mkdir -p projet/src/components projet/tests projet/docs
Crée toute une arborescence de projet en une commande.
$ mkdir -m 700 secrets
Crée un dossier accessible uniquement à son propriétaire.

rmdir

Supprimer un répertoire vide

Plus prudent que rm -r car il refuse de supprimer un dossier contenant quoi que ce soit. Utile dans les scripts où l'on veut s'assurer qu'un dossier est bien vide avant de l'enlever.

$ rmdir dossier_vide
Fonctionne si le dossier est réellement vide.
$ rmdir -p projet/src/legacy
Supprime legacy puis remonte et supprime src et projet s'ils deviennent vides.

ln

Créer un lien (raccourci) vers un fichier

Linux distingue deux types de liens : les liens physiques (hard links) qui pointent directement sur l'inode du fichier, et les liens symboliques (symlinks) qui contiennent simplement un chemin. Les liens symboliques sont les plus utilisés au quotidien.

Options

-sCrée un lien symbolique. Sans cette option, le lien est physique.
-fSupprime une destination existante avant de créer le lien, y compris si cette destination est un fichier ordinaire. Ne protège pas contre un mauvais chemin cible.
-nNe déréférence pas une destination qui est un lien symbolique vers un répertoire. Pour traiter aussi un vrai répertoire comme une destination unique, GNU ln propose -T.
-vVerbeux.
$ ln -s /var/www/site /home/dev/site
Crée dans le home un raccourci vers le dossier du site web.
$ ln -sfn /opt/app-v2 /opt/app-current
Pattern de déploiement classique : on bascule /opt/app-current vers la nouvelle version sans toucher aux scripts qui utilisent ce chemin.
Différence clé : un lien symbolique cassé (cible supprimée) existe toujours mais pointe dans le vide. Un lien physique reste valide tant qu'au moins un nom de fichier le référence.

Gestion avancée

Inspecter les métadonnées, identifier les types, mesurer l'espace, manipuler les chemins.

stat

Afficher les métadonnées détaillées d'un fichier

Affiche tout ce que le système sait d'un fichier : taille exacte, inode, nombre de liens, permissions, propriétaire, dates d'accès, modification et changement.

$ stat notes.md
  Fichier : notes.md
   Taille : 1248        Blocs : 8          Bloc d'E/S : 4096   fichier
Périphérique : 254,1   Inœud : 4194562     Liens : 1
  Accès : (0644/-rw-r--r--)  UID : ( 1000/    dev)  GID : ( 1000/    dev)
   Accès : 2024-05-12 14:32:11.000000000 +0200
Modif. : 2024-05-12 14:30:05.000000000 +0200
Changt : 2024-05-12 14:30:05.000000000 +0200
 Créé  : 2024-05-10 09:15:22.000000000 +0200
$ stat -c '%n %s octets, modifié le %y' *.txt
Format personnalisé : pour chaque .txt, son nom, sa taille et sa date de modification.
$ stat -c '%s' fichier.iso
4707319808
Récupère uniquement la taille en octets — utile dans un script qui doit comparer ou afficher en chiffre brut. Combinable avec numfmt pour humaniser : numfmt --to=iec $(stat -c %s fichier.iso) donne 4,4G.
$ stat -c '%Y %n' *.log | sort -rn | head
Trie ici les fichiers .log par mtime décroissant, exprimé en secondes depuis l’époque Unix (%Y). Les noms contenant des retours à la ligne rendent cette sortie ambiguë ; pour un traitement robuste, préférer une chaîne utilisant des séparateurs NUL, par exemple find -printf avec sort -z.

file

Identifier le type d'un fichier

Sous Linux, l'extension n'a aucune signification pour le système. file analyse le contenu (les magic bytes) pour déterminer ce qu'est réellement un fichier.

$ file image.png script.sh archive.tar.gz
image.png:      PNG image data, 1920 x 1080, 8-bit/color RGBA, non-interlaced
script.sh:      Bourne-Again shell script, ASCII text executable
archive.tar.gz: gzip compressed data, was "archive.tar"
$ file -i document
document: text/plain; charset=utf-8
-i donne le type MIME, pratique dans les scripts.

du

Mesurer l'espace disque utilisé par des fichiers ou dossiers

du (disk usage) parcourt l'arborescence et additionne les tailles. Très utile pour identifier ce qui occupe de la place.

Options

-hTailles lisibles (Ko, Mo, Go).
-sSynthèse : un seul total par argument.
-cAffiche un total cumulé en fin de sortie.
-d NLimite la profondeur d'affichage à N niveaux.
-xReste sur le même système de fichiers (ignore les montages).
$ du -sh ~/Documents
3,2G	/home/dev/Documents
Synthèse rapide : combien pèse mon dossier Documents ?
$ du -h --max-depth=1 /var | sort -h
Liste des sous-dossiers de /var triés par taille croissante. Idéal pour traquer ce qui sature un disque.
$ du -ah . | sort -hr | head -n 10
Top 10 des plus gros fichiers et dossiers à partir du répertoire courant.

Voir aussi : df

df

Afficher l'espace disque libre par système de fichiers

df (disk free) liste les partitions montées avec leur taille totale, occupée, libre et leur point de montage. Complémentaire de du : df raisonne par disque, du par dossier.

$ df -h
Sys. de fichiers Taille Util. Dispo Uti% Monté sur
/dev/nvme0n1p2     458G  213G  222G  49% /
/dev/nvme0n1p1     511M  6,1M  505M   2% /boot/efi
tmpfs              7,8G   42M  7,8G   1% /dev/shm
$ df -hT /home
-T ajoute le type de système de fichiers (ext4, xfs, btrfs…).
$ df -i
Affiche l'usage des inodes. Un disque peut être plein en inodes même avec de l'espace libre — typique sur des dossiers contenant des millions de petits fichiers.

basename / dirname

Extraire le nom ou le chemin d'un fichier

Deux outils complémentaires pour décomposer un chemin. Très utiles dans les scripts shell.

$ basename /home/dev/projets/site/index.html
index.html
$ basename /home/dev/photo.jpg .jpg
photo
Avec un suffixe en argument, il est retiré du résultat.
$ dirname /home/dev/projets/site/index.html
/home/dev/projets/site
dirname renvoie tout sauf la dernière composante du chemin.
$ SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
Idiome courant en bash : trouver le dossier du script en cours, même s'il est appelé via un lien symbolique.
$ echo "Usage: $(basename "$0") <source> <destination>" >&2
Pattern de message d'usage : $(basename "$0") récupère le nom du script sans son chemin, donc le message reste correct que le script soit appelé par son nom court (./deploy.sh) ou par chemin absolu (/usr/local/bin/deploy.sh).

Synchronisation

Quand cp -r ne suffit plus : copier intelligemment, ne transférer que ce qui a changé, préserver les permissions et les liens, et tout cela en local comme à travers SSH.

rsync

Synchronisation incrémentale de fichiers, locale ou à travers SSH

rsync synchronise les fichiers et évite les retransferts inutiles, généralement en comparant taille et date de modification. La préservation des permissions, dates et liens symboliques est demandée par -a ; ce n’est pas le comportement par défaut. -a n’inclut pas les ACL, attributs étendus ni liens physiques (-A, -X, -H).

Syntaxe

rsync [options] SOURCE DESTINATION
rsync -av /src/ /dst/                          # local
rsync -av /src/ user@hote:/dst/                # via SSH (rsync utilise ssh par defaut)
rsync -av --delete --dry-run /src/ /dst/       # simulation, montre ce qui serait fait

Options essentielles

-a« Archive » : équivalent de -rlptgoD. Récursif, préserve permissions, dates, propriétaires, liens. À mettre dans 95 % des cas.
-vVerbeux : liste les fichiers transférés.
--deleteSupprime côté destination les fichiers absents de la source. Pour un vrai miroir.
--dry-run / -nSimulation : montre ce qui serait fait, sans rien copier ni effacer. Indispensable avec --delete.
-zCompresse pendant le transfert. Utile sur lien lent, inutile en local ou sur réseau rapide.
--progressAffiche la progression de chaque fichier. Couplé à -v donne une bonne visibilité.
--exclude=PATExclut les fichiers correspondant. Répétable. --exclude-from=fichier pour une liste.
$ rsync -av --delete --dry-run ~/projets/ /mnt/backup/projets/
Simulation d'un miroir : on voit ce qui serait copié et ce qui serait supprimé côté backup. Toujours faire un --dry-run avant un --delete, sinon on risque d'effacer des fichiers qu'on voulait garder.
$ rsync -av --delete ~/projets/ /mnt/backup/projets/
La même chose, pour de vrai. Le slash final sur la source compte : avec ~/projets/, on copie le contenu, sans le slash on copierait le dossier projets à l'intérieur de la destination (créant /mnt/backup/projets/projets/).
$ rsync -avz --progress -e "ssh -p 2222" /var/www/ deploy@web:/srv/site/
Déploiement à travers SSH avec compression et barre de progression. -e "ssh -p 2222" permet de spécifier des options SSH (ici un port non standard).
$ rsync -av --exclude='node_modules' --exclude='.git' /src/ user@host:/dst/
Backup d'un projet en excluant les répertoires lourds qu'on peut reconstituer (dépendances, historique git si déjà sauvegardé ailleurs).
Le slash final est lourd de sens. rsync src/ dst/ copie le contenu de src dans dst. rsync src dst/ copie le dossier src dans dst (donc crée dst/src/). À tester avec --dry-run en cas de doute.

Voir aussi : cp ssh scp tar