MegaLab.it
Stampa Articolo
Aperiodico gratuito di informatica
 
20090623201245_1786543372_20090623201227_544350705_HardLinkSpotlight.png

Guida completa ad hard link ed altri collegamenti avanzati in Windows

a cura di Zane
03/03/2010 - articolo
Trucchi & Suggerimenti - Windows consente di creare diversi tipi di collegamento, non solo quello "classico" e raggiungibile dall'interfaccia grafica. Passiamo in rassegna le varie tipologie disponibili, le loro differenze ed i comandi per crearli. Non amate il prompt di comando? presentiamo una una comoda utilità che rende disponibile il tutto nel menu contestuale.

Sono spiacente se avete raggiunto questo articolo pensando di trovare "link" a contenuti "hard". In questo pezzo non tratteremo materiale piccante, ma piuttosto una funzionalità presente in Windows Vista e successori che consente di creare collegamenti a file e cartelle presenti sulle unità di memorizzazione in modo molto più efficace rispetto al consueto Crea collegamento.

Di cosa si tratta

Tutti conosciamo il funzionamento dei collegamenti di Windows "classici": sono quelli piazzati sul desktop o inseriti nel menu avvio dalle nuove applicazioni installate, o che possiamo creare accedendo alla omonima voce del menu contestuale di file e cartelle.

Questi collegamenti sono piccoli file con estensione ".lnk" che contengono semplicemente un "rimando" all'oggetto puntato

Proprieta_lnk.jpgSebbene possano avere la propria utilità per raggiungere rapidamente le destinazioni più frequenti o gli applicativi dal menu avvio, hanno anche alcuni limiti significativi.

Pensate ad esempio alla circostanza in cui realizzate una copia del collegamento: cosa viene copiato? il collegamento medesimo o la destinazione puntata? e se tale operazione viene compiuta all'interno di un backup? ed eliminando il piccolo file, si rimuove il collegamento o l'oggetto a cui esso fa riferimento? e modificando i privilegi di accesso?

Come qualunque appassionato ben sa, tutte le operazioni eseguite sui collegamenti non hanno alcuna ripercussione sugli oggetti a cui questi fanno riferimento.

Fortunatamente, i file .lnk sono solo uno di molteplici tipi di collegamento realizzabili: in particolare, esistono anche altre declinazioni di collegamento, ognuna con punti di luci ed ombre.

Quale versione?

Tutte le funzionalità illustrate di seguito (eccezion fatta per i Symbolic link) sono disponibili anche con Windows XP.

Sotto il vecchio sistema operativo Microsoft però, le cose non funzionano proprio nel modo migliore, e in rete sono stati segnalati numerosi problemi e bug a gravità variabile.

Inoltre, il comando mklink trattato di seguito non è disponibile in tale versione.

Per questi motivi, il presente articolo si concentra unicamente su Windows Vista e successivi.

Come crearli

Interessati? Bene, possiamo iniziare la trattazione.

Windows non consente di creare collegamenti avanzati dall'interfaccia grafica: chi volesse avvalersi di tale funzionalità, deve quindi aprire un prompt di comando amministrativo ed impartire il comando mklink seguito dagli opportuni parametri

Mklink.jpg

Nelle prossime pagine, li analizzeremo singolarmente. Per il momento, notate soltando che un regolare prompt di comando non è sufficiente: se non ne utilizzate specificatamente uno amministrativo, il comando mklink ritornerà l'errore Non si dispone di privilegi sufficienti per eseguire questa operazione. al primo tentativo di creare un collegamento avanzato.

Symlink (Symbolic link)

Detti anche "soft link", i link simbolici sono facilmente confondibili con i collegamenti tradizionali.

Al contrario di questi ultimi però, sono file completamente trasparenti: questo significa che, in caso un applicativo tentasse di operare su un Symlink, la richiesta di accesso verrà rediretta in modo del tutto invisibile al file di destinazione.

Al contrario, utilizzando un collegamento "classico", è necessario che l'applicazione interpreti il contenuto del file .lnk, e quindi segua il percorso indicato nel collegamento.

In altre parole, mentre i Symbolic Link vengono interpretati automaticamente dal file system, i file .lnk sono documenti tradizionali, che devono quindi essere "capiti" dall'applicazione che intende utilizzarli.

La differenza è senza dubbio sottile, ma comunque importante: il tutto diverrà più chiaro nel corso delle prove pratiche.

Come realizzarli

Per realizzarli, è necessario usare il comando mklink NomeSoftLink.estensione PercorsoDelFile

