I collegamenti fisici sono equivalenti alle scorciatoie di Windows?


52

Wikipedia definisce un collegamento reale come:

una voce della directory che associa un nome a un file in un file system. (Una directory è essa stessa un tipo speciale di file che contiene un elenco di tali voci.) Il termine viene utilizzato nei file system che consentono di creare più collegamenti fisici per lo stesso file.

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

Se i collegamenti fisici non equivalgono ai collegamenti, qual è la funzionalità di Windows più vicina ai collegamenti fisici?


1
In realtà ci sono alcuni riferimenti fantastici da quella pagina wiki che hai condiviso.
eccentrico

8
Microsoft NTFS supporta hardlink e sono molto simili a hardlink unix. Penso che le scorciatoie siano oggetti speciali per l'ambiente Windows ma non sono correlate all'organizzazione filesytem contrariamente ai veri e propri
collegamenti fisici

Il seguente link fornisce una buona spiegazione: comptb.cects.com/…

3
Penso che il parallelo sia fuorviante, i collegamenti sono collegamenti "interfaccia" solo file con informazioni di testo sulla destinazione che vengono interpretati dall'interfaccia e non dal filesystem. Da una riga di comando non stanno realmente indicando qualcosa nel senso del filesystem. Windows (o meglio detto NTFS) ha collegamenti simbolici adeguati en.wikipedia.org/wiki/NTFS_symbolic_link che non sono scorciatoie né hardlink. Infatti li uso in Windows per avere cartelle Dropbox ovunque, questo non può essere fatto con le scorciatoie.
alfC

5
I file di scelta rapida di Windows sono molto simili ai file .desktop di Linux. Symlink e hard link di Linux sono una cosa completamente diversa che a volte serve allo stesso scopo.
mikebabcock,

Risposte:


113

No, un hard link è completamente diverso. Un collegamento software è più vicino a un collegamento di Windows (anche se ci sono differenze importanti, i collegamenti simbolici sono più simili ai collegamenti di Windows rispetto ai collegamenti reali). 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 poi corri 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 ->mezzo che barè un collegamento a foo. Quindi, l'apertura bar, ad esempio con un editor di testo, aprirà effettivamente il file separato foo. Tuttavia, l'eliminazione bareliminerà semplicemente il collegamento, non influirà sul file foo.

I collegamenti reali, d'altra parte, vengono 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 vengono archiviati utilizzando gli inode ; un inode è sostanzialmente il modo in cui il filesystem associa un nome di file a una posizione particolare sul disco rigido fisico. Quindi, i collegamenti reali sono file che puntano allo stesso inode del loro target. Un altro modo per dirlo è che tutti i file sono in realtà collegamenti reali che puntano ai loro inode. Creare un collegamento reale 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 capirlo più chiaramente, usa ls -iquale mostra l'inode associato a un file. Creiamo un soft link e un hard link e vediamo cosa succede:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Ora controlla i loro inode:

inserisci qui la descrizione dell'immagine

Come potete vedere sopra, sia fooe HardLinkToFoohanno lo stesso inode (16.648.029), mentre SoftLinkToFoo ha uno diverso (16.648.036).

Cosa succede se rinominiamo foocon mv foo bar?

inserisci qui la descrizione dell'immagine

Il colore rosso indica un collegamento non funzionante interrotto, il cui obiettivo non può più essere trovato. Questo perché i collegamenti software 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 fisico va bene, funziona ancora.

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


6
@Kiwy È il contrario: i collegamenti simbolici assoluti falliscono in molti modi diversi (non appena sposti i dati, li monti in un posto diverso, esegui il backup, ...) e sono meglio evitati.
Gilles 'SO- smetti di essere malvagio' il

3
Vale anche la pena notare che l'eliminazione (tramite rmo unlink()) di un collegamento reale riduce solo il conteggio dei collegamenti fino a quando il conteggio dei collegamenti raggiunge lo zero, quando vengono rilasciati i blocchi occupati dal contenuto del file. Non sono sicuro che dire "i collegamenti reali sono in realtà due istanze dello stesso file" è strettamente corretto, dal momento che i due nomi indicano lo stesso inode e quindi lo stesso contenuto, piuttosto che ci sono due istanze del file stesso in alcun senso.
Emmet

7
Si noti che un collegamento di Windows è un file utilizzato dalla shell e quindi può fare cose che la shell conosce, ma non il file system. Ad esempio, è possibile creare collegamenti nello spazio dei nomi della shell (ad esempio Pannello di controllo, Computer, ecc.) Oppure è possibile creare collegamenti alle applicazioni che devono ancora essere installate (che verranno installate al primo utilizzo). Quelle cose non hanno equivalenti diretti nel mondo del file system.
Joey,

2
Adoro questa risposta, ma in realtà è piuttosto scarsa nel capire cos'è un collegamento di Windows. @Shaakunthala di seguito ha una risposta migliore poiché il collegamento di Windows è più simile a un file .desktop di Linux che a un collegamento simbolico.
mikebabcock,

