Qual è la differenza tra un collegamento simbolico e un collegamento reale?


768

Di recente mi è stato chiesto questo durante un colloquio di lavoro. Ero onesto e ho detto di sapere come si comporta un collegamento simbolico e come crearne uno, ma non capisco l'uso di un collegamento reale e come si differenzia da un collegamento simbolico.


2
su "non capisco l'uso di un hard link", può essere usato in sistemi di compilazione che fanno molta copia di file binari. La creazione di un collegamento reale invece della copia effettiva velocizza le cose. MSBuild 4.0 supporta questo.
Ankush,

13
Trovo questo link molto utile per capirlo. askubuntu.com/questions/108771/…
kta,

2
unix.stackexchange ha un buon elenco di punti elenco ... molto utile perché stabilisce tutti i vincoli in modo molto conciso ed è facile da sfogliare. (molti di questi punti elenco coprono casi limite / avvertenze che sono menzionati solo nei commenti di questa domanda ... o che non sono affatto menzionati)
Trevor Boyd Smith

Risposte:


781

Sotto il file system, i file sono rappresentati da inode. (O sono più inode? Non sono sicuro.)

Un file nel file system è fondamentalmente un collegamento a un inode.
Un hard link, quindi, crea semplicemente un altro file con un link allo stesso inode sottostante.

Quando si elimina un file, questo rimuove un collegamento all'inode sottostante. L'inode viene eliminato (o eliminabile / sovrascrivibile) solo quando tutti i collegamenti all'inode sono stati eliminati.

Un collegamento simbolico è un collegamento a un altro nome nel file system.

Una volta creato un collegamento reale, il collegamento è all'inode. L'eliminazione, la ridenominazione o lo spostamento del file originale non influirà sul collegamento reale in quanto si collega all'inode sottostante. Qualsiasi modifica ai dati sull'inode si riflette in tutti i file che fanno riferimento a quell'inode.

Nota: i collegamenti fisici sono validi solo all'interno dello stesso file system. I collegamenti simbolici possono estendersi ai file system in quanto sono semplicemente il nome di un altro file.


2
Sono sicuro che gli i-nodi dipendono dalla particolare variante del sistema operativo; tuttavia, credo che di solito sia un singolo i-node. L'i-node ha informazioni sul file e informazioni su dove sono archiviati i dati sul disco. I file di grandi dimensioni avranno puntatori indiretti a tabelle aggiuntive.
terson,

76
Potresti voler aggiungere l'utile funzionalità che i collegamenti simbolici possono attraversare i filesystem, i collegamenti reali non possono (devono fare riferimento a un file sullo stesso filesystem).
paxdiablo,

53
C'è una buona spiegazione visiva in un articolo su Linux Gazette
Rodrigue

1
Ho anche scritto un blog su questo dopo alcune letture ed esperimenti csharpbsharp.tumblr.com
Adnan Bhatti

1
@zen: è possibile smontare / rimontare un file system ogni volta che non viene utilizzato. Per la partizione di root questo è un po 'complicato ma può essere fatto (non consigliato). Per farlo per il root, di solito è meglio avviare un CD di ripristino prima modificare i montaggi e riavviare. Ma dovresti porre questo tipo di domanda a un superutente.
Martin York,

464

Qualche bella intuizione che potrebbe aiutare, usando qualsiasi console Linux (ish).

Crea due file:

$ touch foo; touch bar

Inserisci alcuni dati in essi:

$ echo "Cat" > foo
$ echo "Dog" > bar

