Opérations de base sur les fichiers sous Linux

LinuxBeginner
Pratiquer maintenant

Introduction

Linux organise les données sous forme d’arborescence de répertoires et de fichiers. Les commandes agissent sur des emplacements de cette arborescence. Pour manipuler les fichiers de manière fiable, commencez donc par répondre à trois questions : où suis-je ? Que contient cet emplacement ? Quel chemin identifie l’élément recherché ?

Dans ce laboratoire, vous allez construire progressivement ces notions dans /home/labex/project/file-basics. Vous utiliserez des chemins absolus et relatifs, inspecterez les entrées visibles et masquées, créerez des fichiers et des répertoires, sélectionnerez des noms à l’aide de caractères génériques, puis copierez, déplacerez et supprimerez des fichiers d’exercice en toute sécurité. La dernière étape présente des raccourcis du terminal qui accélèrent ces opérations sans en modifier le sens.

Localiser votre répertoire de travail

Dans cette étape, vous allez relier l’invite du terminal au répertoire dans lequel les commandes s’exécutent.

Le shell possède toujours un répertoire de travail courant. Les chemins relatifs partent de ce répertoire. Vérifier votre emplacement permet donc d’éviter de nombreuses erreurs de débutant. Accédez à l’espace de travail de ce laboratoire à l’aide de son chemin complet :

cd /home/labex/project/file-basics

Un chemin qui commence par / est un chemin absolu. Il part de la racine du système de fichiers et désigne le même emplacement, quel que soit le répertoire depuis lequel vous avez commencé.

Affichez le répertoire de travail :

pwd

Vous devriez voir :

/home/labex/project/file-basics

Enregistrez cet emplacement comme preuve. L’opérateur > redirige la sortie vers starting-location.txt. Comme la sortie est envoyée dans le fichier, rien ne s’affiche cette fois-ci :

pwd > starting-location.txt

Lisez le fichier pour vérifier ce qui a été enregistré :

cat starting-location.txt

L’écran du terminal et le fichier doivent afficher le même chemin absolu.

Dans cette étape, vous allez vous déplacer entre des répertoires voisins à l’aide de chemins relatifs et des noms spéciaux . et ...

Revenez à l’espace de travail si nécessaire :

cd /home/labex/project/file-basics

Affichez ses entrées visibles :

ls

Vous devriez voir path-map et starting-location.txt. Entrez dans path-map en utilisant un chemin relatif, c’est-à-dire un chemin interprété à partir du répertoire courant :

cd path-map
pwd

Entrez maintenant dans north et lisez son fichier de référence :

cd north
cat reference.txt

La sortie est north reference. Le nom .. désigne le répertoire parent, situé un niveau au-dessus de l’emplacement courant :

cd ..

Depuis path-map, entrez dans son sous-répertoire south :

cd south
cat reference.txt

Le nom . désigne le répertoire courant. En combinant pwd avec une destination relative qui remonte de deux niveaux, enregistrez l’emplacement absolu courant à la racine du laboratoire :

pwd > ../../relative-location.txt

Revenez directement à la racine du laboratoire avec son chemin absolu :

cd /home/labex/project/file-basics
cat relative-location.txt

Le chemin enregistré doit se terminer par /path-map/south. Vous avez utilisé à la fois un déplacement relatif et un chemin absolu pour revenir à la racine.

Inspecter le contenu des répertoires

Dans cette étape, vous allez utiliser les options de ls pour afficher les noms masqués et les détails des fichiers.

Exécutez un affichage simple à la racine du laboratoire :

cd /home/labex/project/file-basics
ls

Linux masque normalement les noms qui commencent par un point. L’option -a signifie « all » et inclut ces entrées :

ls -a

Vous devriez maintenant voir .practice-note, ainsi que . pour le répertoire courant et .. pour son répertoire parent.

L’option -l produit un affichage détaillé contenant les permissions, le propriétaire, la taille, la date et le nom :

ls -l

Combinez les options pour inspecter toutes les entrées sous forme détaillée :

ls -la

Chaque ligne de sortie commence par un champ indiquant le type et les permissions. Un d initial identifie un répertoire ; un - initial identifie un fichier ordinaire. Les permissions seront étudiées plus en détail ultérieurement.

Enregistrez les noms, y compris les entrées masquées. Dans cet espace de travail contrôlé, ls les affiche déjà par ordre alphabétique ; aucune commande de tri supplémentaire n’est donc nécessaire pour le moment :

ls -A > all-names.txt

Contrairement à -a, -A omet les entrées spéciales . et .. tout en conservant les autres noms masqués. Affichez le résultat :

cat all-names.txt

La liste doit inclure .practice-note, path-map et les fichiers créés lors des étapes précédentes.

Créer des répertoires et des fichiers

Dans cette étape, vous allez créer une petite arborescence de projet et placer du texte dans des fichiers ordinaires.

mkdir crée un répertoire. Son option -p crée également les répertoires parents manquants ; une seule commande peut donc construire un chemin imbriqué :

cd /home/labex/project/file-basics
mkdir -p workspace/docs workspace/logs

Cette commande crée workspace, ainsi que ses sous-répertoires docs et logs. Inspectez le résultat :

find workspace -maxdepth 2 -type d

touch crée un fichier vide lorsque le nom indiqué n’existe pas. Créez deux fichiers en une seule fois :

touch workspace/docs/guide.txt workspace/logs/app.log

Écrivez du contenu dans le guide. Un seul > remplace le contenu de la destination par la sortie de la commande :

echo "Linux file practice" > workspace/docs/guide.txt

Ajoutez une deuxième ligne avec >>, qui conserve le contenu existant :

