Opérations sur les fichiers

Dans ce chapitre on définira la nature d’un fichier Linux par un numéro d’inode. On identifiera aussi la nature d’un dossier. On verra comment réaliser différentes opérations sur les fichiers et répertoires comme la création, la copie, le déplacement, le renommage, la création de liens physiques et de liens symboliques.

1. Notion d’inode

Un inode est un numéro unique qui référence un ou plusieurs fichiers dans le système de fichier.

Ce numéro est l’élément de localisation du fichier sur le système de fichiers.

L’inode représente la réalité physique du fichier auquel un ou des noms (des emplacements sur le système de fichiers) correspondent.

2. Commande ls

La commande ls liste les fichiers (par défaut le répertoire courant)

ls -lah /etc/
total 1,4M
drwxr-xr-x. 122 root root   8,0K 11 jan 19:00 .
drwxr-xr-x.  18 root root   4,0K 11 jan 19:00 ..
-rw-r--r--.   1 root root     16  8 déc 20:44 adjtime
-rw-r--r--.   1 root root   1,5K  7 jun  2013 aliases
-rw-r--r--.   1 root root    12K  8 déc 20:48 aliases.db
drwxr-xr-x.   2 root root   4,0K  8 déc 21:04 alternatives

Elle donne des attributs POSIX :

  1. type de fichier : - fichier, d répertoire, l lien symbolique
  2. droits : -, r, w et x, propriétaire, groupe et autres.
  3. nombre de liens physiques
  4. propriétaire, ici root
  5. groupe propriétaire, ici root
  6. taille du fichier, ici en octets
  7. date de modification,
  8. nom du fichier.

La commande ls -l affiche par défaut une liste triée par ordre alphabétique. Les commandes dir et vdir sont des variantes de ls.

Options de la commande ls :

  • -r : tri inversé
  • -t : tri sur la date de modification (du plus récent au plus ancien)
  • -u : tri sur la date d’accès avec l’option -lt
  • -c : tri sur la date de changement de statuts des fichiers avec l’option -lt
  • -l : présentation tabulaire détaillée
  • -1 : présentation en liste continue
  • -h : avec l’option -l affiche les valeurs de poids de fichier avec un multiplicateur (K, M, G, …)
  • -i : affiche le numéro d’inode
  • -Z : Affiche le contexte SeLinux

On trouvera encore plus d’options et détails dans la page man: man ls.

3. Création d’un répertoire

Un répertoire ou un dossier est une liste de descriptions de fichiers. Du point de vue du système de fichiers, il est traité comme un fichier dont le contenu est la liste des fichiers référencés. Un répertoire a donc les mêmes types de propriétés qu’un fichier comme le nom, la taille, la date, les droits d’accès et les divers autres attributs. (Wikipedia)

On peut définir les droits avec l’option -m de mkdir. Une autre option couramment utilisée et utile de mkdir est -p qui crée les sous-répertoires quand c’est nécessaire.

Par exemple :

mkdir labs/ex1/script1

mkdir: impossible de créer le répertoire `labs/ex1/script1`: Aucun fichier ou répertoire de ce type
mkdir -p labs/ex1/script1
tree labs
labs
└── ex1
    └── script1

2 directories, 0 files

4. Suppression des répertoires

On utilise soit rmdir soit rm -r pour supprimer les répertoires. En tant que root, vous devrez peut-être à spécifier l’option -f pour forcer la suppression de tous les fichiers.

rmdir supprime un répertoire vide alors que rm -r supprime un répertoire et son contenu.

Cet exemple illustre la suppression de tous les fichiers et sous-répertoires et laisse le répertoire ex1 vide.

