Csatlakozások, összeköttetések és szimbólikus kapcsolatok (hard link, soft link (junction) és symbolic link)

PowerShell 5.0-tól kezdődően lehetőségünk van külső parancssori eszközök nélkül is az NTFS fájlrendszer rejtélyes átjáróit, kapcsolatait kezelni. Elsőként emlékeztetőül egy kis összefoglaló a különböző kapcsolati típusokról:

 

Hard Link

Soft Link (Junction, Reparse Point)

Symbolic Link

Követelmények

A cél objektum (fájl) ugyanazon a köteten kell legyen

A cél objektum (könyvtár) ugyanazon a gépen kell legyen

Bárhol lehet a cél objektum, relatív vagy abszolút elérési úttal vagy UNC eléréssel hálózati megosztás is

Amikor a Windows Explorerből töröljük a kapcsolatot jelző objektumot

A fájl tartalma megmarad, amíg legalább egy hard link-et mutat a fájlra. Utána az adat is törlődik.

A cél könyvtár érintetlen marad.

A cél objektum érintetlen marad.

Amikor a cél objektumot elmozgatjuk

A csatolás továbbra is érvényes lesz.

A csatolás érvénytelen lesz.

A csatolás érvénytelen lesz.

Fájlokra v. könytárakra mutathat

Csak fájlokra

Csak könyvtárakra

Fájlra és könyvtárra is

Egyéb jellegzetesség

 

 

Relatív hivatkozás is engedélyezett

Rendszergazda jogosultság szükséges a létrehozásához

 Mindegyik kapcsolati típust hasonló módon lehet létrehozni. Elsőként nézzünk egy hard link létrehozását:

PS C:\> New-Item -Path C:\PowerShell\Links -Name hardlink.txt -ItemType hardlin

k -Value C:\PowerShell\Links\Target\célfájl.txt

 

 

    Directory: C:\PowerShell\Links

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

-a---l      2016.02.28.     18:49             15 hardlink.txt

Látható, hogy az „igazi” célfájl.txt-re mutató hardlink.txt névvel hoztam létre a csatlakozást. Igazából a hard linkek esetében nincs is értelme „igazi” meg „nem igazi” fájlokról beszélni, minden fájlbejegyzés egyenrangú, láthatjuk is a méretnél is, hogy 15 bájt méretűnek látjuk ezt az objektumot. Ennek ellenére látunk egy „l” betűt a Mode oszlopban, de ha lekérdezzük az fájl attribútumait, akkor ott nem látunk semmi „hard linkségre” utaló információt:

PS C:\> Get-Item C:\PowerShell\Links\hardlink2.txt | ft name, Attributes

 

Name          Attributes

----          ----------

hardlink.txt     Archive

Viszont újabb tulajdonságokat is találunk a fájloknál PowerShell 5.0-tól kezdődően:

PS C:\> Get-Item C:\PowerShell\Links\hardlink.txt | ft name, target, linktype

 

Name          Target                                   LinkType

----          ------                                   --------

hardlink.txt  {C:\PowerShell\Links\Target\célfájl.txt} HardLink

Ha azt mondtam, hogy a hard linkek egyenrangúak az eredeti fájlbejegyzéssel, akkor ez a Target és LinkType tulajdonság honnan jön? Ezeket a GetFileInformationByHandle Win32 API hívás deríti ki valószínűleg a háttérben, és ha megnézzük az „eredeti” fájlt, ott ugyanezen adatok tükörképét látjuk:

PS C:\> Get-Item C:\PowerShell\Links\Target\célfájl.txt | ft name, target, link

type

 

Name        Target                              LinkType

----        ------                              --------

célfájl.txt {C:\PowerShell\Links\hardlink.txt}  HardLink

A Target tulajdonságban látjuk tehát az összes többi hivatkozást ugyanerre a fájlra.

A könyvtárak becsatolása sokkal egyszerűbb történet. A csatolás létrehozása nagyon hasonló a hard linkhez, csak az ItemType itt junction:

PS C:\> New-Item -Path C:\PowerShell\Links -Name junctionkönyvtár -ItemType jun

ction -Value C:\PowerShell\Links\Target

 

 

    Directory: C:\PowerShell\Links

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

d----l      2016.02.28.     19:09                junctionkönyvtár

Az elem tulajdonságai is hasonlóak:

PS C:\> Get-Item C:\PowerShell\Links\junctionkönyvtár | ft name, Target, LinkTy

pe

 

Name             Target                       LinkType

----             ------                       --------

junctionkönyvtár {C:\PowerShell\Links\Target} Junction

Míg a hard linkeknél a Target több elemből is állhat, ha ugyanarra a fájlra több hard link is mutat, addig a junction-nél mindig csak egy Target lesz.

A szimbolikus kapcsolatok is hasonlóak a csatolásokhoz, itt fájlokhoz és könyvtárakhoz is létrehozhatunk kapcsolatokat:

PS C:\> New-Item -Path C:\PowerShell\Links -Name symlink.txt -ItemType symbolic

link -Value C:\PowerShell\Links\Target\célfájl.txt

 

 

    Directory: C:\PowerShell\Links

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

-a---l      2016.02.28.     19:10              0 symlink.txt

 

 

PS C:\> New-Item -Path C:\PowerShell\Links -Name symlinkkönyvtár -ItemType symb

oliclink -Value C:\PowerShell\Links\Target

 

 

    Directory: C:\PowerShell\Links

 

 

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

d----l      2016.02.28.     19:10                symlinkkönyvtár

Az új tulajdonságok is teljesen a vártnak megfelelően alakulnak:

PS C:\> dir C:\PowerShell\Links\sym* | ft name, Target, LinkType

 

Name            Target                                   LinkType

----            ------                                   --------

symlinkkönyvtár {C:\PowerShell\Links\Target}             SymbolicLink

symlink.txt     {C:\PowerShell\Links\Target\célfájl.txt} SymbolicLink



Word To HTML Converter