Si vous faites rm myFile
où myFile
est un lien dur, que se passe-t-il?
la source
Si vous faites rm myFile
où myFile
est un lien dur, que se passe-t-il?
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 inode
a 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 inode
et 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).
unlink()
.unlink
édité./proc
constituent un système de fichiers séparé (virtuel).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. :)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.
la source
tous les fichiers de votre disque sont en fait des pointeurs sur les données réelles de votre lecteur.
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.
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.
la source
FILE "A.txt"
est identique àLINK "B.txt"
, en particulier comme vous l'avez appelé l'unFILE
et l'autre aLINK
. Le lien est vraiment la flèche noire.