Qual è la differenza tra collegamento simbolico e collegamento?


Risposte:


57

Penso che il punto importante sia che le scorciatoie siano solo un file. Hanno una dimensione (una piccola, che fa solo riferimento al punto in cui puntano) e richiedono un'applicazione per supportare quel tipo di file per poter essere utilizzata.

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.


6
Comandi Albero a piedi (una cosa del genere le utility Unix find, tar, du, ecc) non ha bisogno di sapere su collegamenti simbolici o possono fare alcune cose molto stupide. Ad esempio, accecare i seguenti collegamenti simbolici può creare cicli nel filesystem, e questo è negativo .
dmckee,

9
@dmckee; Ottimo punto, sebbene nessuna applicazione necessiti di supporto specifico per seguirli, hanno bisogno di un supporto specifico per non seguirli!
Phoshi,

Sì, non hanno bisogno di supporto per utilizzare loro, ma c'è bisogno di sapere su di loro.
dmckee,

@Phoshi Cosa intendi esattamente con "e richiedono un'applicazione per supportare quel tipo di file per poter essere utilizzati". Puoi per favore spiegare con un esempio?
Geek,

7
@Geek: un "collegamento" è effettivamente un file che contiene il percorso del file di un altro file. Quando lo leggi, leggi un file appositamente formattato che ti dice dove guardare dopo. Se l'applicazione non ascolta e legge semplicemente il file alla lettera, non lo segui. Un collegamento simbolico è a livello di file system, è il file system stesso che contiene il percorso "vero" dei dati e quando si tenta di accedervi, si recuperano i dati indicati.
Phoshi,

20

Un "collegamento simbolico" può effettivamente fungere da sostituto di una directory o di un file in modo funzionale ed è comunemente usato in ambienti Unix / Linux. Sebbene apparentemente ci sia supporto per questo in Windows, non ne ho ancora visto alcun uso effettivo.

Un "collegamento" è solo un file normale che ha un riferimento al file o alla directory di destinazione insieme ad altri elementi come l'icona da visualizzare. A differenza di un collegamento simbolico, non è possibile "cd ./shortcut-name" in DOS (in Unix / Linux è possibile "cd ./symlink-name" e funzionerà come una vera sottodirectory).

Inoltre, nella maggior parte delle applicazioni Windows, quando si fa clic su un collegamento in qualsiasi finestra di dialogo File-> Apri GUI, il campo del nome file viene popolato con il nome file di quel collegamento e si comporta come una sottodirectory, mentre in Unix / Linux la GUI tratta un collegamento simbolico come percorso (senza modificare il campo del nome file).


In Unix / Linux ci sono anche "Hard Link" che sono sempre e solo applicati ai file (non alle directory). Si tratta di voci del nome file naturali nel file system che puntano semplicemente agli stessi dati di file di un'altra voce nome file da qualche altra parte (non deve trovarsi nella stessa directory).
Randolf Richardson,

4
@Randolf: 1) Esistono collegamenti fisici anche in Windows. 2) Una caratteristica delle scorciatoie della shell è il tracciamento automatico del bersaglio - se il bersaglio viene spostato, la maggior parte delle scorciatoie continuerà a funzionare. (In un dominio AD è anche possibile tenere traccia dei file sui computer; ad esempio, se si sposta un HD altrove.) 3) Un uso dei collegamenti simbolici è il reindirizzamento di un file o di una directory in una posizione alternativa: possono puntare a file (a differenza delle giunzioni ) e le directory (a differenza degli hardlink), i filesystem incrociati (a differenza degli hardlink) e, AFAIK, possono anche puntare a percorsi di rete.
Grawity

Commento tardivo, e non sono sicuro di non sapere cosa sto facendo con shorcuts, ma ho dovuto creare un collegamento simbolico anziché un collegamento per il mio file vimrc (faccio riferimento a un progetto dotfiles che uso in una directory separata).
Making3

11

Come altri hanno già detto, un collegamento simbolico è uno dei tipi di collegamenti disponibili a livello di file system, che lo rende trasparente per le applicazioni. Ho trovato questa documentazione molto utile (specialmente la sezione "Ritaglia / Srotola / Giunzioni esterne / Collegamenti simbolici"). E lo strumento sembra carino. (Citando questo, e mklink, si spera che altre ricerche trovino questa discussione.)

Un collegamento è un file, non un collegamento reale, ed è generalmente seguito correttamente come collegamento quando interpretato dall'interfaccia utente di Windows (interfaccia utente). Ad esempio, quando fai doppio clic su un collegamento a una cartella, Windows ti reindirizza verso l'altra posizione. (Ciò include le finestre di dialogo Generico Apri file e Salva file richiamate dalla maggior parte delle applicazioni.) Sul desktop, ho un collegamento a questa cartella: C: \ ProgramData \ Microsoft \ Windows \ Menu Start \ Programmi \ G

Il nome del file shorcut è: C: \ Users \ user5 \ Desktop \ Games.lnk, sebbene Windows elimini l'estensione .lnk e mostri solo "Giochi", anche se si deseleziona "nascondi estensioni per tipi di file noti". Ma se apri un prompt dei comandi e fai una directory, lo vedrai:

C:\Users\user5\Desktop>dir "g*"
 Volume in drive C has no label.
 Volume Serial Number is 900...
 Directory of C:\Users\user5\Desktop
