Gérer les fichiers et les répertoires sous Linux

CompTIABeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous acquerrez les compétences fondamentales pour gérer les fichiers et les répertoires au sein d'un environnement de ligne de commande Linux. Vous bénéficierez d'une expérience pratique pour créer et supprimer des structures de répertoires complexes à l'aide de mkdir et rm, ainsi que pour copier et déplacer des fichiers et des répertoires avec cp et mv.

De plus, cet atelier propose une exploration détaillée du liage de fichiers. Vous créerez des liens symboliques (souples) et physiques (durs) à l'aide de la commande ln, analyserez le concept sous-jacent des inodes et observerez les comportements distincts de chaque type de lien lorsque le fichier source est modifié. Cela vous permettra de mieux comprendre comment le système de fichiers Linux organise et référence les données.

Créer et supprimer des structures de répertoires avec mkdir, rmdir et rm

Dans cette étape, vous apprendrez à créer et à supprimer des répertoires. L'organisation des fichiers dans une structure hiérarchique de répertoires est une tâche fondamentale sous Linux. Nous utiliserons la commande mkdir pour créer des répertoires, rmdir pour supprimer des répertoires vides et rm pour supprimer des répertoires ainsi que tout leur contenu. Toutes les commandes seront exécutées depuis votre répertoire par défaut, ~/project.

Tout d'abord, créons un répertoire simple. La commande mkdir signifie "make directory" (créer un répertoire).

Dans votre terminal, exécutez la commande suivante pour créer un répertoire nommé cars :

mkdir cars

Pour vérifier que le répertoire a été créé, vous pouvez utiliser la commande ls -ld. L'option -l fournit un format d'affichage long, et l'option -d liste l'entrée du répertoire lui-même, et non son contenu.

ls -ld cars

Vous devriez voir une sortie similaire à celle-ci, confirmant la création du répertoire cars. Le d au début de la chaîne de permissions indique qu'il s'agit d'un répertoire (directory).

drwxr-xr-x 2 labex labex 4096 May 20 10:30 cars

Maintenant, supprimons ce répertoire. La commande rmdir est utilisée pour supprimer des répertoires vides.

rmdir cars

Vérifiez sa suppression en exécutant à nouveau la commande ls -ld.

ls -ld cars

Cette fois, vous recevrez un message d'erreur car le répertoire n'existe plus. Cela confirme que rmdir a réussi.

ls: cannot access 'cars': No such file or directory

La commande rmdir ne fonctionne que sur les répertoires vides. Que se passe-t-il si nous avons une structure de répertoires imbriqués ? Essayons de créer une structure de répertoires pastry/pies/cakes. Pour créer les répertoires parents si nécessaire, nous devons utiliser l'option -p (parents) avec mkdir.

Exécutez la commande suivante :

mkdir -p pastry/pies/cakes

Pour visualiser l'intégralité de la structure de répertoires que vous venez de créer, utilisez la commande ls avec les options -l (format long) et -R (récursif).

ls -lR pastry

La sortie affichera le répertoire pastry et ses sous-répertoires, pies et cakes.

pastry:
total 4
drwxr-xr-x 3 labex labex 4096 May 20 10:35 pies

pastry/pies:
total 4
drwxr-xr-x 2 labex labex 4096 May 20 10:35 cakes

pastry/pies/cakes:
total 0

Maintenant, essayons de supprimer le répertoire pastry à l'aide de rmdir.

rmdir pastry

Pourquoi cette commande a-t-elle échoué ? Le terminal affichera un message d'erreur :

rmdir: failed to remove 'pastry': Directory not empty

C'est parce que rmdir ne peut supprimer que des répertoires vides, et pastry contient le sous-répertoire pies.

Pour supprimer un répertoire et tout son contenu (y compris les sous-répertoires et les fichiers), vous devez utiliser la commande rm avec l'option -r (récursif). Soyez très prudent avec cette commande, car elle peut supprimer des données de manière permanente.

rm -r pastry

Cette commande ne produira aucune sortie si elle réussit. Vous pouvez vérifier que le répertoire pastry a été complètement supprimé en exécutant à nouveau ls -ld pastry, ce qui devrait entraîner une erreur "No such file or directory".

ls -ld pastry

Créer des fichiers et des liens symboliques avec vi et ln -s

