web-dev-qa-db-fra.com

Que se passe-t-il lorsque vous supprimez un lien dur?

Si tu fais rm myFilemyFile est un lien dur, que se passe-t-il?

62
trusktr

Sous Unix, tous les fichiers normaux sont des Hardlinks. Les liens physiques dans un système de fichiers Unix (et la plupart (tous?)) Sont des références à ce qu'on appelle un inode. Le inode a un compteur de référence, lorsque vous avez un "lien" vers le fichier (qui est le mode opératoire normal), le compteur est 1. Lorsque vous créez un deuxième, troisième, quatrième, etc. lien, le compteur est incrémenté (augmenté) à chaque fois d'une unité. Lorsque vous supprimez (rm) un lien, le compteur est décrémenté (réduit) de un. Si le compteur de liens atteint 0, le système de fichiers supprime le inode et marque l'espace comme disponible pour utilisation.

En bref, tant que vous ne supprimez pas le dernier lien, le fichier restera.

Edit: Le fichier restera même si le dernier lien est supprimé . C'est l'un des moyens de garantir que la sécurité des données contenues dans un fichier n'est accessible à aucun autre processus. La suppression complète des données du système de fichiers n'est effectuée que si les données ont 0 liens vers elles comme indiqué dans ses métadonnées et qu'elles ne sont utilisées par aucun processus.

This IMHO est de loin le moyen le plus simple de comprendre les liens physiques (et sa différence avec les liens logiciels).

113
xenoterracide

Les tests ont été plus faciles que je ne le pensais: j'ai créé un fichier texte, puis lié à celui-ci. La suppression du lien dur ne pas supprime le fichier auquel il est lié et le fichier auquel il est lié reste où il est.

13
trusktr

tous les fichiers de votre disque sont en fait des pointeurs vers les données réelles de votre lecteur. enter image description here

lorsque vous créez un lien dur pour ce fichier, le fichier lié dur pointera vers les mêmes données que le fichier d'origine pointait.

enter image description here

comme dans cet exemple, a.txt pointait vers les données (octets) du fichier qui se trouvent dans le lecteur, lorsque le lien physique b.txt est créé, il indiquera vers quoi pointait a.txt.

ainsi supprimer l'un d'eux n'affectera pas l'autre, ils sont séparés les uns des autres.

MAIS, lorsque vous les supprimez tous les deux, le système verra que les données qui se trouvent sur le disque n'ont pas de fichier pointant dessus, donc le système le considérera comme un espace libre et le remplacera quand il le voudra.

1
ZOLDIK