Fichiers spéciaux
Dans UNIX tout est basé sur les fichiers, mais tous les fichiers ne sont pas pareils.
Fichiers cachés
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 :
touch .cachecacheRefaites 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 :
touch monfichier.txt
mv monfichier.txt .monfichier.txt⚠️ 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.
Liens
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
inodeSoft 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 (ext3par exemple). Dans ce système les données sur le disque sont représentés par des structures qui s'appellentinodes. 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 uninodeet l'emplacement dans l'arborescence logique.soft link: Un lien vers un autre fichier, qui lui même pointe vers uninode.

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.
Hard links
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 :
touch hello.txtOuvrez l'éditeur de votre choix et rédiger un peu de texte.
Ensuite créez un lien avec la commande ln :
# Syntaxe : ln [fichier d'origine] [nom du lien]
ln hello.txt copy.txtSi 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:
rm hello.txtFaites un ls -l, vous verrez toujours copy.txt parce que le inode existe toujours.
Supprimez copy.txt. Maintenant le inode est supprimé aussi.
Soft links
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
touch hello.txtEnsuite, nous créons un soft link vers ce fichier :
# Syntaxe : ln -s [fichier d'origine] [nom du lien]
ln -s hello.txt copy.txtLa différence est qu'on voit la cible de notre lien avec ls -l :
total 0
lrwxrwxrwx 1 hetic hetic 9 déc. 15 14:00 copy.txt -> hello.txt
-rw-r--r-- 1 hetic hetic 0 déc. 15 13:59 hello.txtSupprimez hello.txt :
rm hello.txtSi 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 :
hetic@55125d688a1a:/tmp/test$ cat copy.txt
cat: copy.txt: Aucun fichier ou dossier de ce typeHard vs Soft ?
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.confOn 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:
/var/www$ ln –s /mnt/data/www/surfsup.com surfsup.com📂 A noter, un lien (hard ou soft) peut aussi pointer vers un repertoire !
Mis à jour