Qual è la differenza tra un hard link e file copiati?


22

La mia comprensione è che i collegamenti reali includono una copia del file originale e che potrei eliminare un file con collegamenti fissi in una directory, e che esisterebbe ancora nell'altra directory.

Se è così, perché dovrei usare i collegamenti reali? Perché non avere solo due file separati?

Risposte:


29

Se copi un file, il contenuto verrà duplicato. Quindi, se modifichi il contenuto di un singolo file, ciò non ha alcun effetto sull'altro.

Se si crea un collegamento fisico, verrà creato un file che punta allo stesso contenuto. Quindi, se si modifica il contenuto di uno dei file, la modifica verrà visualizzata su entrambi.


3
Per file molto grandi, la creazione di un collegamento reale è sempre più veloce della copia del file originale?
Jorge Bucaran,

14

Un hard link è sostanzialmente un secondo nome di file per lo stesso file. Quindi, se si collega un file tramite hardlink, esso sarà solo una volta sul filesystem e quindi occuperà spazio solo una volta. Quindi si desidera utilizzare questo se si desidera salvare spazio su disco


4
Grazie per la pronta risposta. Allora perché dovrei voler utilizzare un collegamento reale anziché un collegamento software?
Mike B,

5
Un softlink è fondamentalmente un puntatore a un altro file. Pertanto, se si elimina il file originale, il collegamento software sarà comunque presente ma verrà interrotto. Un hardlink sono 2 nomi per lo stesso file, quindi possono essere eliminati individualmente.
Peter,

19
La spiegazione di Peter è buona, ma ha escluso il "conteggio dei collegamenti". Nell'inode del file (sui metadati del disco) c'è un conteggio dei collegamenti. Un hard link incrementa il conteggio dei link, un soft link no. Il kernel può cancellare il contenuto di un file se il conteggio dei collegamenti scende a zero.
Bruce Ediger,

4
Penso che la risposta di Alan a questo abbia un punto importante: cambiare un file cambia tutti i suoi collegamenti, con una copia avrebbero un contenuto diverso.
donothings successo

6

Sui file system unix ogni nome file è in realtà un collegamento reale alla posizione dei dati sul disco, chiamato inode. Se si crea un nuovo collegamento reale a un file esistente, non ci vorrà spazio aggiuntivo sul disco in quanto è solo un altro puntatore agli stessi dati. Se si modificano i dati tramite uno o l'altro collegamento (o si modifica direttamente l'inode), entrambi i file verranno modificati.

Il sistema tiene conto di quanti hard link ha ciascun inode. Quando il conteggio dei collegamenti è 0, non è più possibile raggiungere il file e i dati vengono contrassegnati come sicuri per essere sovrascritti. Quindi, dato un file con 2 collegamenti reali, se si elimina uno dei collegamenti, i dati non verranno eliminati. Solo se si eliminano entrambi i dati spariranno.

Puoi vedere i numeri di inode dei file usando l' -iopzione perls comando.

Un collegamento software, d'altra parte, punta a un altro file con il suo nome. Se sposti o elimini il file originale, il collegamento verrà interrotto.


0

Con riferimento alla parte della domanda che si poneva "perché dovrei usare i collegamenti reali?":

I file hard-link (o per questo quelli soft (simbolici) linkati offrono un modo utile di avere un singolo file eseguibile che può essere fatto mascherare per scopi diversi.

Cioè, il nome con cui viene invocato il codice può essere esaminato al fine di determinare quali opzioni sono disponibili per l'esecuzione. Ciò consente lo sviluppo e il packaging di un grande pezzo di codice con tutte le funzionalità condivise necessarie per scopi leggermente diversi. Dal punto di vista dell'utente, la specifica di "cosa" eseguire (per nome) limita le scelte e la presentazione a un sottoinsieme più gestibile di opzioni.

Un esempio classico è LVM. Un tempo di HP-UX utilizzato file collegati per i vari eseguibili (ad esempio vgdisplay, vgcreate, vgextend, ecc Oggi, come Linux, questi comandi sono in realtà simbolici (soft) collegamenti al lvmfile eseguibile.


Questo non ha nulla a che fare con la domanda.
rjmunro,

1
@rjmunro Mi permetto di dissentire. L'OP ha chiesto: "Perché dovrei usare i collegamenti reali?"
JRFerguson,

Non capisco l'ultimo esempio. Una volta c'erano collegamenti diretti a molti eseguibili, ora ci sono collegamenti diretti a un eseguibile. In che modo si distinguono quei soft link?
Emanuel Berg,

@EmanuelBerg Il mio punto era che, indipendentemente dal fatto che vengano utilizzati collegamenti hardware o soft, è il nome con cui viene invocato l'eseguibile che determina le opzioni e gli argomenti validi per l'esecuzione.
JRFerguson,

1
@EmanuelBerg TMTOWTDI
JRFerguson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.