Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Linux
  3. Manipulation de fichiers
Extrait - Linux Principes de base de l'utilisation du système (8e édition)
Extraits du livre
Linux Principes de base de l'utilisation du système (8e édition) Revenir à la page d'achat du livre

Manipulation de fichiers

Introduction

À l’issue de ce chapitre, le lecteur sera capable de se déplacer dans l’arborescence Linux ainsi que de créer, déplacer et supprimer des fichiers et des répertoires.

Noms des fichiers et des répertoires

Les noms des fichiers et des répertoires sous Linux répondent à certaines règles d’écriture.

Description du contenu

En premier lieu, un nom de fichier doit fournir des indications sur son contenu ; ceci est valable sur tous les systèmes d’exploitation.

Pour un professeur, il est plus facile de retrouver les notes d’histoire de la classe 6e A du premier trimestre 2022 dans le fichier nommé notes.histoire. classe.6A.trim.1.an.2022 que dans le fichier qui porte le nom glop.

Syntaxe

La casse des caractères (majuscules/minuscules) est déterminante dans la syntaxe des noms de fichiers. Ainsi, les fichiers glop, Glop et GLOP sont distincts. 

Seuls les caractères alphanumériques (de a à z, A à Z et 0 à 9) ainsi que quelques autres (_, ., @, -, +) devraient être utilisés dans les noms de fichiers.

Certains caractères ont une signification spéciale sur la ligne de commande ; ceux-ci seront détaillés dans le chapitre consacré au Shell Bash. Par exemple, supprimer a* ne signifie pas effacer le fichier nommé a* mais tous les fichiers commençant par un a.

En fait, tous les caractères peuvent être utilisés dans les noms de fichiers à l’exception de /, caractère de séparation des noms de répertoires...

Types de fichiers

On entend par fichier, sous Unix, la structure contenant des données utilisateur.

Les fichiers standards sont constitués d’une suite de caractères ou flux d’octets dont le format n’est pas imposé par le système mais par les applications.

L’analogie entre octet et caractère est due au fait qu’un caractère est codé avec un octet ; la taille d’un fichier peut donc être donnée indifféremment en octets ou en caractères.

Les répertoires sont des fichiers particuliers, pouvant contenir plusieurs autres fichiers (répertoires ou non). Cela permet d’organiser les fichiers de façon hiérarchique et arborescente.

Les termes "répertoire" et "fichier", utilisés sous Linux, sont équivalents à "dossier" et "document" employés habituellement sous Windows et Mac OS.

Il existe sept types de fichiers sous Linux, les trois plus importants étant :

  • fichier standard ou ordinaire ;

  • répertoire ;

  • lien symbolique ou logique (soft link).

Les quatre autres types de fichiers, manipulés principalement en administration ou en programmation système, sont :

  • fichier pointant vers un périphérique de type "bloc" (fichiers présents dans /dev) ;

  • fichier pointant vers un périphérique de type...

Chemins

Connaître le nom d’un fichier (ou d’un répertoire) n’est pas suffisant pour accéder à celui-ci ; un même nom peut être en effet associé à plusieurs fichiers dans des répertoires différents.

La référence pleinement qualifiée d’un fichier est appelée "chemin" et indique le répertoire dans lequel figure le fichier. Les noms de répertoires et de fichiers sont séparés pas un / (slash) dans les chemins.

Attention, sur un système Windows, le séparateur entre les noms de fichiers et de répertoires est le \ (antislash).

Il existe trois types de chemins : absolus, relatifs et personnels. Ils peuvent être utilisés indifféremment dans la façon de nommer des fichiers sur la ligne de commande.

Exemple d’arborescence

images/0501arbo.png

1. Chemins absolus

Un chemin absolu se base sur la racine de l’arborescence Linux. Tout chemin absolu commence donc par /.

Quel que soit l’endroit actuel où l’on se trouve, on pourra référencer le fichier notes de l’exemple précédent avec le chemin /home/willy/notes.

Exemple

[willy]$ ls /home/willy/notes 
/home/willy/notes 

2. Chemins relatifs

Les chemins relatifs dépendent du répertoire courant dans lequel se trouve l’utilisateur.

Sachant que chaque répertoire...

Exploration de l’arborescence

1. pwd

La commande pwd (print working directory) affiche le chemin absolu du répertoire actuel dans lequel se trouve l’utilisateur :

[willy]$ pwd 
/home/willy 

2. cd

La commande cd (change directory) permet de changer de répertoire courant. Sur la ligne de commande, on indique en argument le répertoire vers lequel on désire aller :

[willy]$ pwd 
/home/willy 
[willy]$ cd /var/spool 
[willy]$ pwd  
/var/spool 
[willy]$ cd .. 
[willy]$ pwd 
/var 

Dans cet exemple la commande permettant de "remonter" vers le répertoire parent est cd .. et non cd.. (sans espace) comme sous DOS : le caractère d’espacement est obligatoire entre la commande et son argument.

