I collegamenti reali sono equivalenti alle scorciatoie di Windows?

51

Wikipedia definisce un hard link come:

  

una voce di directory che associa un nome a un file su un file system. (Una directory è di per sé un tipo speciale di file che contiene un elenco di tali voci.) Il termine viene utilizzato nei file system che consentono la creazione di più collegamenti fisici per lo stesso file.

Mi chiedo se il concetto di collegamento duro sia equivalente al concetto di Windows di Collegamento .

Se i collegamenti fisici non sono equivalenti alle scorciatoie, qual è la funzione Windows più vicina ai collegamenti reali?

    
posta Computernerd 10.03.2014 - 15:51

5 risposte

112

No, un collegamento fisico è completamente diverso. Un collegamento software è più vicino a una scorciatoia di Windows (anche se ci sono differenze importanti, i collegamenti simbolici sono più simili alle scorciatoie di Windows rispetto agli hard link). Un hard link è una cosa diversa e di cui non avrai quasi mai bisogno.

In breve, viene creato un collegamento software con questo comando:

ln -s foo bar

Se esegui ls -l , vedrai:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Il -> significa che bar è un link a foo . Pertanto, aprendo bar , con un editor di testo, ad esempio, verrà effettivamente aperto il file separato foo . Tuttavia, l'eliminazione di bar eliminerà semplicemente il collegamento, non influirà sul file foo .

Gli hard link, d'altra parte, sono creati con questo comando:

ln foo bar

Se ora esegui ls -l , non vi è alcuna indicazione di alcuna relazione tra i file:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Ma - e questo è molto importante - quelli sono in realtà lo stesso file . I file su file system Unix sono memorizzati usando inodes ; un inode è fondamentalmente il modo in cui il filesystem mappa un nome di file in una particolare posizione sul disco rigido fisico. Pertanto, i collegamenti reali sono file che puntano allo stesso inode come target. Un altro modo di mettere questo è che i file tutti sono in realtà collegamenti fisici che puntano ai loro inode. Creare un collegamento fisico a un file crea semplicemente un nuovo puntatore (file) sul file system che punta allo stesso inode. Ogni inode può avere più file che puntano ad esso o uno o nessuno.

Per comprenderlo più chiaramente, usa ls -i che mostra l'inode associato a un file. Creiamo un link soft e un hard link e vediamo cosa succede:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Ora controlla i loro inode:

Come puoi vedere sopra, sia foo che HardLinkToFoo hanno lo stesso inode (16648029) mentre SoftLinkToFoo ne ha uno diverso (16648036).

Che cosa accade se rinominiamo foo con mv foo bar ?

Il colore rosso indica un collegamento soft rotto, uno il cui target non può più essere trovato. Questo perché i soft link puntano al nome di un file, non al suo inode. Si noti che, nonostante la modifica del nome, l'inode rimane lo stesso, quindi il collegamento fisso funziona correttamente.

In sintesi, gli hard link sono in realtà due manifestazioni dello stesso file; sono puntatori alla stessa sezione del disco. I collegamenti software sono solo scorciatoie. Per fare un'analogia con il mondo reale, i collegamenti fisici sono come due numeri di telefono diversi per la stessa linea telefonica e i collegamenti software sono come avere due linee telefoniche diverse nella stessa casa.

    
risposta data terdon 10.03.2014 - 16:13
18

C'è una buona spiegazione di cosa sono i collegamenti soft e hard, ma una cosa deve essere chiarita.

Le scorciatoie di Windows sono equivalenti o simili a collegamenti software collegamenti rigidi . A livello di file system sono solo file. È la shell che capisce la loro struttura e li interpreta come collegamenti. Le scorciatoie di Windows possono anche puntare a oggetti negli spazi dei nomi shell che non sono correlati al file system (stampanti, elementi del pannello di controllo, cartelle virtuali).

Le scorciatoie di Windows, oltre al nome dell'oggetto file system, contengono le seguenti informazioni: PIDL (opaco binario "percorso" all'interno dello spazio dei nomi shell), descrizione, hotkey, icona, directory di lavoro. Windows aggiunge anche identificatori di oggetti NTFS se viene utilizzato il file system NTFS, per correggere i collegamenti interrotti.

L'equivalente approssimativo di un collegamento di Windows è un file .desktop . Vedi questa domanda su SuperUser: Esiste un equivalente di .lnk in Linux?

    
risposta data Athari 11.03.2014 - 12:57
6

No. In Linux le cose funzionano in modo diverso.

Ogni file è rappresentato da un oggetto chiamato "inode". Ogni inode ha un numero (ID) associato.

Come sappiamo, gli umani non sono bravi a ricordare numeri ma nomi. (Ecco come si sono evolute le rubriche telefoniche)

Pertanto, il nome del file è entrato nell'immagine per dare a ciascun inode un nome leggibile. Fondamentalmente, un hardlink lega un nome file a un inode. Un inode può avere più hardlink. Se non ci sono collegamenti fissi per un particolare inode, lo spazio su disco utilizzato dall'inode può essere riallocato per i nuovi file. Il che significa che almeno un collegamento fisso deve essere presente per ogni file. Il nome del file (visualizzato come il nome file / l'icona che vedi nel file browser) è di per sé un hardlink.

In Windows, il collegamento è un file separato (file * .lnk). Contiene informazioni sul file originale (comprensibilmente il percorso del file). Nella percezione di Linux, un collegamento a Windows sarebbe un altro inode collegato a un nome file che termina con ".lnk".

    
risposta data Shaakunthala 10.03.2014 - 16:13
2

Su Windows puoi creare anche i collegamenti fisici se hai un filesystem NTFS.

fsutil hardlink create target_file source_file

I file devono trovarsi sulla stessa unità logica.

    
risposta data Spook 13.03.2014 - 09:44
1

Una grande differenza, non è possibile creare hard-link per le cartelle, ma per i file.

  

Il collegamento può essere creato per le cartelle, quindi non puoi dire che lo sono   equivalente.

La tua domanda dovrebbe essere la differenza tra il link link simbolico o e .

come in questo modo:

  

Un link simbolico è a livello di filesystem, e tutto lo vede come il   file originale. Un'applicazione non ha bisogno di supporto speciale per usare a   collegamento simbolico.

     

Un "collegamento" è solo un file normale che ha un riferimento al file   file o directory di destinazione.

Quindi quando fai clic su una scorciatoia cambierai la tua directory nel file attuale, mentre il soft link rimanderà alla sua posizione come se fosse il vero file, per quello in Linux puoi usare terminale e cd per collegamenti simbolici mentre non puoi cd alle scorciatoie.

Un collegamento a Windows e un launcher di Linux (che punta a qualche percorso) sarebbero identici.

    
risposta data nux 10.03.2014 - 16:11

Leggi altre domande sui tag