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

59

Si vous faites rm myFilemyFileest un lien dur, que se passe-t-il?

trusktr
la source

Réponses:

110

Sous Unix, tous les fichiers normaux sont des liens physiques. Les liens physiques dans un système Unix (et la plupart (tous?)) Sont des références à ce qu'on appelle un inode. Le inodea un compteur de référence, lorsque vous avez un "lien" vers le fichier (qui est le mode de fonctionnement 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 temps par un. 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 inodeet marque l'espace comme étant disponible pour utilisation.

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

Edit:Le fichier restera même si le dernier lien est supprimé . C'est l'un des moyens de s'assurer 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 comme indiqué dans leurs métadonnées et qu’elles ne sont utilisées par aucun processus.

Cet IMHO est de loin le moyen le plus simple de comprendre les liens physiques (et sa différence par rapport aux liens virtuels).

xénoterracide
la source
7
De plus, l'appel système pour supprimer un fichier est unlink().
mouviciel
1
Cela ne couvre pas la situation où le fichier est ouvert lorsque le dernier lien est unlinkédité.
cjm
5
@ OrangeDog, pas exactement, car les liens physiques ne peuvent pas croiser les systèmes de fichiers et /procconstituent un système de fichiers séparé (virtuel).
cjm
2
/ proc reflète également les structures de données internes du noyau (c’est un moyen pour le noyau Linux d’exposer certaines données dans un format raisonnablement bien défini sans donner à tous un accès direct à la mémoire du noyau). Il est donc plus exact de dire que le noyau garde trace du fait que le fichier est ouvert et qu'il expose ces informations via procfs.
un CVn
1
Et oui, appeler unlink()pour supprimer un fichier m'a laissé perplexe lorsque j'ai commencé à jouer avec la programmation C sur MS-DOS dans la première moitié des années 90. :)
un CVn
12

Tester était plus facile que je ne le pensais: j'ai créé un fichier texte, puis lié de manière dure La suppression du lien physique ne supprime pas le fichier auquel elle est liée et le fichier qui était lié reste là où il se trouve.

trusktr
la source
1
c'est vrai, mais pas une image complète
xenoterracide
3
La clé est que la création du fichier texte ajoute également un lien dur. Dans les systèmes de fichiers * NIX, tous les fichiers (inodes) doivent être liés au moins une fois par liaison physique dans la structure de répertoires.
Arrêtez de blesser Monica
0

tous les fichiers de votre disque sont en fait des pointeurs sur les données réelles de votre lecteur. entrez la description de l'image ici

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

entrez la description de l'image ici

comme dans cet exemple, a.txt pointait vers les données (octets) du fichier qui se trouve dans le lecteur, lorsque le lien physique b.txt est créé, il pointe vers ce que point.txt pointait.

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

MAIS, lorsque vous supprimez les deux, le système verra que les données du disque ne sont pas référencées par un fichier. Le système les considérera comme un espace libre et les écrasera à leur guise.

ZOLDIK
la source
2
Je pense qu'il est important que vous clarifiiez ce qui FILE "A.txt"est identique à LINK "B.txt", en particulier comme vous l'avez appelé l'un FILEet l'autre a LINK. Le lien est vraiment la flèche noire.
Roaima
oui, je pensais que ce ne serait pas clair que b.txt est un fichier en lien dur ...
ZOLDIK