Fichiers spéciaux
Dernière mise à jour
Dernière mise à jour
Dans UNIX tout est basé sur les fichiers, mais tous les fichiers ne sont pas pareils.
Nous avons déjà vus des fichiers cachés, qui commence par un point (.
), par exemple le fichier .bashrc
Comment rendre un fichier caché ?
Il suffit de le nommer avec un point comme premier caractère :
Refaites un ls
et vous ne verrez pas le fichier. Faites un ls -a
et vous verrez votre fichier !
Si vous avez déjà un fichier, et vous voulez le cacher, il suffit de le renommer :
Attention Rendre un fichier caché ne le protège pas contre l'accès non-autorisé. Si quelqu'un trouve le fichier caché il pourrait toujours l'ouvrir ou modifier. Nous allons traiter la question d'accès plus tard.
Un lien dans UNIX est comme un raccourci sur Windows, mais bien plus puissant et utile.
Un lien se comporte comme un fichier, mais est juste une sorte de raccourci vers un autre fichier qui se trouve ailleurs dans l'arborescence globale. On peut lire ou modifier le lien comme s'il était le vrai ficher.
Pourquoi crée des liens ?
Parfois on aimerait référencer le même fichier à plusieurs endroits dans l'arborescence. Par exemple, le même fichier de configuration qui est partagé entre plusieurs services. Au lieu de copier plusieurs fois le fichier, j'en crée un seul, puis je crée plusieurs liens qui pointent vers le fichier d'origine. Toute modification du fichier sera pris en compte par tous les services qui l'utilisent.
Il y a deux sortes de liens dans UNIX:
Hard links : 2 fichiers pointent vers le même inode
Soft links : Un lien qui pointe vers un autre fichier
Fichier ? inode ? lien ? Quelle différence ?
inode
: Vous avez peut-être remarqué que Unix utilise un autre format de stockage que Windows (ext3
par exemple). Dans ce système les données sur le disque sont représentés par des structures qui s'appellent inodes
. Cette structure contient des informations comme l'emplacement sur le périphérique physique, les droits sur le fichier, etc.
fichier
: Un fichier donc fait le lien entre un inode
et l'emplacement dans l'arborescence logique.
soft link
: Un lien vers un autre fichier, qui lui même pointe vers un inode
.
L'avantage de cette structure est que je peux déplacer un fichier dans l'arborescence (par exemple, mettre le fichier hello.txt
dans un autre répertoire), et ça ne ferait juste une modification dans le fichier. Le inode
ne bouge pas et aucune données ne sont copiés ni déplacées.
Un hard link est en effet un deuxième fichier qui pointe vers le même inode
.
Si je modifie soit hello.txt
soit copy.txt
, la modification sera visible dans les deux fichiers.
Si je supprime hello.txt
, le inode
continue d'exister. C'est seulement au moment où je supprimer copy.txt
que le inode
est supprimé et la place sur le stockage est libérée.
Essayons :
Créez un nouveau fichier :
Ouvrez l'éditeur de votre choix et rédiger un peu de texte.
Ensuite créez un lien avec la commande ln
:
Si vous faites un ls -l
, vous verrez vos 2 fichiers.
Apportez une modification à copy.txt
. Ouvrez hello.txt
, vous verrez votre modification !
Supprimez hello.txt
:
Faites un ls -l
, vous verrez toujours copy.txt
parce que le inode
existe toujours.
Supprimez copy.txt
. Maintenant le inode
est supprimé aussi.
Un soft link pointe plutôt vers un autre fichier.
La différence est que le soft link ne connaît rien du inode
. Il dépend entièrement du fichier d'origine. Il agit comme le fichier même (on peut l'ouvrir, modifier, etc), mais si on supprime le fichier d'origine, le lien devient non-valable.
Essayons. Créez de nouveau votre fichier hello.txt
Ensuite, nous créons un soft link vers ce fichier :
La différence est qu'on voit la cible de notre lien avec ls -l
:
Supprimez hello.txt
:
Si vous faites ls -l
vous verrez que le lien est indiqué en rouge, il n'est plus valable. Si vous essayez lister les contenus de copy.txt
il y a une erreur :
On utilise plus souvent les « soft links » pour une configuration. Imaginons le scenario suivant :
Un logiciel attend un fichier de configuration dans /etc/world/world.conf
On crée un lien vers la configuration :
world.conf -> world.v1.conf
Demain, je veux essayer une nouvelle configuration. J’enlève l’ancien lien à world.v1.conf
(sans supprimer ce dernier), et je crée un nouveau vers la v2 :
world.conf -> world.v2.conf
Mon serveur Apache va servir tous les sites-web qui se trouvent dans /var/www
Sauf, il n’y a pas assez de place sur le volume principal. On va plutôt stocker les données des sites sur un autre volume monté sur /mnt/data/www
Pour ajouter un site à Apache, il suffit d’aller dans /var/www
, puis créer une lien vers un dossier dans /mnt/data/www
Exemple:
A noter, un lien (hard ou soft) peut aussi pointer vers un repertoire !