Cos'è un hard link in Linux?


9

Ho cercato in giro e sto cercando di capire la differenza tra un collegamento reale e un collegamento simbolico (collegamento software).

Ho trovato questo link abbastanza utile. Ma non sono ancora molto chiaro. Capisco che il soft link non è una copia del file originale, ma un hard link è una copia o no?

Risposte:


15

Per usare un'analogia dalla consegna della posta, un collegamento simbolico è qualcosa di simile a un indirizzo di inoltro ... quando qualcosa tenta di aprire un collegamento simbolico, apre il "file" (non letteralmente un file, però) memorizzato lì, e vede che dovrebbe invece guardare un file con un nome diverso, quindi apre invece l'altro file.

Un hard link è più come avere due indirizzi nello stesso posto. (Naturalmente questo non è davvero possibile nel mondo fisico). Quando qualcosa tenta di leggere il nome del file (indirizzo), ottiene lo stesso file fisico (posizione).

Quindi un hard link non è una copia, perché il file viene archiviato una sola volta (ma con più nomi). Ma si comporta in modo molto simile a una copia, perché puoi accedere alle stesse informazioni da due nomi di file.


+1 per un'analogia molto bella, che mi avrebbe semplificato le cose quando stavo cercando di capirlo.
John Gardeniers,

1
+1, ma due dettagli minori: 1) È possibile avere più indirizzi per lo stesso posto nel mondo reale, semplicemente non comune. 2) Forse la differenza più importante tra un hard link e una copia è che, se hai /fooe /bar, cambiando /foocambierà anche /barse sono hardlink (perché sono due nomi per lo stesso file), ma non se sono copie (perché sono due file completamente indipendenti).
Dave Sherohman,


3

Quando si crea un collegamento reale, significa che lo stesso file viene visualizzato in due luoghi diversi. Un file è in realtà solo un riferimento a una serie di blocchi di dati sui dischi, quindi un collegamento reale aggiunge un altro riferimento. I file raramente vengono veramente cancellati; i riferimenti vengono appena rimossi, quindi è impossibile accedere ai dati. Ecco perché quando elimini un file che hai creato come collegamento reale, l'altro file originale rimane e viceversa.

D'altra parte, un collegamento simbolico è una direzione per accedere a un file con un determinato nome. Dice a tutti i programmi "Se vuoi usare questo file, è laggiù". Questo è il motivo per cui se si elimina la destinazione del collegamento simbolico, il collegamento simbolico si interrompe. E se si elimina il collegamento, la destinazione non viene interessata.


2

Un file nel sistema * nix ha due parti. uno è la porzione di dati e l'altro è inode. inode archivia le informazioni meta (informazioni rilevanti per i dati come la posizione in cui sono archiviate nell'HDD). Il collegamento reale crea una copia esatta di questo inode. Mentre sym link crea un inode che punta all'inode dell'inode reale. Quindi i dati inode in hardlink sono gli stessi del target ma dati diversi nel link sym. Quindi, per farla breve, i collegamenti sym e hard link differiscono in base al contenuto dei dati inode e non ai dati del file. Questa è la mia comprensione della differenza tra sym link e hard link. Inizialmente ho avuto delle difficoltà a comprenderlo, dato che si tratta di qualcosa di più sviluppatore e non sono uno sviluppatore. Oh quelli ben informati, per favore correggimi se sbaglio.


3
Una "directory" in * nix è un elenco di nomi di file e numeri di inode. Gli hard link sono due voci di directory che hanno lo stesso numero di inode e quindi si riferiscono allo stesso inode esatto, non alle copie dell'inode. Un collegamento simbolico è una voce di directory che punta a un'altra voce di directory (per nome), non a un particolare inode. (Ok, in realtà ha un inode, ma quell'inode si riferisce alla voce della directory, non ai dati del file.)
Randy Orrison,
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.