• # liens symboliques vs hard

    Posté par . En réponse au message création liens symboliques impossible. Évalué à 2. Dernière modification le 27 décembre 2019 à 14:45.

    Bonjour à tous, et joyeux (lendemain de) Noël accessoirement.
    Me sentant d'humeur à faire mon ch... aujourd'hui je vais apporter mon grain de sel à l'eau de ce moulin (gné ?).

    Un fichier, c'est un inode et une entrée dans la table d'allocation pour en préciser le chemin (entre autres...).
    Un hardlink, c'est une entrée supplémentaire dans la table pointant vers un inode (bref, un chemin alternatif vers le même inode).
    Un softlink est un fichier spécial (et donc aussi une entrée dans la table d'allocation) indiquant une redirection vers un autre fichier (et plutôt même, de fait, un chemin de fichier).

    Les implications:
    Les hardlinks sont limités à un même filesystem, et peu importe d'indiquer un chemin absolu ou relatif, au final c'est l'inode qui fait autorité.
    Les softlinks peuvent pointer vers un autre filesystem, par contre il incombe à l'utilisateur de s'assurer du maintien du fichier ciblé.

    Petit exercice pratique pour illustrer le propos:

    mkdir testdir
    cd testdir
    touch fichier
    ln fichier lienhard
    ln -s fichier liensoft
     # joujou avec ls et options -l et -i notamment pour constater que fichier et lienhard partagent le même inode
    rm fichier
     # re-joujou avec ls pour constater que notre symlink est cassé et que le fichier, bien qu'absent sous ce nom, est toujours accessible via le hardlink créé auparavant

    The détail qui tue et que mon pauvre petit neurone souvent poussif a mis fort longtemps à intégrer (d'où mon inclination à le mettre ici en exergue): dans le cas d'un lien hard, si l'on indique un chemin relatif, la référence est le répertoire courant alors que pour un lien soft, c'est l'emplacement du lien. Illustration:

     # on est toujours dans testdir
    touch fichier # si on ne recrée pas le fichier précédemment effacé, l'exemple n'est plus valable
    mkdir subdir
    ln fichier subdir/poettering # petite touche d'humour glacé et sophisiqué dont le sens m'échappe tout autant qu'à vous, mais toujours est-il que ça marche
    ln -s fichier subdir/autreliensoft # oops, broken link
    ln -s ../fichier subdir/autreliensoft # cette fois c'est la bonne (à moins qu'il ne faille user aussi de l'option -f puisque le lien existe déjà, tout cassé soit-il, j'avoue ne pas faire le test en direct moi-même... mea culpa, mea gross culpa !)

    Amicalement,
    ++
    Gi)