(In realtà, avrei potuto usare l'eco in primo luogo, poiché crea i file se non esistono ... ma non importa.)

E come previsto:

$cat foo; cat bar
Cat
Dog

Creiamo collegamenti hard e soft:

$ ln foo foo-hard
$ ln -s bar bar-soft

Vediamo cosa è appena successo:

$ ls -l

foo
foo-hard
bar
bar-soft -> bar

La modifica del nome di foo non ha importanza:

$ mv foo foo-new
$ cat foo-hard
Cat

punti difficili per l'inode, il contenuto, il file - che non è stato modificato.

$ mv bar bar-new
$ ls bar-soft
bar-soft
$ cat bar-soft  
cat: bar-soft: No such file or directory

Non è stato possibile trovare il contenuto del file perché il collegamento software punta al nome, che è stato modificato e non al contenuto.

Allo stesso modo, se fooviene eliminato, foo-hardconserva ancora il contenuto; se barviene eliminato, bar-softè solo un collegamento a un file inesistente.


12
questo implica che un "file" e un "hard link" sono gli stessi, entrambi puntano a un inode? sulla cancellazione di file o hard link, il contenuto esiste ancora fintanto che si sta ancora puntando all'inode giusto?
Daniel W.

1
@DanFromGermany Correct. Il contenuto è raggiungibile fintanto che almeno un collegamento reale (ovvero un file) lo punta.
Adam Matan,

6
touch blah1; touch blah2può essere abbreviato intouch blah1 blah2
Dmitri Zaitsev il

11
@DmitriZaitsev Vero, ma sarà meno leggibile per i principianti dell'IMO.
Adam Matan,

8
Penso che questa sia la risposta più comprensibile rispetto a molte risposte che ho letto. Un campione è meglio di un mucchio di testo esplicativo.
Scott Chu

435

Come dice il proverbio, un'immagine vale più di mille parole. Ecco come lo visualizzo:

inserisci qui la descrizione dell'immagine

Ecco come arriviamo a quella foto:

  1. Crea un nome myfile.txtnel file system che punti a un nuovo inode (che contiene i metadati per il file e punta ai blocchi di dati che ne contengono il contenuto, ovvero il testo "Hello, World!":

    $ echo 'Hello, World!' > myfile.txt
    
  2. Crea un collegamento reale my-hard-linkal file myfile.txt, che significa "crea un file che dovrebbe puntare allo stesso inode che myfile.txtpunta a":

    $ ln myfile.txt my-hard-link
    
  3. Crea un collegamento soft my-soft-linkal file myfile.txt, che significa "crea un file che dovrebbe puntare al file myfile.txt":

    $ ln -s myfile.txt my-soft-link
    

Guarda cosa succederà ora se myfile.txtviene eliminato (o spostato): my-hard-linkindica ancora gli stessi contenuti e quindi non è interessato, mentre my-soft-linkora non indica nulla. Altre risposte discutono i pro / contro di ciascuno.


3
@ThunderWiring Per "punto" intendo qualsiasi riferimento al link. Nel caso di un collegamento reale, fa riferimento direttamente a un inode (ovvero lo stesso inode a cui fa riferimento myfile.txt). Per il soft link, il suo riferimento non è l'inode (che contiene i dati), ma piuttosto il riferimento è il percorso del file system verso myfile.txt(ad esempio /home/Documents/myfile.txt)
akivajgordon

4
Mi piace molto la tua risposta visiva @akivajgordon - mi ha davvero aiutato a capire meglio le differenze!
wmock

7
Diecimila parole!
SaganRitual,

13
Forse sono lento, ma la tua foto ha appena chiarito 20 anni di mistero in circa 2 secondi.
jdk1.0,

3
Risposta molto utile, sono pazzo questo è sepolto così profondamente in questo post. Ti darei un centinaio di punti internet ma purtroppo posso darti solo uno.
Dagrooms,

71

I collegamenti fisici sono utili quando il file originale viene spostato. Ad esempio, spostando un file da / bin in / usr / bin o in / usr / local / bin. Qualsiasi link simbolico al file in / bin verrebbe interrotto da questo, ma un hardlink, essendo un link direttamente all'inode per il file, non gli importerebbe.

I collegamenti fissi possono richiedere meno spazio su disco poiché occupano solo una voce della directory, mentre un collegamento simbolico ha bisogno del proprio inode per memorizzare il nome a cui punta.

I collegamenti fisici richiedono anche meno tempo per essere risolti: i collegamenti simbolici possono puntare ad altri collegamenti simbolici che si trovano in directory con collegamenti simbolici. E alcuni di questi potrebbero essere su NFS o altri file system ad alta latenza e quindi il traffico di rete potrebbe risolversi. I collegamenti fisici, essendo sempre sullo stesso file system, vengono sempre risolti in una singola ricerca e non comportano mai la latenza di rete (se si tratta di un collegamento fisico su un filesystem NFS, il server NFS farebbe la risoluzione e sarebbe invisibile a il sistema client). A volte questo è importante. Non per me, ma posso immaginare sistemi ad alte prestazioni in cui questo potrebbe essere importante.

Penso anche che cose come mmap (2) e persino open (2) utilizzino la stessa funzionalità dei collegamenti fissi per mantenere attivo l'inode di un file in modo che anche se il file viene scollegato (2), l'inode rimane per consentire al processo di continuare l'accesso, e solo una volta chiuso il processo, il file scompare davvero. Ciò consente file temporanei molto più sicuri (se riesci a ottenere l'apertura e lo scollegamento in modo atomico, cosa che potrebbe esserci un'API POSIX per quella che non ricordo, allora hai davvero un file temporaneo sicuro) dove puoi leggere / scrivere i tuoi dati senza che nessuno sia in grado di accedervi. Bene, questo era vero prima che / proc offrisse a tutti la possibilità di guardare i descrittori dei file, ma questa è un'altra storia.

A proposito, il recupero di un file aperto nel processo A, ma non collegato al file system, ruota attorno all'utilizzo di hardlink per ricreare i collegamenti inode in modo che il file non vada via quando il processo che lo ha aperto lo chiude o scompare.


35

Soft Link :

soft o simbolico è più una scorciatoia per il file originale .... se si cancella l'originale la scorciatoia non riesce e se si cancella solo la scorciatoia, nulla accade all'originale.

Sintassi del collegamento software :ln -s Pathof_Target_file link

Produzione : link -> ./Target_file

Dimostrazione: readlink link Anche in ls -l linkuscita si vedrà la prima lettera in lrwxrwxrwxquanto l , che è l'indicazione che il file è un link simbolico.

Eliminazione del collegamento: unlink link

Nota: se lo desideri, il tuo softlink può funzionare anche dopo averlo spostato altrove dalla directory corrente. Assicurati di dare un percorso assoluto e non un percorso relativo durante la creazione di un collegamento software. cioè (a partire da / root / user / Target_file e non ./Target_file)

Collegamento reale:

Il collegamento reale è più una copia speculare o più percorsi allo stesso file. Fai qualcosa su file1 e appare nel file 2. L'eliminazione di uno mantiene sempre l'altro ok.

L'inode (o file) viene eliminato solo quando tutti i collegamenti (fissi) o tutti i percorsi per l'inode (stesso file) sono stati eliminati.

Una volta creato un collegamento reale, il collegamento ha l'inode del file originale. L'eliminazione della ridenominazione o lo spostamento del file originale non influirà sul collegamento reale in quanto si collega all'inode sottostante. Qualsiasi modifica ai dati sull'inode si riflette in tutti i file che fanno riferimento a quell'inode.

Sintassi del collegamento reale :ln Target_file link

Output: verrà creato un file con collegamento al nome con lo stesso numero di inode di Targetfile.

Prova: ls -i link Target_file (controlla i loro inode)

Eliminazione del collegamento: rm -f link (Elimina il collegamento proprio come un normale file)

Nota : i collegamenti simbolici possono estendersi ai file system in quanto sono semplicemente il nome di un altro file. Considerando che i collegamenti fisici sono validi solo all'interno dello stesso file system.

I collegamenti simbolici hanno alcune caratteristiche che mancano ai collegamenti reali:

  • Punto di collegamento reale al contenuto del file. mentre Soft link punta al nome del file.
  • mentre size of hard link è la dimensione del contenuto mentre soft link ha la dimensione del nome file.
  • Gli hard link condividono lo stesso inode. I soft link no.
  • I collegamenti reali non possono attraversare i file system. I collegamenti morbidi lo fanno.
  • sai immediatamente dove punta un link simbolico mentre con hard link, devi esplorare l'intero file system per trovare i file che condividono lo stesso inode.

    # find / -inum 517333

    /home/bobbin/sync.sh
    /root/synchro
    
  • gli hard-link non possono puntare a directory.

I collegamenti fisici hanno due limitazioni:

  • Le directory non possono essere strettamente collegate. Linux non consente questo per mantenere la struttura ad albero aciclica delle directory.
  • Non è possibile creare un collegamento reale tra i filesystem. Entrambi i file devono trovarsi sullo stesso filesystem, poiché diversi filesystem hanno differenti tabelle di inode indipendenti (due file su filesystem diversi, ma con lo stesso numero di inode saranno diversi).

3
"mentre la dimensione del collegamento reale è la dimensione del contenuto mentre il collegamento software ha la dimensione del nome file." Giusto per chiarire, creare un altro collegamento reale influisce sullo spazio libero solo di pochi byte.
Ingo

34

Un modo semplice per vedere la differenza tra un collegamento reale e un collegamento simbolico è attraverso un semplice esempio. Un collegamento reale a un file indicherà il punto in cui è archiviato il file o l'inode di quel file. Un collegamento simbolico punterà al file stesso.

Quindi se abbiamo un file chiamato "a" e creiamo un collegamento reale "b" e un collegamento simbolico "c" che fanno tutti riferimento al file "a":

echo "111" > a
ln a b
ln -s a c

L'output di "a", "b" e "c" sarà:

cat a --> 111
cat b --> 111
cat c --> 111

Ora rimuoviamo il file "a" e vediamo cosa succede all'output di "a", "b" e "c":

rm a
cat a --> No such file or directory
cat b --> 111
cat c --> No such file or directory

Allora, cos'è successo?

Poiché il file "c" punta al file "a" stesso, se il file "a" viene eliminato, il file "c" non avrà nulla a cui puntare, infatti viene anche eliminato.

Tuttavia, il file "b" punta al luogo di archiviazione, o all'inode, del file "a". Quindi, se il file "a" viene eliminato, non farà più riferimento all'inode, ma poiché il file "b" lo fa, l'inode continuerà a memorizzare qualunque contenuto appartenesse a "a" fino a quando non ci saranno più collegamenti fissi.


Potrebbe essere utile sottolineare che, un file è un oggetto molto astratto e, con tutte le cose astratte, il vero intento delle implementazioni di alto livello può non essere all'altezza della spiegazione corretta senza rischiare di far saltare le astrazioni.
Cholthi Paul Ttiopic,

28

I collegamenti simbolici si collegano al nome di un percorso. Questo può trovarsi ovunque nell'albero dei file di un sistema e non deve nemmeno esistere quando viene creato il collegamento. Il percorso target può essere relativo o assoluto.

I collegamenti reali sono ulteriori puntatori a un inode, nel senso che possono esistere solo sullo stesso volume della destinazione. Ulteriori collegamenti fisici a un file non sono distinguibili dal nome "originale" utilizzato per fare riferimento a un file.


Inoltre, quando si rimuove il file a cui ci si collega, un collegamento simbolico viene interrotto, un collegamento reale rimane valido, perché "mantiene" il file nel file system.
njsf

21

Vorrei indicarti Wikipedia:

Alcuni punti:

  • I collegamenti simbolici, a differenza dei collegamenti reali, possono attraversare i filesystem (la maggior parte delle volte).
  • I collegamenti simbolici possono puntare a directory.
  • I collegamenti fissi puntano a un file e consentono di fare riferimento allo stesso file con più di un nome.
  • Finché esiste almeno un collegamento, i dati sono ancora disponibili.

1
In teoria (e in alcuni casi anche nella pratica) i collegamenti reali possono indicare anche le directory (in effetti "." È un collegamento reale alla directory corrente e ".." è un collegamento reale alla directory padre). Ma possono essere pericolosi, quindi la maggior parte degli UNIX non li consente (o richiede di prendere misure speciali per farlo). Apple li usa per l'implementazione della propria macchina del tempo, ad esempio: earthlingsoft.net/ssp/blog/2008/03/x5_time_machine
Joachim Sauer,

3
Stai indicando un link a un articolo ... ti rende un link simbolico?
Ian Campbell,

@JoachimSauer Pensi che il nuovo file system Apple eliminerà la necessità che Time Machine utilizzi i collegamenti diretti alle directory?
cjm

Ho trovato la spiegazione di Wikipedia significativamente più breve e più concreta delle spiegazioni nelle risposte più votate.
Lakesare

9

I collegamenti fisici sono molto utili quando si eseguono backup incrementali. Vedi rsnapshot , per esempio. L'idea è di fare una copia usando i collegamenti reali:

  • copia il numero di backup n in n + 1
  • copia backup n - 1 a n
  • ...
  • copia backup 0 in backup 1
  • aggiorna il backup 0 con tutti i file modificati.

Il nuovo backup non occuperà spazio aggiuntivo a parte le modifiche apportate, poiché tutti i backup incrementali punteranno allo stesso set di inode per i file che non sono stati modificati.


6

Hard link vs Soft link

Hard link Vs Soft link può essere facilmente spiegato da questa immagine.


5
Immagino che la tua foto di soft link non sia corretta. Punto: l'inode del soft link non deve puntare all'inode del file originale. Causa se si rinomina il file originale, il collegamento software correlato è morto
percy507

@ percy507 sì, hai ragione, ma trovo comunque una spiegazione molto bella e intuitiva. Immagina che la freccia tra gli inode non ci sia ...
Michael Litvin,

5

Aggiungo la domanda di Nick: quando gli hard link sono utili o necessari? L'unica applicazione che mi viene in mente, in cui i collegamenti simbolici non farebbero il lavoro, è fornire una copia di un file di sistema in un ambiente chroot.


Sistema distribuito con punti di montaggio in luoghi diversi su sistemi diversi. Naturalmente, questo potrebbe essere progettato fuori dal sistema essendo coerente.
terson,

Penso che @Tanktalus abbia fornito un ottimo esempio.
Nick Stinemates

4

Da MSDN ,

Collegamento simbolico

Un collegamento simbolico è un oggetto file system che punta a un altro oggetto file system. L'oggetto a cui si punta è chiamato target.

I collegamenti simbolici sono trasparenti per gli utenti; i collegamenti appaiono come normali file o directory e possono essere gestiti dall'utente o dall'applicazione esattamente nello stesso modo.

I collegamenti simbolici sono progettati per facilitare la migrazione e la compatibilità delle applicazioni con i sistemi operativi UNIX. Microsoft ha implementato i suoi collegamenti simbolici per funzionare proprio come i collegamenti UNIX.

I collegamenti simbolici possono essere collegamenti assoluti o relativi. I collegamenti assoluti sono collegamenti che specificano ogni parte del nome del percorso; i collegamenti relativi sono determinati in relazione a dove si trovano gli identificatori del collegamento relativo in un percorso specificato

Un esempio di collegamento simbolico assoluto

X: "C:\alpha\beta\absLink\gamma\file"
Link: "absLink" maps to "\\machineB\share"
Modified Path: "\\machineB\share\gamma\file"

Un esempio di collegamenti simbolici relativi

X: C:\alpha\beta\link\gamma\file
Link: "link" maps to "..\..\theta"
Modified Path: "C:\alpha\beta\..\..\theta\gamma\file"
Final Path: "C:\theta\gamma\file"

Collegamento reale

Un collegamento reale è la rappresentazione del file system di un file con cui più di un percorso fa riferimento a un singolo file nello stesso volume .

Per creare un collegamento reale in Windows, vai al punto in cui creare il collegamento e inserisci questo comando:

mklink /H Link_name target_path

Si noti che è possibile eliminare gli hard link in qualsiasi ordine, indipendentemente dall'ordine in cui sono stati creati. Inoltre, non è possibile creare collegamenti reali quando

  • i riferimenti sono in diverse unità locali
  • i riferimenti includono unità di rete. In altre parole, uno dei riferimenti è un'unità di rete
  • l'hard link da creare si trova sullo stesso percorso del target

Giunzione

NTFS supporta un altro tipo di collegamento chiamato junction. MSDN lo definisce come segue:

Una giunzione (anche chiamata soft link) differisce da una hard link in quanto gli oggetti di archiviazione a cui fa riferimento sono directory separate e una giunzione può collegare directory situate su diversi volumi locali sullo stesso computer . Altrimenti, le giunzioni funzionano in modo identico ai collegamenti reali.

Le parti in grassetto nella sezione hard link e nella sezione di giunzione mostrano la differenza di base tra i due.

Comando per creare un incrocio in Windows, accedere al punto in cui si desidera creare il collegamento e quindi immettere:

mklink /J link_name target_path

3

Anche:

  1. Leggere le prestazioni dei collegamenti fisici è migliore dei collegamenti simbolici (micro-prestazioni)
  2. I collegamenti simbolici possono essere copiati, controllati dalla versione, ecc. In altre parole, sono un file reale. Dall'altro lato, un hard link è qualcosa a un livello leggermente inferiore e scoprirai che rispetto ai link simbolici, ci sono meno strumenti che forniscono mezzi per lavorare con i hard link come hard link e non come normali file

3

Semplicemente, Hard link: è solo aggiungere un nuovo nome a un file, vale a dire, un file può avere più nomi contemporaneamente, tutti i nomi sono uguali tra loro, nessuno preferito, Hard link non significa copiare tutto il contenuto di file e creare un nuovo file non è quello, crea semplicemente un nome alternativo per essere conosciuto ..

Collegamento simbolico (link simbolico): è un puntatore a un altro file, se il collegamento simbolico punta a un file esistente che viene successivamente eliminato, il collegamento simbolico continua a puntare allo stesso nome di file anche se il nome non nomina più alcun file.


3

Quello che pensi come un normale "file" è in realtà due cose separate: i dati di un file e una voce di directory. Quando si crea un collegamento reale per un file, si crea effettivamente una seconda voce della directory che fa riferimento agli stessi dati. Entrambe le voci della directory hanno la stessa identica funzionalità; ognuno può essere utilizzato per aprire il file per leggerlo. Quindi non hai davvero "un file più un hard link", hai "dati di file con due voci di directory". Quello che pensi come eliminare un file in realtà elimina una voce della directory e quando l'ultima voce della directory per i dati viene eliminata, anche i dati stessi vengono eliminati. Per i file ordinari che hanno solo una voce della directory, l'eliminazione della voce della directory eliminerà i dati come sempre. (Durante l'apertura di un file, il sistema operativo crea un collegamento temporaneo al file,

Ad esempio, creare un file A.txt, un hard link B.txt ed eliminare A.txt. Quando hai creato A.txt, sono stati creati alcuni dati e una voce di directory A.txt. Quando è stato creato il collegamento reale, è stata creata un'altra voce di directory B.txt, che punta agli stessi stessi dati. Quando elimini A.txt, hai ancora tutti i dati e una singola voce di directory B.txt, esattamente come se avessi creato un file B.txt in primo luogo.

Un collegamento software è solo un file (quasi) ordinario, tranne per il fatto che non contiene dati, ma il percorso di un'altra voce della directory. Se si elimina il file a cui fa riferimento il collegamento software, il collegamento software conterrà un percorso che non punta più a una voce della directory; è rotto. Se si elimina il collegamento software, è come eliminare qualsiasi altro file, il file a cui punta non è interessato.


2

Una voce della directory è link a structrue:

struct dentry{
    ino_t ino;
    char  name[256];
}

l'ino è il numero di inode, il nome è il nome del file, la struttura dell'inode forse come :

struct inode{
      link_t nlink; 
      ...
}

ad esempio si crea un file / 1, la voce della directory potrebbe essere simile a:

struct dentry{
     ino_t ino; /* such as 15 */
     char  name[256]; /* "1" */
} 

la struttura dell'inode potrebbe essere:

   struct inode{ /* inode number 15 */
         link_t nlink; /* nlink = 1 */
         ...
    }

quindi si crea un collegamento reale (può essere / 100), la voce della directory potrebbe essere simile a:

  struct dentry{
     ino_t ino; /* 15 */
     char  name[256]; /* 100 */
  }

la struttura dell'inode potrebbe essere:

   struct inode{ /* inode numebr 15 */
         link_t nlink; /* nlink = 2 */
         ...
    }

quindi si crea un collegamento simbolico (può essere / 200) al file 1, la voce della directory potrebbe essere simile a:

  struct dentry{
        ino_t ino; /* such as 16 */
        char  name[256]; /* "200" */
  }

la struttura dell'inode potrebbe essere:

   struct inode{ /* inode number 15 */ 
         link_t nlink; /* nlink = 2 */
         ...
    }

   struct inode{ /* inode number 16 */
         link_t nlink; /* nlink = 1 */
         ...
    } /* the data of inode 16 maybe /1 or 1 */

2

Aggiungendo a tutte le risposte di cui sopra, la differenza nel trovare il file hardlink e softlink può essere compresa come di seguito:

Ho un file f6nella mia directory corrente, nonché una directory denominata t2.

Il file denominato f1e ./t2/f2sono collegamenti simbolici a f6.

Il file ha nome f7e ./t2/f8sono collegamenti reali di f6.

Per trovare link sia soft che hard possiamo usare:

$ find -L . -samefile f6 

> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8

Per trovare solo il collegamento fisico possiamo usare:

$ find . -xdev -samefile f6

> ./f6
> ./f7
> ./t2/f8

Poiché è possibile creare hardlink sullo stesso file system, è possibile cercare tutti i hardlink senza l' -Lopzione utilizzata (con -xdevopzione) nello stesso file system / mount-point. Salva la ricerca non necessaria in diversi punti di montaggio.

Quindi la ricerca del collegamento fisico è un po 'più veloce della ricerca dei collegamenti (per favore, correggi se ho torto o no).


1

I collegamenti simbolici danno un altro nome a un file, in modo simile ai collegamenti reali. Ma un file può essere eliminato anche se restano dei collegamenti simbolici.


No. Il collegamento simbolico non è "un altro nome per lo stesso file", è un file a sé stante, che si collega al file di destinazione.
Kusalananda,

1

I miei due centesimi sull'uso:

I collegamenti soft possono essere utilizzati per abbreviare i nomi di percorsi lunghi, ovvero:

ln -s /long/folder/name/on/long/path/file.txt /short/file.txt

Le modifiche apportate /short/file.txtverranno applicate al file originale.

I collegamenti fisici possono essere utilizzati per spostarsi in file di grandi dimensioni:

$ ls -lh /myapp/dev/
total 10G
-rw-r--r-- 2 root root 10G May 22 12:09 application.bin

ln /myapp/dev/application.bin /myapp/prd/application.bin

La copia istantanea in un'altra cartella e il file originale (attivato /myapp/dev) possono essere spostati o eliminati, senza toccare il file/myapp/prd


0

Ho appena trovato un modo semplice per comprendere i collegamenti reali in uno scenario comune, l'installazione del software.

Un giorno ho scaricato un software nella cartella Downloadsper l'installazione. Dopo averlo fatto sudo make install, alcuni file eseguibili sono stati cpinseriti nella cartella bin locale. Qui, cpcrea un collegamento reale . Sono stato contento del software ma presto Downloadsho capito che non è un buon posto a lungo termine. Quindi ho modificato mvla cartella del software nella sourcedirectory. Bene, posso ancora eseguire il software come prima senza preoccuparmi di alcun collegamento di destinazione, come in Windows. Ciò significa che l' hard link trova direttamente l'inode e altri file in giro.


0

In questa risposta quando dico un file intendo la posizione in memoria

Tutti i dati salvati vengono archiviati in memoria utilizzando una struttura di dati chiamata inode Ogni inode ha un numero di inode. Il numero di inode viene utilizzato per accedere all'inode. Tutti i collegamenti fisici a un file possono avere nomi diversi ma condividere lo stesso numero di inode. Poiché tutti gli hard link hanno lo stesso numero di inode (che a loro volta accedono allo stesso inode), tutti puntano alla stessa memoria fisica.

Un collegamento simbolico è un tipo speciale di file. Poiché è anche un file, avrà un nome file e un numero di inode. Come detto sopra il numero di inode accede a un inode che punta ai dati. Ora ciò che rende speciale un collegamento simbolico è che gli inodenumeri nei collegamenti simbolici accedono a quegli inode che indicano "un percorso" verso un altro file. In particolare, il numero di inode nel collegamento simbolico accede a quegli inode che indicano un altro hard link.

quando stiamo spostando, copiando, eliminando un file nella GUI, stiamo giocando con i collegamenti reali del file, non con la memoria fisica. quando cancelliamo un file, stiamo cancellando il collegamento reale del file. non stiamo cancellando la memoria fisica. Se tutti i collegamenti fissi al file vengono eliminati, non sarà possibile accedere ai dati memorizzati anche se potrebbero essere ancora presenti in memoria

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.