Maîtriser les commandes Bash pour la gestion des fichiers et répertoires sous Linux

L'interaction avec le système de fichiers est une compétence fondamentale sous Linux. L'interface en ligne de commande, via le shell Bash, offre une suite d'utilitaires puissants pour manipuler les fichiers et structurer les arborescences de répertoires.

  1. Manipulation des métadonnées avec touch

L'utilitaire touch permet de générer des fichiers vides ou de mettre à jour leurs horodatages d'accès et de modification sans altérer leur contenu.

  • -a : Met à jour uniquement la date de dernier accès.
  • -c : Empêche la création d'un nouveau fichier s'il n'existe pas déjà.
  • -m : Modifie exclusivement l'horodatage de modification.
  • -r : Copie les dates d'un fichier de référence vers la cible.
  • -t : Définit une date explicite au format [[CC]YY]MMDDhhmm[.ss].
$ touch app_log.txt # Génère un fichier vide
$ touch node1 node2 node3 # Initialisation multiple de fichiers
$ touch -a app_log.txt # Actualise la date d'accès ou crée le fichier si absent
$ touch -c app_log.txt # Met à jour les métadonnées sans créer de fichier inexistant
$ touch -m app_log.txt # Ajuste uniquement la date de modification
$ touch -c -t 202311150830 app_log.txt # Fixe la date au 15 novembre 2023 à 08h30
$ touch -r app_log.txt backup_log.txt # Synchronise les horodatages de backup_log avec ceux de app_log
  1. Génération d'arborescences avec mkdir

Pour structurer un projet, la commande mkdir est indispensable afin de concevoir de nouveaux dossiers.

$ mkdir assets # Création standard
$ mkdir assets/images # Utilisation d'un chemin relatif
$ mkdir /var/www/html/assets/images # Chemin absolu
$ mkdir -p logs/archive/2023 # L'option -p crée récursivement les dossiers parents manquants
$ mkdir -p logs # Évite l'erreur si le répertoire est déjà présent
$ mkdir logs # Provoque une erreur : mkdir: cannot create directory 'logs': File exists
$ mkdir -p -m 750 data/private # Définit des permissions spécifiques (rwxr-x---) à la création
$ mkdir -p -m u=rwx,g=rx,o= data/shared # Syntaxe symbolique pour les droits d'accès
  1. Duplication de données avec cp

La commande cp copie des éléments d'une source vers une destination, laissant l'original intact. Le fichier cloné peut conserver son nom ou être renommé.

Syntaxe générale :
cp [OPTIONS] SOURCE CIBLE
cp [OPTIONS] SOURCE... REPERTOIRE

$ cp settings.yaml settings_dev.yaml # Clone un fichier avec un nouveau nom
$ cp database.db /mnt/storage/ # Transfert vers un autre répertoire
$ cp *.csv /mnt/storage/ # Copie en masse par extension
$ cp -p credentials.key /etc/secure/ # Préserve les métadonnées (propriétaire, groupe, permissions, dates)
$ cp -R src/ dest/ # Duplication récursive d'une arborescence complète
$ cp -a project_v1/ project_v2/ # Mode archive (équivalent à -dpR), idéal pour les sauvegardes complètes tout en préservant les liens symboliques
  1. Création de pointeurs avec ln

Le système de fichiers Linux supporte deux types de raccourcis : les liens physiques (hard links) et les liens symboliques (soft links).

Caractéristique Lien Symbolique (Soft Link) Lien Physique (Hard Link)
Relation Pointeur vers un chemin (fichier ou dossier) Référence directe aux données du fichier
Inode Possède son propre inode Partage le même inode que la cible
Portée Peut traverser différents systèmes de fichiers Restreint à la même partition
Suppression de la cible Le lien devient orphelin (cassé) Les données persistent tant qu'au moins un lien physique existe
$ ln script.sh executeur # Crée un lien physique par défaut
$ ls -li | grep script # L'inode est identique (ex: 40912)
-rwxr-xr-x 2 dev dev 1024 Oct 24 10:00 script.sh
-rwxr-xr-x 2 dev dev 1024 Oct 24 10:00 executeur

$ ln -s script.sh lanceur_rapide # Crée un lien symbolique
$ ls -li | grep script # Le lien symbolique a son propre inode (ex: 40999)
lrwxrwxrwx 1 dev dev    9 Oct 24 10:05 lanceur_rapide -> script.sh

$ ls -i script.sh # Vérification de l'identifiant inode
40912 script.sh
$ ls -i executeur # L'identifiant correspond au fichier source
40912 executeur
$ ls -i lanceur_rapide # Identifiant différent pour le lien symbolique
40999 lanceur_rapide

$ ln -s /opt/app/config conf_app # Lien symbolique vers un dossier
$ ln -s data.txt lien_data # Erreur générée si le lien existe déjà
ln: failed to create symbolic link 'lien_data': File exists
$ ln --backup -s data.txt lien_data # Renomme l'ancien lien en 'lien_data~' avant de créer le nouveau
  1. Déplacement et renommage avec mv

L'utilitaire mv sert à transférer des fichiers et répertoires vers un nouvel emplacement, ou simplement à modifier leur appellation.

$ mv invoice.pdf docs/ # Déplace un fichier dans un dossier
$ mv old_project new_project # Renomme un répertoire
$ mv image.png avatar.jpg # Change l'extension d'un fichier
$ mv -i temp.log main.log # Demande une confirmation avant d'écraser un fichier existant
mv: overwrite 'main.log'? y
$ mv *.bak /tmp/backup/ # Déplace tous les fichiers de sauvegarde
$ mv -u *.zip /archives/ # Ne déplace que les fichiers plus récents que ceux présents dans la destination
  1. Éradication de fichiers avec rm

Pour libérer de l'espace disque, la commande rm supprime définitivement les objets du système de fichiers.

$ rm report.docx summary.txt # Suppression multiple
$ rm cache/* # Nettoie le contenu d'un répertoire spécifique
$ rm -i *.tmp # Mode interactif pour valider chaque suppression
$ rm *trace* # Élimine les fichiers contenant "trace" dans leur nom
$ rm log_??? # Cible les fichiers avec exactement 3 caractères après "log_"
$ rm *.[mp]4 # Supprime les fichiers se terminant par .m4 ou .p4
$ rm [xyz].conf # Efface x.conf, y.conf et z.conf
$ rm -rf /var/cache/apt/archives/* # Suppression récursive et forcée de tous les éléments sans demande de confirmation

Étiquettes: Linux bash Shell CLI File System

Publié le 3 juin à 20h03