En outre, le chemin du fichier (ou du répertoire) en argument peut être absolu, relatif ou personnel ; ceci est valable pour toutes les commandes.

Appelée sans argument, la commande cd renvoie l’utilisateur dans son répertoire personnel :

[willy]$ pwd 
/var 
[willy]$ whoami 
willy 
[willy]$ cd 
[willy]$ pwd 
/home/willy 

Enfin, la syntaxe particulière suivante permet de retourner dans le répertoire précédent :

[willy]$ pwd 
/home/willy 
[willy]$ cd - 
/var 
[willy]$ pwd 
/var 

Il ne faut pas confondre le répertoire "parent" (..), situé au-dessus du répertoire courant dans l’arborescence Linux, avec le répertoire "précédent", qui correspond au répertoire dans lequel se trouvait l’utilisateur précédemment.

3. ls

La commande ls permet de lister le contenu de répertoires. Sans option, l’affichage suit l’ordre alphabétique des noms de fichiers.

Arguments

Appelée sans argument, ls se contente d’afficher les fichiers présents dans le répertoire courant :

[willy]$ cd 
[willy]$ pwd 
/home/willy 
[willy]$ ls 
couleurs formes notes 

Un ou plusieurs chemins peuvent être spécifiés sur la ligne de commande. Si le chemin correspond à un répertoire, les fichiers qu’il contient sont affichés ; si c’est un fichier, c’est le nom de celui-ci qui est affiché :

[willy]$ pwd 
/home/willy 
[willy]$ ls notes...

Répertoires

1. mkdir

La commande mkdir (make directory) permet de créer des répertoires :

[willy]$ ls -l 
total 12 
drwxr-xr-x  2 willy tech 4096 jun  1 10:42 couleurs 
drwxr-xr-x  2 willy tech 4096 jun  1 10:43 formes 
-rw-r--r--  1 willy tech   62 mai 26 22:55 notes 
[willy]$ mkdir fleurs 
[willy]$ ls -l 
total 16 
drwxr-xr-x  2 willy tech 4096 jun  1 10:42 couleurs 
drwxr-xr-x  2 willy tech 4096 jun  1 11:30 fleurs 
drwxr-xr-x  2 willy tech 4096 jun  1 10:43 formes 
-rw-r--r--  1 willy tech   62 mai 26 22:55 notes 

Il est possible d’indiquer plusieurs arguments sur la ligne de commande :

[willy]$ ls 
couleurs  fleurs  formes  notes 
[willy]$ mkdir nombres fleurs/vivaces 
[willy]$ ls . fleurs 
.: 
couleurs  fleurs  formes  nombres  notes 
 
fleurs: 
vivaces 

Il faut ajouter l’option -p (parents) pour créer une série de répertoires imbriqués :

[willy]$ mkdir -p saisons/hiver/janvier 
[willy]$ ls -R 
.: 
couleurs fleurs formes nombres notes saisons 
 
./couleurs: 
bleu  jaune  rose 
 
./fleurs: 
vivaces 
 
./fleurs/vivaces: ...

Fichiers

1. touch

La commande touch change les dates de dernier accès et de dernière modification d’un fichier existant :

[willy]$ ls -l notes 
-rw-r--r--  1 willy tech 62 mai 26 22:55 notes 
[willy]$ touch notes 
[willy]$ ls -l notes 
-rw-r--r--  1 willy tech 62 jun  1 11:37 notes 

Plusieurs options, détaillées dans la page de manuel électronique (cf. chapitre Documentation, section Manuel), permettent de préciser le nouvel horodatage du fichier.

Lorsqu’on emploie cette commande avec un nom de fichier inexistant en argument, un fichier portant ce nom est créé et ne contient aucune donnée :

[willy]$ ls -l 
total 12 
drwxr-xr-x  2 willy tech 4096 jun  1 10:42 couleurs 
drwxr-xr-x  2 willy tech 4096 jun  1 10:43 formes 
-rw-r--r--  1 willy tech   62 jun  1 11:37 notes 
[willy]$ touch nouvfic 
[willy]$ ls -l  
total 12 
drwxr-xr-x  2 willy tech 4096 jun  1 10:42 couleurs 
drwxr-xr-x  2 willy tech 4096 jun  1 10:43 formes 
-rw-r--r--  1 willy tech   62 jun  1 11:37 notes 
-rw-r--r--  1 willy tech    0 jun  1 11:38 nouvfic 

2. cp

La copie de fichiers est effectuée avec le programme cp ; la syntaxe principale de cette commande est :

cp [-R] <source ...> <cible> 

Il est possible de copier un fichier ordinaire dans un nouveau répertoire ou sous un nouveau nom, ou encore les deux en même temps ; par exemple :

[willy]$ ls -R 
.: 
couleurs  formes  notes  nouvfic 
 