Dans cette étape, vous allez créer un fichier à l'aide de l'éditeur de texte vi, puis créer un lien symbolique vers celui-ci. Un lien symbolique, également appelé symlink ou lien souple, est un type de fichier spécial qui pointe vers un autre fichier ou répertoire. C'est comparable à un raccourci dans d'autres systèmes d'exploitation.

Tout d'abord, créons un fichier texte simple nommé filea à l'aide de vi. vi est un éditeur de texte puissant orienté écran. Il possède deux modes principaux : le mode Commande et le mode Insertion. Vous commencez en mode Commande, où les touches pressées sont interprétées comme des commandes. Pour saisir du texte, vous devez passer en mode Insertion.

  1. Dans votre terminal, qui doit se trouver au chemin ~/project, lancez vi pour créer le fichier filea :
vi filea
  1. Votre terminal affiche maintenant l'interface de l'éditeur vi. Pour commencer à taper, vous devez passer en mode Insertion. Appuyez une fois sur la touche i. Vous devriez voir -- INSERT -- s'afficher en bas de l'écran.
  2. Maintenant, tapez le texte suivant :
This is filea.
  1. Pour enregistrer le fichier et quitter vi, vous devez d'abord revenir en mode Commande en appuyant sur la touche Esc. Ensuite, tapez ZZ (maintenez Shift et appuyez deux fois sur Z). Cette commande enregistre le fichier et ferme l'éditeur.

Maintenant que vous êtes de retour à l'invite de commande, vérifions que le fichier a été créé et contient le bon contenu.

Tout d'abord, listez le fichier :

ls filea

La sortie devrait simplement être le nom du fichier :

filea

Ensuite, affichez son contenu à l'aide de la commande cat :

cat filea

La sortie doit correspondre au texte que vous avez saisi :

This is filea.

Maintenant, créons un lien symbolique. Nous allons créer un lien nommé fileb qui pointe vers notre fichier d'origine, filea. La commande est ln -s <source_file> <destination_link>.

ln -s filea fileb

Pour tester les résultats, utilisez la commande ls -il. L'option -i affiche le numéro d'inode, qui est un identifiant unique pour un fichier ou un répertoire sur le système de fichiers.

ls -il file[ab]

Examinez attentivement la sortie.

131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea

Notez quelques points clés :

  • Type de fichier : La chaîne de permissions pour filea commence par un -, indiquant un fichier régulier. La chaîne pour fileb commence par un l, indiquant un lien symbolique (link).
  • Pointeur de lien : La sortie montre clairement fileb -> filea.
  • Numéros d'inode : Regardez la première colonne. Les numéros d'inode pour filea et fileb sont différents. Pourquoi ? Parce qu'un lien symbolique est un fichier distinct qui stocke simplement le chemin vers le fichier cible. Ce n'est pas le fichier lui-même, il possède donc son propre inode unique.

Enfin, voyons si nous pouvons lire le contenu via le lien.

cat fileb

La sortie est le contenu de filea :

This is filea.

C'est le comportement attendu. Lorsque vous effectuez une opération comme cat sur un lien symbolique, le système suit automatiquement le lien vers le fichier source et exécute l'opération sur celui-ci.

Créer et analyser des liens physiques avec ln et les inodes

Dans cette étape, vous allez créer un lien physique (hard link) et apprendre en quoi il diffère du lien symbolique créé précédemment. Contrairement à un lien symbolique, qui est un pointeur vers un nom de fichier, un lien physique est un autre nom pour le fichier lui-même. Les deux noms pointent directement vers les mêmes données sur le disque, lesquelles sont identifiées par un numéro unique appelé inode.

Nous continuerons à travailler avec les fichiers filea et fileb de l'étape précédente dans le répertoire ~/project.

Tout d'abord, créons un lien physique nommé filec qui pointe vers le même inode que filea. Pour ce faire, nous utilisons la commande ln sans l'option -s.

ln filea filec

Maintenant, visualisons le contenu des trois fichiers : l'original filea, le lien symbolique fileb et le nouveau lien physique filec.

cat filea
cat fileb
cat filec

Vous verrez le même contenu affiché trois fois, ce qui est normal.

This is filea.
This is filea.
This is filea.

La réelle différence devient évidente lorsque nous inspectons les propriétés des fichiers. Utilisez à nouveau la commande ls -il pour visualiser les numéros d'inode et d'autres détails pour les trois fichiers.

ls -il file[a-c]

La sortie ressemblera à ceci. Portez une attention particulière aux première et deuxième colonnes.

