Les liens

Liens symboliques et réels

Read in English

27. mai 2011 - 14:12 — AvvA

Ce petit article a pour but de vulgariser ce que sont les liens réels et symboliques, si vous rechercher une définition plus proche de la réalité informatique je donne mes références sur la fin. Le but est ici de comprendre le principe.

# Liens réels

# Liens symboliques

# Conclusion

# Pages Similaires

# Références

# Utilitaires

Pour comprendre le concept de lien, il faut d'abord comprendre comment est constitué un fichier.

En simplifiant, on peut dire qu'une partition de disque dur (C:, D:, ...) est scindée en 2 parties : L'index et les données.

A chaque fois que vous écrivez un fichier sur l'une des partitions :

- on note dans son index (Master File Table) l'endroit où est écrit le bloc de données, le(s) nom(s) de fichier(s) et le(s) chemin(s) qui lui sont attribués, ainsi que toute autre information relative, comme ses attributs (système, caché, lecture seule...), ses paramètres de sécurité, etc...

- le contenu du fichier est écrit dans la partie données, on l'appelle bloc de données.

Lorsque vous ouvrez un fichier, celui-ci fait appel à l'index pour savoir où se trouvent ses données.

Avec le système de fichier NTFS, le lien entre l'index et l'utilisateur, concrétisé sous nos yeux par un nom de fichier associé à une icône, est soit un Lien réel soit un Lien symbolique, ainsi tous les fichiers que vous voyez dans l'explorateur de fichiers sont des liens soit réels soit symboliques.

Liens Réels

Le lien réel est celui que tout le monde utilise sans le savoir, à chaque fois que vous enregistrez un fichier vous créez un lien réel vers les données contenues dans ce fichier. On peut assigner jusqu'à 1023 noms à ce fichier avec une localisation différente pour chacun, mais toujours sur la même partition.

Image

Tous les chemins menant à Rome et Rome étant toujours à la même position géographique : chaque panneau indiquant Rome est une référence vers une même position géographique. Suivant que vous soyez au Nord ou au Sud de l'Italie le chemin sera différent, mais la destination identique.

On peut ainsi rapprocher les panneaux indiquant Rome aux références d'emplacement dans l'index, et Rome au bloc de données.

Concrètement, quelle est l'utilité d'un lien réel ?

Si vous avez 50 dossiers de projets sur un même disque dur, que chacun d'eux doit contenir présentation.txt car c'est ce qui présente votre entreprise avec un contenu strictement identique pour chaque projet (l'entreprise ne changeant pas d'adresse, etc...) :

Plutôt que de copier-coller ce fichier 50 fois dans chaque dossier de projet, vous créez 50 liens réels vers ce même bloc de données qui contient votre texte, ainsi, plutôt qu'occuper 50 fois la taille de présentation.txt, cela occupera 1 fois sa taille.

L'autre avantage est que si vous éditez n'importe lequel de ces fichiers (liens réels), vu que tous font référence au même bloc de données, l'ensemble des Liens réels sont "mis à jour" d'un seul coup. Ils ne sont pas modifiés, ils pointent simplement vers le même bloc de données, donc si celui-ci change, ouvrir n'importe quel lien (liens réels) vers ce bloc de données accèdera au nouveau contenu.

Les droits étant définis sur le bloc de données (et non pas sur chacun de ses chemins pour y accéder), un changement sur un lien réel sera répercuté sur tous les autres. Ainsi, si vous voulez que seul l'utilisateur "Boss" puisse modifier ce fichier, vous n'aurez à faire la manipulation qu'une seule fois.

Donc, résumons :

    • Lorsque vous créez un fichier et le sauvez, les données sont inscrites sur le disque dur, et l'index référence ce fichier 1 fois.

    • Si vous copiez-collez ce fichier, les données sont de nouveau inscrites sur le disque dur à un autre endroit que le fichier original, et une nouvelle référence est indexée.

    • Si vous créez un hard link vers ce fichier, rien n'est écrit dans la partie données du disque dur, et le nouveau chemin est ajouté à l'index.

Ce qui ressemblera grossièrement à :

Liens symboliques

C'est à peu près le même principe, mais au lieu de référencer le nouveau chemin vers le bloc de données dans la partie fichier de l'index (début de la MFT), on stocke les informations de redirection dans la partie Reparse Point de l'index (fin de la MFT).

Les liens symboliques permettent de lier des emplacements réseaux ou d'autres partitions, et pour un chemin donné leur nombre est limité à 31. ils ne peuvent pas posséder d'attribut spéciaux.

Un lien symbolique est un "faux fichier" ou un "faux dossier" qui ne peut que renvoyer vers un autre fichier ou dossier existant. Ceci signifie qu'un dossier ou fichier indiqué comme un lien symbolique ne peut pas contenir de données, il renvoit uniquement à un autre dossier ou fichier.

Image

En ouvrant la porte de votre bureau à New York, vous entreriez dans le bureau de Rome.

Les liens symboliques sont des redirections transparentes : en ouvrant votre fichier à New York vous visualisez le contenu inscrit à Rome.

Toute modification du fichier cible sera vue par l'ensemble des personnes ayant accès à ce fichier, où qu'elles soient sur le réseau.

Quelle utilité ?