./couleurs: 
bleu jaune rose 
./formes: 
rond  triangle 
[willy]$ cp notes losange 
[willy]$ cp couleurs/jaune formes  
[willy]$ cp formes/triangle courbe 
[willy]$ ls -R 
.: 
couleurs  courbe  formes  losange  notes  nouvfic 
 
./couleurs: 
bleu  jaune  rose 
 
./formes: 
jaune  rond  triangle...

Organisation physique des fichiers sous Linux

Même si cette étape paraît rébarbative dans une approche utilisateur de Linux, l’apprentissage de l’organisation physique des systèmes de fichiers est primordial. Il permet une bonne compréhension de la notion de liens ainsi qu’une bonne gestion des droits d’accès.

Un système de fichiers physique peut être séparé en deux parties distinctes :

  • la table des inodes ;

  • les blocs de données.

Tout fichier est constitué d’un inode contenant les informations relatives au fichier et d’un certain nombre de blocs de données contenant les données utilisateur stockées dans le fichier.

1. Inodes

Chaque fichier est représenté par une structure appelée inode (index node). Ces inodes sont regroupés dans une table et sont identifiables par un numéro.

L’inode contient la totalité des informations sur le fichier, sauf son nom :

  • Type de fichier : - (ordinaire), d (répertoire), l (lien symbolique), b (bloc), c (caractère), p (tube), s (socket).

  • Mode ou droits d’accès au fichier.

  • Nombre de liens physiques (hard links) : correspond au nombre de références, c’est-à-dire au nombre de noms pour ce même fichier.

  • UID ou identifiant de l’utilisateur propriétaire.

  • GID ou identifiant du groupe propriétaire....

Gestionnaires de fichiers

Il existe sous Linux de nombreux outils regroupant de façon plus ou moins ergonomique et conviviale toutes les fonctionnalités mises en œuvre par les commandes énoncées précédemment.

1. Midnight Commander

Midnight Commander est appelé par la commande mc en ligne de commande. C’est un gestionnaire de fichiers complet en environnement texte qui rappellera l’interface utilisateur d’un produit similaire existant sous DOS.

Voici un exemple d’affichage :

images/RI05-01.png

La touche [Tab] permet de basculer d’une moitié d’écran à l’autre (gauche-droite) tandis que les touches de fonction [F1] à [F10] invoquent les commandes indiquées en bas d’écran.

2. Dolphin, Nautilus

En console graphique, les gestionnaires de fichiers les plus répandus sont Dolphin (anciennement Konqueror) et Nautilus.

Le choix d’un tel outil est subjectif et dépend généralement de la distribution et de l’environnement de bureau utilisés.

Une fenêtre Dolphin :

images/8RI05-01.png

Un affichage possible de Nautilus :

images/8RI05-02.png

Consultation de fichiers

1. cat

cat affiche à l’écran le contenu des fichiers passés en argument sur la ligne de commande :

[nicolas]$ cat /etc/motd  
Bienvenue sous Linux 
Vous êtes connecté sur la machine doe.reso.local 

2. more, less

La commande Unix more permet aussi l’affichage du contenu de fichiers texte à l’écran. Par contre, son affichage se fait page par page ; les touches du clavier utiles avec more sont :

[Entr]

Fait défiler le texte ligne par ligne.

[Espace]

Fait défiler le texte page par page.

[q]

Quitte le programme.

Cet exemple montre l’indicateur présent en bas d’écran :

[nicolas]$ more /etc/services  
ssh             22/udp                  # SSH Remote Login Protocol 
telnet          23/tcp 
telnet          23/udp                  # 24 - private mail system 
smtp            25/tcp      mail 
smtp            25/udp      mail 
time            37/tcp      timserver ...

Exercices

Exercice 1

Téléchargez une image de votre choix depuis Internet puis déplacez-la dans un sous-répertoire de /tmp portant votre prénom.

Solution

Utilisez un navigateur web pour télécharger une image et enregistrez-la dans le répertoire proposé par défaut :

images/05RI04N.png

On constate que le fichier a été enregistré dans un sous-répertoire Téléchargements du répertoire personnel de l’utilisateur.

Une fois le répertoire destination créé comme demandé dans l’énoncé, il suffit d’employer la commande mv adéquate pour déplacer le fichier :

[nicolas]$ cd 
[nicolas]$ pwd 
/home/nicolas 
[nicolas]$ ls Téléchargements 
tux.jpg 
[nicolas]$ mkdir /tmp/nicolas 
[nicolas]$ mv Téléchargements/tux.jpg /tmp/nicolas 
[nicolas]$ ls Téléchargements 
[nicolas]$ ls /tmp/nicolas 
tux.jpg 

Exercice 2

Supprimez le fichier et le sous-répertoire créés dans l’exercice précédent.

Solution

Il n’est pas possible de supprimer directement le sous-répertoire créé dans /tmp avec la commande rmdir car il n’est pas vide.

En revanche, la commande rm avec l’option -R ("récursif") permet de le supprimer ainsi que tous les fichiers qu’il...