Visualizzazione post con etichetta collegamenti reali. Mostra tutti i post
Visualizzazione post con etichetta collegamenti reali. Mostra tutti i post

martedì 21 febbraio 2017

Windows Quick Tip: Creare Symbolic link e junction tramite il comando MKLINK

In tutti i file system moderni è possibile creare un Symbolic Link (Collegamento Simbolico): un collegamento di tipo avanzato a file e cartelle presenti generalmente in altri percorsi.  Anche se concettualmente simili ai collegamenti tradizionali con estensione .lnk, i Symbolic Link si differenziano da questi ultimi in quanto sono un tipo di oggetto del file system (come lo sono file e cartelle) mentre i link tradizionali sono oggetti della shell.

Per chiarire la differenza tra i due tipi di collegamento possiamo fare un'esempio pratico: provando a copiare un link tradizionale con estensione .lnk su una pendrive, verrà copiato il collegamento stesso e non il file puntato. Ciò avviene in quanto, come precedentemente accennato, i collegamenti .lnk sono riconosciuti solo a livello di shell ma non dal file system sottostante. Eseguendo la stessa operazione con un collegamento simbolico verrà, invece, copiato il file puntato e non il suo puntatore.

La possibilità di creare link simbolici è stata introdotta nel file system NTFS a partire da Windows 2000 tuttavia l'utility linkd.exe necessaria per la creazione di questo tipo di collegamenti non veniva fornita insieme al sistema operativo ma era necessario procurarsi il Resource Kit; inoltre era possibile creare link simbolici solo alle cartelle e non ai file.

Da Windows Vista in poi, l'utility a riga di comando per la creazione dei collegamenti simbolici è stata integrata all'interno del sistema operativo e prende il nome di mklink. Anche il sistema operativo fa uso dei collegamenti simbolici come ad es. le cartelle Programmi e Documents and Settings utilizzate nelle recenti versioni di Windows.

Per visualizzare i collegamenti simbolici presenti all'interno di una cartella basta utilizzare il comando
dir /al

Collegamenti simbolici utilizzati da Windows
FIG 1 - Collegamenti simbolici utilizzati da Windows

Come si può notare dalla FIG 1, nella root del disco di sistema sono presenti 2 collegamenti simbolici (di tipo junction): Documents and settings che punta alla cartella c:\Users e Programmi che punta alla cartella C:\Program Files. I collegamenti simbolici possono essere di tipo:
- JUNCTION  nel caso di giunzioni;
- SYMLINK  nel caso di collegamento simbolico a file;
- SYMLINKD  nel caso di collegamento simbolico a directory.

La creazione di link e junction in ambiente Windows non è molto diffusa, probabilmente perché è necessario agire tramite riga di comando e non tramite GUI (a meno che non si utilizzano programmi di terze parti). La creazione di link simbolici avviene tramite il comando mklink eseguito dal prompt dei comandi come amministratore.

La sintassi del comando mklink è molto semplice:

MKLINK [[/D] | [/H] | [/J]] Collegamento Destinazione
 /D      Crea un collegamento simbolico a una directory. L'impostazione predefinita è il collegamento simbolico a un file.
 /H      Crea un collegamento reale anziché un collegamento simbolico.
 /J      Crea una giunzione di directory.
Collegamento    specifica il nome del nuovo collegamento simbolico.
Destinazione    specifica il percorso (relativo o assoluto) a cui fa riferimento il nuovo collegamento.


Come è possibile notare dalla sintassi del comando esistono diversi tipi di link: collegamento simbolico, collegamento reale e junction (giunzione).

I collegamenti simbolici e le giunzioni vengono anche chiamati Soft Link mentre i collegamenti Reali sono chiamati Hard Link.


Soft Link
I Soft Link consentono di linkare file e cartelle presenti sullo stesso volume o su volumi diversi. Le differenze sostanziali tra collegamenti simbolici e giunzioni sono:
  • I collegamenti simbolici possono essere creati anche per i file oltre che per le cartelle mentre le giunzioni sono possibili solo per le cartelle;
  • I collegamenti simbolici utilizzano sia percorsi relativi che assoluti mentre le giunzioni lavorano esclusivamente con i percorsi assoluti.


Hard Link
Gli Hard Link sono associazioni N:1 tra un nome del file e i dati che esso contiene. Questo tipo di collegamenti consente di creare più nomi di file che puntano allo stesso oggetto dati sul disco. Ogni oggetto dati ha al suo interno un contatore di quanti file fanno riferimento ad esso. L'oggetto dati verrà rimosso solo quando tutti i riferimenti verranno eliminati.
Ad es.
Creando un Hard Link al file notepad.exe questo verrà visualizzato come fosse un file eseguibile a se stante. Cancellando il file eseguibile originale, notepad.exe, l'Hard Link continuerà a funzionare.


Alcuni esempi:

Esempio 1
MKLINK "Collegamento Immagine" c:\immagine.jpg
Crea un collegamento chiamato Collegamento Immagine al file c:\immagine.jpg

Esempio 2
MKLINK /D "Collegamento Temp" c:\temp
Crea un collegamento chiamato Collegamento Temp alla cartella c:\temp. Come si evince dal comando, per creare il collegamento ad una cartella è necessario specificare l'argomento /D.

Esempio 3
MKLINK /H "NotePad HL.exe" Notepad.exe
L'argomento /H permette di creare un collegamento reale (Hard Link): un nuovo puntatore al file che ha lo stesso valore del percorso originale. Un Hard Link deve risiedere sullo stesso volume del file originale ed è possibile creare più Hard Link ad uno stesso file. Ogni file è collegato almeno ad un Hard Link che è il percorso originale. L'Hard Link continuerà ad esistere e a funzionare anche se il file originale viene cancellato.

Esempio 4
MKLINK /J d:\Cartella1 c:\temp
Con l'argomento /J è possibile creare una junction (o giunzione), ossia un collegamento ad una cartella che può essere memorizzato anche su un volume diverso.


Creazione collegamenti simbolici e collegamenti reali
FIG 2 - MKLINK, Creazione collegamenti simbolici e collegamenti reali


Visualizzazione collegamenti simbolici
FIG 3 - Visualizzazione collegamenti simbolici