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
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 :
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 :
Un affichage possible de Nautilus :
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 :
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...