03/08/2014  05:30 PM             1,710 Games.lnk
               1 File(s)          1,710 bytes
               0 Dir(s)  246,818,222,080 bytes free

Posso creare l'equivalente con un collegamento simbolico usando l'opzione \ D (per directory):

C:\Users\user5\Desktop>mklink /D mysymlink  "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G

C:\Users\user5\Desktop>cd mysymlink

C:\Users\user5\Desktop\mysymlink>

(Anche una giunzione di directory (\ J) è un'opzione, poiché si tratta di un collegamento a una cartella.) Esplora risorse di Windows, proprio come questa console e la maggior parte delle applicazioni, ti permetterà di navigare "in basso" in questa sottodirectory apparente, piuttosto che (a) il reindirizzamento "across" in una posizione diversa o (b) non riuscita.

Le scorciatoie non si comportano come sottodirectory. Posso richiamare il comportamento predefinito del file dell'interfaccia utente di Windows con questo comando (questo apre la cartella "G" in Esplora risorse):

C:\Users\user5\Desktop>"Games.lnk"

Considerando che mysymlink è elencato (vedi il conteggio) come una vera sottodirectory e non può essere avviato in questo modo:

C:\Users\user5\Desktop>dir "my*"
 Volume in drive C has no label.
 Volume Serial Number is 900...

 Directory of C:\Users\user5\Desktop

03/29/2014  06:08 PM    <DIR>          mysubdir
03/29/2014  05:40 PM    <SYMLINKD>     mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
               0 File(s)              0 bytes
               2 Dir(s)  246,816,153,600 bytes free

C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.

Al contrario, non è possibile cambiare directory in un collegamento:

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

L'interfaccia utente di Windows consente di fare clic con il pulsante destro del mouse per modificare le proprietà di un collegamento. Oppure, ciò che segue mostra esattamente ciò che è effettivamente memorizzato nel file .lnk (dati binari), sebbene un editor esadecimale visualizzerebbe meglio:

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

Considerando che il tentativo di eseguire Blocco note su una sottocartella effettiva fa apparire un messaggio di errore "Accesso negato" e un Blocco note vuoto.

Al contrario, se creo un collegamento simbolico di file (non un collegamento simbolico di cartella), posso avviarlo con Blocco note. Delle seguenti chiamate notepad.exe, le prime due funzionano e la terza fallisce (apre il file .LNK, il binocolo gobbledegook).

C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt

C:\Users\user5\Desktop>notepad.exe "symplain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"

Questa non è solo una cosa da console. Copiando un collegamento a Notepad sul mio desktop e provando a trascinare e rilasciare ciascuno dei tre su di esso, mostra lo stesso identico comportamento. (Poiché il trascinamento della selezione, a differenza del doppio clic, consente all'applicazione di interpretare il collegamento.)

Per quanto riguarda le differenze tra i collegamenti simbolici della directory e le giunzioni, vedere questa discussione ed ecco una descrizione molto utile :

"Una grande differenza nel modo in cui Windows risolve i collegamenti simbolici e le giunzioni di directory è dove avviene l'elaborazione. Windows elabora i collegamenti simbolici sul sistema locale, anche quando fanno riferimento a una posizione su un file server remoto. Windows elabora giunzioni di directory che fanno riferimento a un telecomando file server sul server stesso. I collegamenti simbolici su un server possono quindi fare riferimento a posizioni accessibili solo da un client, come altri volumi client, mentre le giunzioni di directory non possono. Per risolvere questo problema, Windows Vista supporta il nuovo tipo di collegamento simbolico per entrambi i file e directory.

"Molti comandi del file system sono stati aggiornati per comprendere le implicazioni dei collegamenti simbolici. Ad esempio, il comando Elimina non è in grado di seguire i collegamenti, il che comporterebbe la cancellazione della destinazione, ma invece l'eliminazione del collegamento. Tuttavia, poiché non tutte le applicazioni può gestire correttamente i collegamenti simbolici, la creazione di un collegamento simbolico richiede il nuovo privilegio Crea collegamento simbolico che solo gli amministratori hanno per impostazione predefinita. "


2

"I collegamenti simbolici differiscono dai collegamenti in quanto offrono un percorso trasparente * all'oggetto dati desiderato, con un collegamento (.lnk), qualcosa deve leggere e interpretare il contenuto del file di collegamento e quindi aprire il file a cui fa riferimento (ad es. si tratta di un processo in due fasi. Quando un'applicazione utilizza un collegamento simbolico, ottiene l'accesso immediato all'oggetto dati a cui fa riferimento il collegamento simbolico (ovvero è un processo in un passaggio). "

Fonte: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html


0

A volte è utile avere un esempio funzionale, quindi spiegherò come uso questa funzione.

Uso google drive per eseguire il backup dei file, ma a volte desidero eseguire il backup dei file in una cartella specifica (non riesco a spostarli su ../google drive). Soprattutto con le app universali di Windows 10, i file di configurazione e simili sono archiviati in appdata e la maggior parte delle volte non riesco a cambiare questa posizione.

Uso l'app stikynot nativa di Windows e volevo eseguire il backup delle mie note, quindi ho usato un link simbolico qui. Google Drive riconosce il collegamento come un file reale e sincronizza i file bene, mentre il file effettivo è ancora nella cartella appdata.

Quando ho file come cartelle di progetto localmente che non voglio sincronizzare con il cloud, uso i collegamenti (copia, incolla-> incolla collegamento).

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.