rm -rf labs/ex1/*
tree labs
labs
└── ex1

1 directory, 0 files

Cet exemple illustre la suppression de tous les fichiers et sous-répertoires y compris ex1

rm -rf labs/ex1
tree labs
labs

On supprime tous les fichiers et sous-répertoires y compris ex1

5. Commande touch

touch est une commande qui permet de créer et de modifier des attributs de fichiers.

Syntaxe :

  • touch [options] fichier(s)
  • Le fichier est créé s’il n’existait pas. Vous pouvez également changer la date d’accès avec l’option -a, la date de modification avec -m; l’option -r copie les attributs de date d’un autre fichier.

Exemples :

Créer deux nouveaux fichiers fichier1.txt et fichier2.txt :

touch labs/fichier1.txt labs/fichier2.txt
ls -i labs
69308775 fichier1.txt  69308776 fichier2.txt

Copier les attributs de date de /etc/hosts sur fichier2.txt :

ls -l /etc/hosts
-rw-r--r--. 1 root root 83 10 déc 12:11 /etc/hosts
touch labs/fichier2.txt -r /etc/hosts
ls -l labs/fichier2.txt
-rw-rw-r--. 1 francois francois 0 10 déc 12:11 labs/fichier2.txt

6. Commande cp

Syntaxe :

  • cp [options] fichier1 fichier2
  • cp [options] fichiers répertoire

Il est important de noter que cp fichier1 fichier2 crée une nouvelle copie de fichier1 et laisse fichier1 inchangé.

Illustration : fichier1.txt avec l’inode 69308775 est copié sur fichier3.txt, en dupliquant les données sur un nouveau bloc et en créant une nouvelle inode 69308777 pour fichier3.txt.

cp labs/fichier1.txt labs/fichier3.txt
ls -i labs
69308775 fichier1.txt  69308776 fichier2.txt  69308777 fichier3.txt

On ira lire attentivement la page man de la commande cp :

man cp

7. Copie récursive

On peut également copier plusieurs fichiers dans un répertoire, à partir d’une liste ou en utilisant des caractères génériques.

Exemples :

Pour copier tout le contenu de labs dans un dossier bak :

mkdir labs/rep1
cp -r labs bak
tree bak labs
bak
├── fichier1.txt
├── fichier2.txt
├── fichier3.txt
└── rep1
labs
├── fichier1.txt
├── fichier2.txt
├── fichier3.txt
└── rep1

2 directories, 6 files
ls bak
fichier1.txt  fichier2.txt  fichier3.txt  rep1

Notons que le dossier de destination bakn’existait pas et a été créé.

Si on recommence l’opération alors que la destination existe déjà c’est le dossier source lui-même qui est copié.

cp -r labs bak
ls bak
fichier1.txt  fichier2.txt  fichier3.txt  labs  rep1
tree bak
bak
├── fichier1.txt
├── fichier2.txt
├── fichier3.txt
├── labs
│   ├── fichier1.txt
│   ├── fichier2.txt
│   ├── fichier3.txt
│   └── rep1
└── rep1

3 directories, 6 files

8. Commande mv

Syntaxe :

mv [options] anciennom nouveaunom
mv [options] source destination
mv [options] source répertoire

La commande mv peut à la fois déplacer et renommer les fichiers et les répertoires.

Si anciennom est un fichier et nouveaunom un répertoire, le fichier anciennom est déplacé dans ce répertoire.

Si la source et la destination sont sur le même système de fichiers, alors le fichier n’est pas copié, mais les informations de l’inode sont mises à jour pour tenir compte du nouveau chemin.

Les options les plus courantes de mv sont -f pour forcer l’écrasement et -i pour demander confirmation à l’utilisateur.

9. Renommer et déplacer

Vérifier les valeurs inode de ces fichiers avec ls -i.

Renommer le répertoire bak en bak2

mv bak bak2

Déplacer le bak2 dans le répertoire labs

mv bak2 labs

Renommer le répertoire bak2 en bak

mv labs/bak2 labs/bak

10. Liens physiques

Un lien physique est un nom supplémentaire pour un même inode. Ainsi, le nombre de références s’accroît de un à chaque nouveau lien physique créé.

Dans la liste suivante, notez que le nombre de références est de 2 et que les deux fichiers ont la même taille (ainsi que la même valeur inode, ce que vous pouvez vérifier avec ls -i). Dans les faits, ces deux fichiers sont parfaitement identiques.

Les liens physiques ne peuvent être créés que sur le même système de fichier, une même partition.

ln labs/fichier1.txt labs/fichier5.txt
ls -li labs
total 0
69308779 -rw-rw-r--. 2 francois francois 0 21 fév 07:04 fichier1.txt
69308780 -rw-rw-r--. 1 francois francois 0 21 fév 07:04 fichier2.txt
69308781 -rw-rw-r--. 1 francois francois 0 21 fév 07:04 fichier3.txt
69308779 -rw-rw-r--. 2 francois francois 0 21 fév 07:04 fichier5.txt
 3739518 drwxrwxr-x. 2 francois francois 6 21 fév 07:04 rep1

11. Liens symboliques

Un lien symbolique vers un fichier ou un répertoire crée un nouvel inode qui pointe vers le même bloc de données.

cd labs
ln -s fichier1.txt fichier4.txt
cd ..
ls -li labs
total 0
69308779 -rw-rw-r--. 2 francois francois  0 21 fév 07:04 fichier1.txt
69308780 -rw-rw-r--. 1 francois francois  0 21 fév 07:04 fichier2.txt
69308781 -rw-rw-r--. 1 francois francois  0 21 fév 07:04 fichier3.txt
69308774 lrwxrwxrwx. 1 francois francois 12 21 fév 07:21 fichier4.txt -> fichier1.txt
69308779 -rw-rw-r--. 2 francois francois  0 21 fév 07:04 fichier5.txt
 3739518 drwxrwxr-x. 2 francois francois  6 21 fév 07:04 rep1

Les liens symboliques peuvent pointer vers des fichiers ou répertoires présents sur un autre système de fichier.

echo $(date) > labs/fichier1.txt
cat labs/fichier4.txt
dim fév 21 07:22:01 CET 2017

12. Commande rm

La commande rm permet de supprimer un fichier du système de fichiers. La commande rm peut disposer d’alias selon les distributions. Enfin, cette commande est étudiée et améliorée dans la section Scripts Shell de l’ouvrage.

man rm

13. GNU Midnight Commander

GNU Midnight Commander est utilitaire de gestion de fichiers en console texte. Son inspiration vient du célèbre outil DOS Norton Commander.

Sous Centos :

sudo yum -y install mc

Sous Debian / Ubuntu :

sudo apt-get -y install mc