Softlink mklink.jpg

Per la mia prova ho impartito il comando mklink SoftLink.jpg "D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione\DSCN1323.JPG", realizzando di fatto un soft link sul desktop al file D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione\DSCN1323.JPG.

Aspetto

Il soft link viene visualizzato come un collegamento tradizionale: graficamente, questo tipo di oggetto (a sinistra, nell'immagine) non è distinguibile da un qualsiasi altro link classico realizzato utilizzando l'interfaccia grafica (sulla destra)

Softlink_look.jpg

Proprietà

Piuttosto difficile ragionare invece sulle proprietà (a sinistra il soft link, al centro un collegamento lnk tradizionale, a destra il file di destinazione)

Softlink_lnk_prop.jpg

Mentre la dimensione del collegamento è di soli pochi byte, le proprietà del soft link riportano 0 byte: il comportamento è quantomeno insolito, poiché ci si aspetterebbe che venisse visualizzato o un pugno di byte, o, ancora più precisamente, la dimensione del file di destinazione.

Da notare inoltre l'attributo Tipo di file: se per il collegamento è indicato Shortcut (.lnk), per il soft link leggiamo la stessa tipologia del documento referenziato.

Al contrario di quanto avviene per il collegamento inoltre, la scheda Collegamento propone solamente campi disabilitati e non modificabili, al contrario del collegamento tradizionale

Softlink_blocked.jpg

Modifica del file

Tutte le modifiche apportate aprendo il file mediante il suo soft link si ripecutono sul documento puntato, proprio come avviene utilizzando il collegamento tradizionale.

Rinominando il collegamento viene effettivamente modificato solo il riferimento, e non il file puntato, proprio come al solito.

Copia

Una delle differenze più significative la notiamo tentando di copiare il collegamento tradizionale ed il soft link in un'altra posizione.

Mentre con il primo è semplicemente il collegamento ad essere copiato, copiando il softlink si crea di fatto una copia a sé stante del file precedentemente referenziato

Softlink_copy.jpg

Il nuovo file perde qualsiasi riferimento alla sorgente: alterando la copia, le modifiche non si riflettono in alcun modo sull'originale.

Spostamento

Niente da segnalare invece per lo spostamento: al contrario della copia, spostando il soft link viene spostato solamente il collegamento

Softlink_move.jpg

Cancellazione

La cancellazione del soft link non sortisce alcun effetto, se non quello di rimuovere l'oggetto stesso.

Il file originale rimane al proprio posto.

Anche a directory, su volumi diversi o su percorsi di rete

Il limite più stringente dei soft link? possono essere utilizzati solamente su file system NTFS: la vecchia FAT è quindi esclusa.

Per il resto, soft link come questi possono riferisi anche a file memorizzati su partizioni o dischi fissi differenti da quello su cui risiede il collegamento.

Tali percorsi possono essere locali o di rete: in questo secondo caso però, è necessario che anche l'host di destinazione monti Windows Vista o successivi.

È possibile creare anche link simbolici a directory: ne parliamo alla prossima pagina.

Symbolic link a cartelle

I Symlink possono essere riferiti sia a file, come appena visto, sia a directory.

Per quanto riguarda la maggior parte degli aspetti, il funzionamento dei soft link riferiti a cartelle ricalca quanto appena visto per i file regolari.

Come crearli

Per realizzare un symlink riferito ad una directory, è necessario aggiungere il parametro /D al comando visto, che diventerà quindi qualcosa del tipo mklink /D NomeDaAssegnareAlLink PercorsoCartellaDiDestinazione

Symlink_dir mklink.jpg

Sul mio PC ho impartito mklink /D SymTest "D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione", realizzando di fatto un symlink sul desktop alla cartella di prova D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione.

Aspetto

Il nuovo soft link viene visualizzato come un semplice collegamento ad una cartella: non v'è modo di distinguere "a colpo d'occhio" questo tipo di oggetto (a sinistra, nell'immagine) da un qualsiasi altro collegamento realizzato nel modo tradizionale (sulla destra)

Junction_look.jpg

Proprietà

Sono invece evidenti le differenze nelle proprietà (a sinistra il symlink, al centro un collegamento .lnk tradizionale, a destra la cartella di destinazione)

Junction_lnk_prop.jpg

Si noti in particolare che, mentre la dimensione del collegamento è di soli pochi byte, le proprietà del symlink riportano esattamente le stesse dimensioni della cartella cui fa riferimento.

Allo stesso modo, mentre il tipo di file del collegamento è segnalato come Shortcut (.lnk), per il symlink leggiamo File folder, proprio come avviene per la cartella reale.

È importante ricordare però che si tratta di un link! i file qui memorizzati infatti, non occupano alcuno spazio addizionale rispetto a quelli contenuti nella cartella di destinazione.

Percorsi

Interessante notare come vengono gestiti i percorsi: mentre aprendo il symbolic link ci si trova effettivamente all'interno dello stesso (d:\Zane\Desktop\SymTest, si legge nel mio caso), lanciando il file .lnk si viene semplicemente rimandati alla cartella di destinazione

Junction_paths.png

Modifica dei file contenuti

Così come succede con un collegamento normale, trascinando file all'interno di un symlink a directory, il nuovo documento viene effettivamente creato nella cartella di destinazione.

Allo stesso modo, aggiungendo un file nella cartella di destinazione, questo viene immediatamente visualizzato anche all'interno di SymTest.

Modifica, rinomina e cancellazione dei file (accedendo da una qualsiasi delle due cartelle) mostrano immediatamente i propri effetti anche nell'altra directory.

Copia

Ma la differenza principale la notiamo sicuramente tentando di copiare il collegamento .lnk e il symlink in un'altra posizione.

Mentre con il primo è semplicemente il collegamento ad essere copiato, duplicando il symlink si crea una nuova cartella a sé stante contenente tutti i file di quella precedentemente referenziata

Junction_copy.jpg

La nuova cartella perde però qualsiasi riferimento alla sorgente: modificando o cancellando i file al suo interno, le modifiche non si riflettono in alcun modo sulla directory dalla quale l'avevamo creato in origine.

Spostamento

Come già per la copia, spostando SymTest vengono spostati tutti i file dalla posizione originale.

Anche in questo caso, non sembra rimanere alcuna traccia del legame: il symlink diviene una cartella tradizionale a tutti gli effetti.

Interessante notare però che il symlink sul desktop rimane: è solamente il contenuto ad essere spostato.

Cancellazione

Contrariamente a quanto ci si potesse aspettare, la cancellazione del symlink non sortisce alcun effetto, se non quello di rimuovere l'oggetto stesso.

I file contenuti nella cartella puntata rimangono inalterati.

Su NTFS, anche in rete

Per il resto, valgono le stesse indicazioni fornite per i symlink a singoli file: possono essere utilizzati solamente su file system NTFS e possono referenziare anche directory memorizzate su partizioni o dischi fissi, locali o di rete, differenti da quello su cui risiede il collegamento.

Junction

I junction (letteralmente: "incrocio") altro non sono che una versione meno avanzata dei Symlink (sebbene, nonostante molte fonti sostengano il contrario, si tratti di una tipologia di oggetto ben distinta da questi ultimi).

Come tali, funzionano in tutto e per tutto come soft link, ma esibiscono i seguenti limiti:

Per realizzarli, è necessario usare il comando mklink /J NomeDaAssegnareAlJunction PercorsoDiDestinazione

Junction mklink.jpg

Nel mio esempio test ho impartito il comando mklink /J SymTest "D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione", realizzando di fatto un junction alla cartella di prova D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione.

Non mi dilungo ulteriormente sull'argomento: il funzionamento pratico ricalca appieno quello dei symlink a directory trattati alla pagina precedente.

Hard link

Gli hard link sono probabilmente il tipo di collegamento più interessante, e, allo stesso tempo, il più differente dai link tradizionali.

Per capire di cosa si tratta, si pensi al mondo con cui siamo abituati a pensare ai file su memoria di massa: ogni documento è caratterizzato da un certo nome

Hard link_explain_1.png

Ma... chi vieta di assegnare due nomi differenti allo stesso file? Se il file system sottostante è in grado di gestire tale possibilità, assolutamente nessuno! Ecco quindi che ci si ritrova in una situazione di questo tipo

Hard link_explain_2.png

In tale scenario, i dati sono raggiungibili utilizzando indistintamente uno qualsiasi dei due nomi assegnati.

Come realizzarli

Per realizzare un hard link, è sufficiente usare il comando mklink /H NomeDaAssegnareAlFile.estensione PercorsoDelFileOriginale

Hardlink mklink.jpg

Sul mio PC ho impartito mklink /H MioHardLink.jpg "D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione\DSCN1323.JPG", realizzando di fatto un hard hard link sul desktop al file D:\Web\MegaLab.it\test\test_zane\Spazio di prova link\CartellaDestinazione\DSCN1323.JPG.

Aspetto

Il nuovo hard link viene visualizzato a tutti gli effetti come un vero e proprio file a sé stante, sprovvisto quindi della freccia ricurva che identifica i collegamenti, presente invece nel file .lnk tradizionale (catturato sulla destra)

Hardlink_look.jpg

Proprietà

Anche le proprietà non rivelano alcun indizio circa la natura del file

Hardlink__lnk_prop.jpg

Si noti in particolare l'attributo Tipo di file e quello Dimensioni della prima e dell'ultima finestra (relative, rispettivamente, all'hard link e al file originale): sono esattamente le stesse.

Anche l'osservatore più attento potrebbe scambiare l'hard link per una semplice copia del file originale: così non è! l'hard link ed il file originale, tanto per evidenziare una differenza cruciale rispetto alla copia, occupano infatti solamente 1.16 MB, e non 2.32 MB come potrebbe sembrare.

D'altro canto, anche la shell stessa viene tratta in inganno copiando hard link e file originale all'interno di una stessa cartella!

Hardlink_folder_gambled.jpg

Ma, niente paura, il file è in vero occupato una volta sola.

Per averne una riconferma, ho realizzato uno script che crea un migliaio di hard link ad uno stesso file da 800 MB all'interno di una sola cartella: la buffa situazione è che la dimensione indicata per la directory in questione (più di 800 GB), parrebbe essere superiore alla capienza complessiva del disco fisso stesso!

Hardlink_folder_verygambled.jpg

Modifica del file

Ma per rendersi conto che stiamo parlando dello stesso file, è sufficiente apportare una modifica ad uno dei due, e quindi aprire l'altro per notare i medesimi cambiamenti

Hardlink_edit.jpg

Copia, sposta e rinomina

Nessuna ripercussione invece in caso si tentasse di rinominare uno dei due file o spostarlo di posizione: in particolare, anche muovendo la sorgente originaria, l'hard link resta comunque valido e funzionante, proprio perché, come detto in apertura, sono "i dati" ad essere referenziati, e non il singolo file originale.

Cancellazione

Cancellando uno dei due file, l'altro file rimane comunque disponibile: come è possibile?

Il file system mantiene traccia di quanti "nomi" stanno ancora referenziando i dati in questione tramite un contatore interno, e non libera l'area di memorizzazione fino a quando questo contatore non arriva a zero.

Una volta cancellato anche il secondo file d'altro canto, lo spazio viene liberato come ci si aspettava.

Curioso notare che, cancellando il file originale, sull'hard link compare un piccolo lucchetto e ne vengono limitati i privilegi agli utenti amministratori

Hardlink_alone.jpg

Solo a file, e sullo stesso volume

Contrariamente agli altri tipi di collegamento, gli hard link sono soggetti ad alcuni vincoli

Se quanto detto fino ad ora vi intriga ma non siete avvezzi alla linea di comando, niente paura: grazie ad una pratica utilty gratuita di nome Link Shell Extension è possibile portare in punta di click tutte le funzionalità relative ai collegamenti avanzati.

LinkShellExt.2.png

Una volta scaricato ed installato il programma (prestando bene attenzione ad utilizzare l'opportuna versione a 32 oppure 64 bit, ed installare preventivamente il componente Microsoft Visual C++ runtime libraries), si potrà accedere alle funzionalità offerte mediante il menu contestuale di file e cartelle.

Come funziona per le cartelle

La prima operazione da svolgere consiste nel cliccare sull'oggetto a cui si desidera realizzare un collegamento avanzato (ad esempio, una cartella) e quindi selezionare Pick Link Source

LinkShellExt.1.png

A questo punto, richiamando il menu contestuale della destinazione, sarà sufficiente espandere Drop As... per realizzare uno dei link discussi in precedenza

LinkShellExt.2.png

Oltre a quanto presentato nelle pagine precedenti, sono presenti anche:

Interessante notare che, creando un Junction, il programma sovraimprime un'icona distintiva all'oggetto (una piccola catena), facilitandone senza dubbio il riconoscimento

LinkShellExt.5.png

Come funziona per i file

Allo stesso modo, è possibile agire anche su singoli file

LinkShellExt.6.png

Il menu Drop As... propone ora solo la possibilità di creare Hard link e Symlink

LinkShellExt.7.png

Gli hard link realizzati dal programma sono contraddistinti da un icona di collegamento colorata di rosso, e, fra le proprietà, viene mostrato il numero e la posizione di riferimenti all'informazione in questione (l'icona rossa viene mostrata però anche sul file originale)

LinkShellExt.8.png

Impressioni generali

L'utilità è sicuramente molto interessante: non fosse per la comodità di rendere disponibile la creazione di link avanzati in punta di click, l'icona distintiva applicata a Junction e Hard link è la vera ciliegina sulla torta.

Peccato non sia (ancora?) presente un'icona distintiva anche per i soft link, o sarebbe davvero "un must" per ogni appassionato.

I più attenti all'uso delle risorse saranno felici di sapere che Link Shell Extension non crea alcun processo attivo in background: di fatto, questo significa che l'utility non grava in alcun modo sulle risorse disponibili.

Di seguito una tabella riassuntiva dei vari tipi di collegamento

Collegamenti .lnk Hard link Symlink / soft link / link simbolici

Junction
Creazione via interfaccia grafica No No No
File system supportato FAT/NTFS NTFS NTFS NTFS
Riferibili a directory No
Riferibili a file No
Fra partizioni diverse No
Riferibili ad uniità di rete No No
Su copia Copia collegamento Copia file Copia file/dir Copia file
Su spostamento Sposta collegamento Sposta collegamento Sposta file/dir Sposta file
Su cancellazione Elimina collegamento Elimina collegamento Elimina collegamento Elimina collegamento

Spunti di utilizzo

Ma come trarre pieno vantaggio dai link link avanzati trattati in questo articolo?

In linea di massima, ricordate che potete sfruttare questi strumenti tutte le volte che desiderate disporre di un file o una cartella in una posizione differente da quella in cui risiede, avendo la certezza che qualsiasi operazione di copia o spostamento che doveste apportare al collegamento verrebbe automaticamente propagata sui file originali.Related_1.jpg

Una prima idea potrebbe essere quella di spostare un'applicazione già installata su un altro disco fisso senza bisogno di reinstallare: ne parlo nell'articolo "Spostare le applicazioni senza reinstallare, grazie ai symlink".

Un secondo spunto per l'utilizzo dei collegamenti avanzati? salvare in una cartella fuori dai piedi un hard link a tutti i file più importanti: questo vi metterebbe al sicuro da eventuali cancellazioni accidentali dei file, pur senza costringervi a pianificare un backup ed avendo la sicurezza che il link farebbe riferimento sempre all'ultima versione delle informazioni. Attenzione, però: tale pratica mette al riparo solo dalla cancellazione, non da eventuali modifiche distruttive!

Sempre in tema di backup, potrebbe essere comodo raggruppare in una sola cartella i symlink a tutti i file e le cartelle da proteggere, e quindi configurare l'applicativo di backup per salvare tutto e solo il contenuto di tale directory.Related_2.jpg

Un'altra idea potrebbe essere quella di sfruttare i link simbolici per creare una voce all'interno del menu start in grado di rendere disponibili immediatamente tutti i file presenti in una determinata cartella: l'operazione è dettagliata in "Creare una cartella dinamica nel menu start".

Avete altre idee? Condividetele utilizzando i commenti.

Sebbene i collegamenti avanzati descritti fino ad ora siano stati presentati nel contesto del sistema operativo Windows, non sono affatto una tecnologia inventata da Microsoft: nel mondo UNIX sono presenti fin dagli albori, nei primi anni ottanta.

Tutti gli strumenti funzionano grossomodo come le proprie controparti Windows: quello che cambia è solamente il modo di creare il collegamento.

Symbolic link

Il comando da impartire da shell è ln -s CartellaOFileDiDestinazione NomeDelSymlink.

Lo stesso strumento è disponibile anche utilizzando Cygwin.

Junction

I Junction sono oggetti presenti solamente nel mondo Windows.

Come già detto, tali oggetti sono comunque versioni meno flessibili dei Link simbolici a directory: gli interessati dovranno quindi utilizzare tali costrutti quando si trovano ad operare sotto UNIX/Linux.

Hard link

Il comando da impartire da shell è ln CartellaOFileDiDestinazione NomeDelSymlink. In altre parole, ln, visto anche in precedenza, crea un hard link per impostazione predefinita.

Utilizzando ls -l è possibile visualizzare il numero di riferimenti ai dati presenti nella cartella corrente.

Tali possibilità sono fedelmente ricreate anche all'interno dell'ambiente Cygwin.

MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .

Copyright 2008 MegaLab.it - Tutti i diritti sono riservati