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, installer, 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.

Voir aussi : stat mkdir umask

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, ajouter systématiquement -i ou utiliser -n.

Voir aussi : mv ln rm

install

Copier un fichier en fixant ses droits et son propriétaire

install copie un fichier et règle dans la même commande son mode, son propriétaire et son groupe, en créant si besoin les répertoires de destination. C'est la commande habituelle pour déployer un binaire ou un fichier de configuration, là où il faudrait sinon enchaîner cp, chmod et chown.

Options principales

-m MODEDroits du fichier copié, par exemple 755 ou 640.
-o UTILISATEUR / -g GROUPEPropriétaire et groupe. Nécessite root.
-DCrée les répertoires parents de la destination.
-dCrée des répertoires plutôt que de copier un fichier.
-bGarde une copie de sauvegarde du fichier remplacé.
# install -m 755 -b mon-outil /usr/local/bin/mon-outil
Déploie un binaire exécutable et conserve l'ancienne version sous mon-outil~ pour pouvoir revenir en arrière.
# install -m 640 -o root -g nginx -D site.conf /etc/nginx/conf.d/site.conf
Installe une configuration lisible par le groupe du service mais pas par les autres utilisateurs.
# install -d -m 750 -o app -g app /var/lib/app
Crée un répertoire de données avec les bons droits en une seule commande.

Voir aussi : cp chmod chown

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.

Voir aussi : cp rm Options d'interaction

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.

Voir aussi : rmdir cd chmod

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.

Voir aussi : rm mkdir

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.

Voir aussi : ls readlink -f stat

Gestion avancée

Inspecter les métadonnées, identifier les types, vérifier l'intégrité, 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.

Voir aussi : ls file chmod

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.

Voir aussi : stat xxd

sha256sum

Calculer et vérifier l'empreinte d'un fichier

sha256sum calcule l'empreinte SHA-256 d'un fichier : la moindre modification du contenu change complètement le résultat. Comparer l'empreinte d'un téléchargement à celle publiée par l'éditeur prouve qu'il est arrivé intact. Les variantes sha512sum et b2sum fonctionnent de la même façon ; md5sum ne convient plus pour la sécurité.

Options principales

sha256sum FICHIERAffiche l'empreinte suivie du nom du fichier.
-c FICHIER.sha256Vérifie les fichiers listés dans un fichier d'empreintes.
--ignore-missingAvec -c, ignore les fichiers listés mais absents.
$ sha256sum fedora.iso
3f6c0b1e8a9d4f2b7c5e0a1d9b8c7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d  fedora.iso
À comparer avec l'empreinte affichée sur le site de téléchargement.
$ sha256sum mon-outil > mon-outil.sha256
sha256sum -c mon-outil.sha256
mon-outil: OK
Enregistre l'empreinte avant de copier un fichier vers un serveur, puis la vérifie à l'arrivée.
$ sha256sum -c --ignore-missing SHA256SUMS
Vérifie seulement les fichiers téléchargés parmi tous ceux listés par l'éditeur.
Empreinte et authenticité : une empreinte prouve l'intégrité, pas l'origine : si le site est compromis, l'empreinte affichée peut l'être aussi. Quand l'éditeur signe son fichier d'empreintes, vérifier aussi la signature avec gpg.

Voir aussi : gpg file dd

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.

Voir aussi : du lsblk mount

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).

Voir aussi : pwd readlink -f $(cmd)

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 compte : 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