Risposte:
In Unix tutti i file normali sono Hardlink. Hardlink in un filesystem Unix (e la maggior parte (tutti?)) Sono riferimenti a ciò che viene chiamato un inode
. Il inode
ha un contatore di riferimento, quando si dispone di un "link" al file (che è il normale modus operandi) il contatore è 1. Quando si crea una seconda, terza, quarta, ecc collegamento, il contatore viene incrementato (aumentato) ogni tempo di uno. Quando si elimina ( rm
) un collegamento, il contatore viene diminuito (ridotto) di uno. Se il contatore dei collegamenti raggiunge 0, il filesystem rimuove inode
e contrassegna lo spazio come disponibile per l'uso.
In breve, finché non si cancella l'ultimo collegamento, il file rimarrà.
Edit:
Il file rimarrà anche se l'ultimo collegamento viene rimosso . Questo è uno dei modi per garantire che la sicurezza dei dati contenuti in un file non sia accessibile a nessun altro processo. La rimozione completa dei dati dal filesystem viene eseguita solo se i dati hanno 0 collegamenti ad esso come indicato nei suoi metadati e non vengono utilizzati da alcun processo.
Questo IMHO è di gran lunga il modo più semplice per comprendere gli hard link (e la sua differenza dai softlink).
unlink
ed.
/proc
è un filesystem separato (virtuale).
unlink()
per eliminare un file mi ha lasciato perplesso quando ho iniziato a giocare con la programmazione C su MS-DOS qualche tempo fa nella prima metà degli anni '90. :)
Il test è stato più semplice di quanto pensassi: ho creato un file di testo, quindi fortemente collegato ad esso. L'eliminazione del collegamento reale non comporta l' eliminazione del file a cui è collegato e il file a cui è stato collegato rimane dove si trova.
tutti i file nel tuo disco sono in realtà puntatori ai dati reali sul tuo disco.
quando crei un hardlink per quel file, il file hardlink indicherà gli stessi dati a cui puntava il file originale.
come in questo esempio, a.txt puntava ai dati (byte) del file che si trovano nell'unità, quando viene creato il collegamento reale b.txt indicherà ciò a cui puntava a.txt.
così rimuovendone uno non influirà sull'altro a cui sono separati gli uni dagli altri.
MA, quando li rimuovete entrambi, il sistema vedrà che i dati presenti sul disco non hanno file che lo puntano, quindi il sistema lo considererà come uno spazio libero e lo sovrascriverà quando lo desidera.
FILE "A.txt"
è identico a LINK "B.txt"
, in particolare come hai chiamato uno a FILE
e l'altro a LINK
. Il link è davvero la freccia nera.
unlink()
.