echo "Paths make locations predictable" >> workspace/docs/guide.txt

Lisez le fichier complet :

cat workspace/docs/guide.txt

Vous devriez voir les deux lignes dans leur ordre d’origine. Le fichier vide app.log existe également et sera utilisé plus tard pour pratiquer les caractères génériques.

Sélectionner des noms avec des caractères génériques

Dans cette étape, vous allez créer des groupes de fichiers et les sélectionner à l’aide de motifs de noms.

Entrez dans le répertoire des journaux :

cd /home/labex/project/file-basics/workspace/logs

L’expansion des accolades génère plusieurs noms littéraux avant l’exécution de la commande. Créez des journaux numérotés :

touch app{1..3}.log worker{1..2}.log notes.txt

Le shell développe {1..3} en 1 2 3. Ainsi, app{1..3}.log devient trois arguments.

Un caractère générique est différent : il correspond à des noms qui existent déjà. * correspond à une séquence quelconque de caractères :

ls *.log

La sortie inclut tous les noms qui se terminent par .log, mais pas notes.txt.

Le caractère générique ? correspond à exactement un caractère. Affichez uniquement les journaux app numérotés :

ls app?.log

Le shell développe les motifs de noms de fichiers par ordre alphabétique. printf affiche chaque nom développé sur sa propre ligne, et > enregistre ces lignes :

printf '%s\n' *.log > matched-logs.txt
cat matched-logs.txt

La liste enregistrée doit contenir app.log, app1.log, app2.log, app3.log, worker1.log et worker2.log. Mettre *.log entre guillemets empêcherait l’expansion du caractère générique ; le motif est donc volontairement laissé sans guillemets ici.

Copier, déplacer et supprimer des fichiers en toute sécurité

Dans cette étape, vous allez comparer les effets de cp, mv et rm avant de les utiliser dans le défi suivant.

Revenez au répertoire de l’espace de travail :

cd /home/labex/project/file-basics/workspace

cp SOURCE DESTINATION crée un autre fichier tout en laissant la source à son emplacement. Créez une copie de sauvegarde du guide :

cp docs/guide.txt docs/guide-backup.txt

Vérifiez que les deux fichiers ont un contenu identique. cmp compare deux fichiers octet par octet. Il n’affiche rien lorsqu’ils correspondent ; un message d’erreur indiquerait qu’ils sont différents :

cmp docs/guide.txt docs/guide-backup.txt

mv SOURCE DESTINATION déplace ou renomme un élément. Déplacez la sauvegarde à la racine de l’espace de travail et donnez-lui un nom plus clair :

mv docs/guide-backup.txt archived-guide.txt

Affichez les deux emplacements :

ls docs
ls

Vous devriez voir guide.txt dans docs et archived-guide.txt dans le répertoire courant.

rm supprime définitivement un fichier indiqué ; le terminal ne dispose normalement d’aucune corbeille. Supprimez uniquement le fichier de notes destiné à être supprimé :

rm logs/notes.txt

Affichez à nouveau le répertoire pour rendre la suppression observable :

ls logs

notes.txt ne doit plus apparaître. Le guide original et sa copie déplacée sont toujours disponibles, tandis que le seul fichier explicitement désigné comme supprimable a disparu.

Travailler plus rapidement avec les raccourcis du terminal

Dans cette étape, vous allez pratiquer quatre commandes de contrôle du terminal qui réduisent la saisie et permettent de reprendre le contrôle lorsqu’une commande continue de s’exécuter.

Commencez par entrer dans le répertoire des documents :

cd /home/labex/project/file-basics/workspace/docs

Exécutez une commande que vous allez réutiliser :

cat guide.txt

Appuyez une fois sur la flèche vers le haut. La commande précédente cat guide.txt doit réapparaître à l’invite. Appuyez sur Entrée pour l’exécuter à nouveau. Le rappel de commande évite de la saisir de nouveau et vous permet toujours de modifier la ligne rappelée avant son exécution.

Saisissez ensuite cat g sans appuyer sur Entrée, puis appuyez sur Tabulation. Comme seul guide.txt correspond, le shell devrait compléter le nom du fichier. Appuyez sur Entrée pour exécuter la commande complétée.

Lancez maintenant une commande qui attend indéfiniment :

tail -f /dev/null

tail -f suit un fichier et attend l’arrivée de nouvelles données. /dev/null ne fournit jamais de lignes utiles ; la commande semble donc rester silencieuse. Appuyez sur Ctrl+C pour envoyer une interruption et revenir à l’invite. Il s’agit de la première réaction habituelle lorsqu’une commande au premier plan doit être arrêtée.

Appuyez sur Ctrl+L pour effacer l’ancienne sortie affichée à l’écran. Comme clear, cette combinaison ne supprime ni les fichiers ni l’historique des commandes.

Après être revenu à l’invite, créez un marqueur de fin :

echo "Shortcuts practiced" > /home/labex/project/file-basics/shortcuts-complete.txt
cat /home/labex/project/file-basics/shortcuts-complete.txt

Ce marqueur confirme que vous avez réussi à reprendre l’invite après la pratique interactive.

Résumé

Vous avez appris comment le répertoire de travail et les chemins contrôlent les opérations sur les fichiers. Vous avez navigué avec des chemins absolus et relatifs, inspecté les entrées masquées et les métadonnées, créé une arborescence de répertoires et des fichiers texte, sélectionné des noms avec des caractères génériques et comparé la copie, le déplacement et la suppression définitive. Vous avez également pratiqué le rappel de commandes, la complétion avec Tabulation, Ctrl+C et Ctrl+L. Le prochain laboratoire vous apprendra à trouver une aide fiable lorsqu’une commande ou une option inconnue se présente.