Pour reprendre l'exemple des 50 projets, il faut imaginer que le disque dur qui contient les 50 liens réels est sur le réseau, et que les groupes qui travaillent sur les projets sont géographiquement éparpillés.

Dans ce cas, chaque participant créera un lien symbolique sur son disque dur, par projet auquel il participe et qui ciblera le dossier situés sur le réseau. Ainsi, en explorant leurs fichiers ils auront un dossier qui une fois ouvert montrera les fichiers situés en ligne et permettra de travailler dessus de façon transparente, comme s'ils étaient sur leur disque dur.

Donc, résumons :

    • Les liens symboliques sont des redirections vers un fichier ou un dossier situé sur la même partition, une autre partition sur le même ordinateur, ou un emplacement réseau.

    • Théoriquement, on ne peut créer que 31 liens vers un même fichier ou dossier, mais il se trouve que sur Windows 7 cette limite semble ne pas exister. Il est possible, mais je n'en suis pas sûr, que le nombre de liens symboliques vers un même chemin soit limité par la taille du total des chemins, celle-ci ne pouvant pas dépasser 16Ko pour des raisons techniques (Microsoft reste vague à ce sujet).

    • Si l'UAC est active et si vous créez des liens symboliques dans un emplacement protégé du système d'exploitation (program files par exemple, ou tout dossier réclamant les droits d'administration pour être modifié), ces liens ne fonctionneront pas bien, et souvent vous aurez une erreur indiquant que le lien symbolique lui-même n'existe pas, sans redirection.

    • Si vous déplacez ou copiez-collez un lien symbolique via l'explorateur de fichier, le fichier cible sera copié à la place du lien symbolique. Ce qui montre que même l'explorateur de fichier se fait leurrer par la redirection transparente offerte par un lien symbolique.

Mais qu'est-ce donc au final ?

Les 2 types de liens (réels et symboliques) sont similaires dans le sens où ils permettent de cibler un fichier de façon transparente, les nuances sont au niveau de leurs structures qui permettent des choses différentes. Le raccourci Windows apporte des nouveautés mais est considéré comme un fichier indépendant par les applications et de ce fait n'est pas transparent.

Liens et leurs cibles possibles

Pour le schéma suivant, il faut imaginer que tous les types de liens veulent cibler un fichier ou dossier sur la partition C de l'ordinateur 1, ou l'imprimante reliée à l'ordinateur 2.

Un ! signifie que le fichier ou dossier doit exister au moment de la création du lien.

Liens et leur utilité

Le Lien réel est une façon intelligente d'éviter des redondances de fichiers inutiles et souvent nuisibles pour l'espace disque consommé, il peut aussi servir à organiser ses fichiers.

La jonction est un mélange entre un lien réel et un lien symbolique, le dossier doit exister au moment de la création du lien, mais si on efface le dossier par la suite, la jonction devient non fonctionnelle mais existe toujours.

Le lien symbolique, est une façon pratique d'organiser ses dossiers, et peut servir le même usage que les liens réels dans des proportions réduites, mais plus variées puisque d'autres partitions et/ou lecteurs réseau peuvent être ciblés.

Le raccourci windows permet d'assigner des paramètres complexes de lancement de la cible ainsi que de lier des périphériques comme une imprimante ou un scanner.

Tableau récapitulatif

Type de lien

Lien transparent ?

Éditer le lien édite

Cibler un dossier

Cibler un fichier

Cibler un fichier sur une autre partition

Cibler un fichier réseau / sur un autre disque

Cibler une imprimante

Utiliser un chemin relatif

Effacer le lien efface la cible

Effacer la cible rend le lien non-fonctionnel

Nombre de lien possible vers une même cible

Options de lancement du fichier ciblé

Type

Taille approximative (partie données)***

Raccourci (.lnk)

Lien réel

Jonction

Lien symbolique

le lien

le fichier ciblé

le fichier ciblé

le fichier ciblé

si dernier lien

**

infini

*

1023

31

31

fichier

1Ko

fichier

0Ko

reparse point

1ko

reparse point

1Ko

* Sauf si c'est le dernier, auquel cas il ne restera plus de lien du tout.

** Avant Vista, effacer une jonction dans l'explorateur de fichier efface la cible et son contenu, avec la commande shift-delete (Windows 2000/XP/2003).

*** La taille des reparse points est généralement définie par la longueur du chemin cible.

Pour aller plus loin

Les Liens NTFS (en français)

NTFS Hard Links, Directory Junctions, and Windows Shortcuts

NTFS link behavior

Références utilisées

Documentation

NTFS.com

Junctions Points and Symbolic Links

Documentation technique

Fichiers systèmes de NTFS

Symbolic Link effects on file systems functions

Reparse points

Reparse points and file operations

Hard Links and Junctions

Creating Symbolic links

Code

Programming considerations

Creating and opening files

File attribute constants

Determining Whether a directory is a mounted folder (or a symbolic link)

BY_HANDLE_FILE_INFORMATION Structure

CreateSymbolicLinc Function

Utilitaires

Link Shell Extension - permet de manipuler les liens réels, symboliques et les jonctions, depuis l'explorateur de fichier

Junction Link Magic - permet de manipuler les jonctions, et de lister les jonctions et liens symboliques