131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 2 labex labex 14 May 20 10:40 filec

Analysons cette sortie :

  • Numéros d'inode (Colonne 1) : Remarquez que filea et filec ont exactement le même numéro d'inode (par exemple, 131075). C'est la caractéristique fondamentale d'un lien physique. Ce ne sont pas des fichiers séparés ; ce sont deux noms différents pointant vers les mêmes données de fichier sur le disque. Le lien symbolique fileb possède son propre inode unique.
  • Nombre de liens (Colonne 2) : Regardez le chiffre pour filea et filec. Il est maintenant de 2. Ce nombre est le compteur de liens physiques (hard link count), et il suit combien de noms (liens physiques) pointent vers cet inode unique. Lorsque vous avez créé filec, le compteur de liens pour cet inode est passé de 1 à 2.
  • Type de fichier (Colonne 1 des permissions) : Notez que filec est répertorié comme un fichier régulier (ses permissions commencent par -), tout comme filea. Ce n'est pas un type de lien spécial comme fileb (qui commence par l).

Observer le comportement des liens après modification du fichier source

Dans cette étape, vous observerez les différences critiques de comportement entre les liens symboliques et les liens physiques lorsque le fichier source original est supprimé puis recréé. Cela consolidera votre compréhension du fonctionnement de chaque type de lien. Nous continuerons d'utiliser filea, fileb et filec dans le répertoire ~/project.

Tout d'abord, supprimons le fichier original, filea.

rm filea

Maintenant, examinons l'état de nos trois fichiers. Utilisez la commande ls -l. Vous verrez probablement une erreur pour filea car il n'existe plus, ce qui est attendu.

ls -l file[a-c]

La sortie sera très révélatrice :

ls: cannot access 'filea': No such file or directory
lrwxrwxrwx 1 labex labex 5 May 20 10:41 fileb -> filea
-rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Lien symbolique fileb : Le lien est maintenant "rompu". Il pointe toujours vers le nom filea, mais ce nom ne correspond plus à un fichier existant. Dans de nombreux terminaux, le nom de fichier fileb sera coloré en rouge pour indiquer cet état rompu. Si vous essayez de faire un cat fileb, vous obtiendrez une erreur.
  • Lien physique filec : Le fichier filec n'est absolument pas affecté. Son compteur de liens (la deuxième colonne) est simplement passé de 2 à 1, mais le fichier et ses données sont toujours intacts. C'est parce que la suppression de filea n'a supprimé qu'un des noms pointant vers l'inode ; les données ne sont pas supprimées tant que le compteur de liens ne tombe pas à zéro. Vous pouvez le prouver en affichant son contenu :
cat filec

La sortie est toujours le contenu original :

This is filea.

Maintenant, recréons filea, mais avec un contenu différent. Utilisez vi pour créer un nouveau fichier nommé filea.

  1. Lancez vi : vi filea
  2. Appuyez sur i pour passer en mode Insertion.
  3. Tapez le nouveau contenu : This is the new filea.
  4. Appuyez sur Esc pour revenir en mode Commande, puis tapez ZZ pour enregistrer et quitter.

Avec le nouveau filea en place, inspectons à nouveau les trois fichiers avec ls -il.

ls -il file[a-c]

La sortie montrera une nouvelle situation :

131080 -rw-r--r-- 1 labex labex 20 May 20 11:05 filea
131076 lrwxrwxrwx 1 labex labex  5 May 20 10:41 fileb -> filea
131075 -rw-r--r-- 1 labex labex 14 May 20 10:40 filec
  • Nouveau filea : Un nouveau fichier filea existe, mais remarquez que son numéro d'inode (ex: 131080) est différent de l'inode de filec (ex: 131075). C'est un fichier complètement nouveau qui se trouve simplement avoir le même nom que l'ancien.
  • Lien symbolique fileb : Le lien n'est plus rompu ! Il pointe automatiquement vers le nouveau fichier nommé filea.
  • Lien physique filec : filec est inchangé. Il pointe toujours vers l'inode d'origine et contient les données d'origine.

Enfin, vérifions le contenu des trois fichiers pour voir le résultat.

cat filea
cat fileb
cat filec

La sortie démontre clairement la différence :

This is the new filea.
This is the new filea.
This is filea.

Le lien symbolique fileb a suivi le nom vers le nouveau fichier, tandis que le lien physique filec a maintenu sa connexion aux données d'origine.

