2010-05-11 5 views
8

Volevo solo chiarire se un hard link/simbolico è in realtà un file che viene creato ??link e simbolici hard link in Unix

Ho eseguito il comando:

ln source hardlink 
ln -s source softlink 

- Il comando ls mostra questo 2 collegamenti come un file.

Quindi la mia domanda è, fa ln/ln -s in realtà creare un file?

saluti, darkie15

risposta

13

Sì e no :-)

In UNIX, il contenuto di un file sono distinti dalle voci di directory per quel file. È possibile avere più voci di directory che puntano agli stessi contenuti (cercare inode per una descrizione di come funziona) e, ecco il difficile:

Tutte quelle voci di directory sono uguali. Anche se uno può essere stato creato per primo, non c'è niente di speciale in questo. Se lo rimuovi, il contenuto non scompare, solo la voce della directory. Il contenuto scompare quando l'inode ha zero voci di directory che puntano ad esso (e tutti i processi chiudono il file - Sono stato morso prima cercando di cancellare lo spazio su disco eliminando i file di registro solo per trovarlo, perché un processo ha ancora il file open, i contenuti del file non vengono ripristinati anche se non vi sono voci di directory che puntano a loro).

Questo è per collegamenti fissi.

I collegamenti software sono un po 'più complicati. Creano un "file" di ordinamento (un inode separato), contenente il percorso del file di destinazione. E quei collegamenti sono non uguale a. L'eliminazione dell'originale ti lascerà con un link morbido che non punta da nessuna parte.

Poiché gli inode sono univoci su un determinato file system, i collegamenti fisici non possono fare riferimento a dati su un file system diverso.

I collegamenti software non hanno questa limitazione poiché memorizzano il percorso del file di destinazione, non il suo inode.

La seguente trascrizione può aiutare:

$ echo hello >f1 
$ ln f1 f2 
$ ln -s f1 f3 
$ ls -ial f* 
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1 
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2 
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1 
$ cat f1 
    hello 
$ cat f2 
    hello 
$ cat f3 
    hello 
$ rm f1 
$ ls -ial f* 
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2 
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1 
$ cat f1 
    cat: f1: No such file or directory 
$ cat f2 
    hello 
$ cat f3 
    cat: f3: No such file or directory 

ho usato solo le ultime quattro cifre del numero di inode per mantenere la voce breve (e non colpito con numeri di inode come 43910096366994672) ma si può vedere che f1 e f2 hanno esattamente lo stesso inode mentre f3 è diverso.È inoltre possibile vedere che il contenuto del file creato originariamente come f1 sopravvive alla sua eliminazione perché f2 fa ancora riferimento a esso.

Tuttavia, poiché f3 fa riferimento al nome f1 anziché al suo inode, si verifica un errore nel tentativo di utilizzarlo.


parte: Hai devi piace quando giocattoli UNIX con voi come questo:

$ ls f* 
    f2 f3 
$ cat f3 # What the ...? 
    cat: f3: No such file or directory 

Quasi divertente come la creazione di un file chiamato spaziobackspacex e poi guardando qualcuno tenta di cancellarlo :-)

+0

'rm \ '? Non vedo come il backspace (^?) Lo renderebbe più complicato :) – Unode

3

Nessuno crea un file.

un file su disco è identificato da un "inode". Le directory mappano i nomi dei file in inode. Un hard link significa "crea un nuovo nome di file in questa directory che punta allo stesso inode del nome del file."

Un collegamento simbolico significa "creare un nuovo nome di file in questa directory che punta a qualsiasi inode questo altri file punti."

Come sottolinea mangoman in un commento, un link simbolico fa creare un file con il nome della destinazione del collegamento, ma non si deve prestare attenzione ad esso. È un file speciale che non è il tuo business.

+2

in caso di collegamento software, viene creato un file contenente il percorso assoluto della destinazione. –