18

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

Le scorciatoie di Windows sono equivalenti o simili né ai soft link né ai hard link . A livello di file system sono solo file. È la shell che comprende la loro struttura e li interpreta come collegamenti. I collegamenti di Windows possono anche puntare a oggetti negli spazi dei nomi della shell che non sono correlati al file system (stampanti, elementi del pannello di controllo, cartelle virtuali).

I collegamenti di Windows, oltre al nome dell'oggetto del file system, contengono le seguenti informazioni: PIDL ("percorso" binario opaco nello spazio dei nomi della shell), descrizione, tasto di scelta rapida, icona, directory di lavoro. Windows aggiunge inoltre identificatori di oggetti NTFS se si utilizza 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?


6

No. In Linux le cose funzionano diversamente.

Ogni file è rappresentato da un oggetto chiamato 'inode'. A ogni inode è associato un numero (ID).

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 in figura per dare a ciascun inode un nome leggibile. Fondamentalmente, un collegamento fisico lega un nome file a un inode. Un inode può avere più hardlink. Se non sono presenti hardlink per un particolare inode, lo spazio su disco utilizzato dall'inode può essere riassegnato per i nuovi file. Ciò significa che deve essere presente almeno un collegamento fisico per ciascun file. Il nome file (visualizzato come il nome file / icona che vedi nel browser dei file) stesso è un collegamento reale.

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 di Windows sarebbe un altro inode collegato a un nome di file che termina con '.lnk'.


3
NTFS funziona davvero in questo modo. Un file è una voce nella MFT e le voci della directory semplicemente mappano i nomi dei file agli ID dei file. Supporta hardlink e, dal 2008/7 / Vista (?), Anche symlink. A questo punto, la più grande differenza è culturale.
cHao,

2

Su Windows puoi anche creare hardlink se hai un filesystem NTFS.

fsutil hardlink create target_file source_file

I file devono trovarsi sulla stessa unità logica.


È corretto: NTFS supporta anche i collegamenti fisici. Spesso gli strumenti richiedono di disporre dei privilegi di amministratore per crearli. A proposito della "stessa unità logica" - sarebbe più preciso dire che devono trovarsi sullo stesso filesystem. Un'unità logica può essere qualsiasi cosa, inclusa una lettera di unità creata dal substcomando. Uno strumento potrebbe non saperlo / preoccuparsene e quindi rifiutare di creare un collegamento reale. Una cosa molto utile è l' estensione Link Shell che consente a Explorer di crearli.
Tobias,

1

Una grande differenza, il collegamento reale non può essere creato per le cartelle, ma per i file.

È possibile creare un collegamento per le cartelle, quindi non si può dire che siano equivalenti.

La tua domanda dovrebbe essere la differenza tra collegamento simbolico o collegamento soft e collegamento .

secondo questo:

Un collegamento simbolico è a livello di filesystem e tutto lo vede come il file originale. Un'applicazione non necessita di alcun supporto speciale per utilizzare un collegamento simbolico.

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

Quindi quando fai clic su una scorciatoia cambierà la tua directory nel file effettivo, mentre soft-link farà riferimento alla sua posizione come se fosse il file effettivo, per quello in Linux puoi usare terminal e cd per collegamenti simbolici mentre non puoi cd in scorciatoie .

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


2
Che cosa? I softlink sono solo file, anche se strani, prendono ad esempio anche gli inode. NON sono trattati come originali (sono hardlink). Sebbene sia vero che i collegamenti fissi non sono consentiti per le directory nella maggior parte dei sistemi operativi, questa è solo una funzione di sicurezza e ci sono eccezioni (ad esempio la macchina del tempo OSX). E ovviamente puoi eseguire il cd in scorciatoie (suppongo tu intenda le scorciatoie di Windows poiché, come dici, puoi cd in soflink).
terdon

1
sei sicuro di poter usare cmd per creare un collegamento.
nux

1
Ho appena avviato la mia macchina virtuale Windows e creato un collegamento a una cartella sul mio desktop, i collegamenti di Windows sono molto simili (se non identici) ai collegamenti simbolici. Sebbene non sia possibile eseguire il cd su di essi utilizzando cmd.exe per qualche motivo, è possibile creare un .lnk in una directory e utilizzarlo tramite Explorer.
terdon

1
gli elettori inferiori dovrebbero fornire una motivazione per il downvoting
nux

5
Spiacenti, non ancora corretto. I link simbolici sono file che contengono la loro destinazione come testo normale (vedi qui ), i link simbolici non sono trattati come originali, questa è la differenza totale tra link simbolici e hardlink. I launcher di Linux (suppongo tu intenda i file .desktop) non hanno nulla a che fare con questo, sono completamente diversi. Come dici tu stesso, le scorciatoie di Windows possono puntare a file (compresi programmi) e cartelle (mac e windows hanno cartelle, Linux ha directory). I file .desktop ti consentono solo di avviare un programma. Non si collegano da nessuna parte.
terdon
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.