Copier et déplacer des fichiers avec cp et mv

Dans cette dernière étape, vous apprendrez à utiliser les commandes cp (copier) et mv (déplacer), qui sont essentielles pour la gestion des fichiers. La commande cp crée un double d'un fichier ou d'un répertoire, tandis que la commande mv renomme un fichier/répertoire ou le déplace vers un autre emplacement.

Commençons par nettoyer les fichiers des étapes précédentes pour avoir un espace de travail propre. Toutes les commandes seront exécutées depuis votre répertoire ~/project.

rm filea fileb filec

Copier des fichiers avec cp

La commande cp crée une nouvelle copie indépendante d'un fichier. Le nouveau fichier aura son propre inode.

  1. Tout d'abord, créez un fichier simple pour travailler à l'aide de la commande touch. touch crée un fichier vide s'il n'existe pas.
touch source_file
  1. Maintenant, visualisons ses propriétés, en faisant attention au numéro d'inode (la première colonne).
ls -i source_file

La sortie affichera un numéro d'inode unique pour ce fichier.

131081 source_file
  1. Ensuite, copiez source_file vers un nouveau fichier nommé copied_file.
cp source_file copied_file
  1. Maintenant, listez les propriétés des deux fichiers.
ls -i source_file copied_file

Vous verrez qu'il s'agit de deux fichiers distincts avec des numéros d'inode différents.

131082 copied_file
131081 source_file

Déplacer et renommer des fichiers avec mv

La commande mv est polyvalente. Si la destination est un nouveau nom de fichier dans le même répertoire, elle renomme le fichier. Si la destination est un répertoire, elle y déplace le fichier. Lors du renommage ou du déplacement d'un fichier au sein du même système de fichiers, le numéro d'inode ne change pas ; la commande met simplement à jour le nom du fichier ou le pointeur d'emplacement.

  1. Renommons source_file en renamed_file.
mv source_file renamed_file
  1. Vérifiez l'inode du fichier nouvellement nommé.
ls -i renamed_file

Vous remarquerez que le numéro d'inode (ex: 131081) est le même que celui du source_file original. Le fichier lui-même n'a pas été modifié, seulement son nom.

131081 renamed_file
  1. Maintenant, déplaçons ce fichier. Tout d'abord, créez un répertoire de destination.
mkdir move_destination
  1. Déplacez renamed_file dans le répertoire move_destination.
mv renamed_file move_destination/
  1. Vérifiez que le fichier se trouve maintenant à l'intérieur du répertoire et vérifiez à nouveau son inode.
ls -i move_destination/renamed_file

Le numéro d'inode reste le même, confirmant que le fichier a été déplacé et non copié.

131081 move_destination/renamed_file

Gérer les écrasements

Par défaut, de nombreux systèmes créent un alias de cp vers cp -i pour vous empêcher d'écraser accidentellement un fichier existant. Le -i signifie "interactif".

  1. Essayons de copier copied_file par-dessus le fichier situé dans notre répertoire move_destination.
cp -i copied_file move_destination/renamed_file
  1. En raison de l'alias -i, une confirmation vous sera demandée.
cp: overwrite 'move_destination/renamed_file'?

Tapez y (pour yes) et appuyez sur Entrée pour confirmer l'écrasement. Si vous vouliez annuler, vous taperiez n.

Résumé

Dans cet atelier, vous avez appris les commandes fondamentales pour gérer les fichiers et les répertoires dans un environnement Linux. Vous vous êtes exercé à créer des structures de répertoires à l'aide de mkdir, y compris l'option -p pour les répertoires parents, et à les supprimer avec rmdir pour les répertoires vides et rm pour ceux qui ne le sont pas. Vous avez également créé des fichiers à l'aide de l'éditeur vi et avez été initié au concept de liage de fichiers.

Le cœur de l'atelier s'est concentré sur la création et l'analyse des deux types de liens : les liens symboliques (souples) avec ln -s et les liens physiques avec ln. Vous avez observé leurs différences fondamentales en examinant les inodes et en notant comment chaque lien se comporte lorsque le fichier source est modifié ou supprimé. Enfin, vous avez utilisé la commande cp pour créer des copies indépendantes de fichiers et la commande mv pour déplacer ou renommer des fichiers et des répertoires, complétant ainsi un aperçu exhaustif des opérations essentielles de gestion de fichiers.