Linkuješ, linkujeme

20. květen 2008 VaDo

Ukázka výpisu SymlinkuWindows Vista zpřítupnily uživatelům další funkcionalitu na úrovni souborového systému. Tím myslím hardlink a symlink. Co to je? Hardlink a Symlink jsou symbolické ukazatele v souborovém systému NTFS, které ukazují na již existující objekt v systému (soubor nebo adresář). Jsou dva, protože jejich funkcionalita je mírně odlišná.

Jak s tím pracovat

Proč to, když máme zástupce? Každý je zná a každý je používá. Ano, ale zástupce není totéž co link na jiný objekt. Zástupce je soubor, který říká systému, co udělat při otevření tohoto souboru (lnk). Takže při poklepání na soubor lnk jej systém přečte, podívá se, co má vlastně udělat (otevřít složku nebo dokument) a potom to také provede.

Kdy se nám Symlink a Hardlink hodí? Příklad je nejlepší. Mám aplikaci, starší, zlobivou, kterou bych chtěl umístit na disk D:\ (třeba mi na C dochází místo), ale ta mrška zlobivá stále hledá původní adresář C:\NEJAKADATA.Co s ní? Není nic jedoduššího. Pomocí Symlink to snadno vyřeším. Adresář D:\NEJAKADATANOVA již mám. Vytvořím prázdný adresář na C:\NEJAKADATA a udělám z nej link na adresář D:\NEJAKADATANOVA. Tento link se chová naprosto transparentně a když zkusíte otevřít zmíněnou složku na disku C:\, uvidíte obsah, ale ten se fyzicky nachází na disku D:\ v již zmíněné složce. Aplikace to neprokoukne a spokojeně začne pracovat.

Jak takový link vytvořit? Pomocí příkazu "mklink" z příkazového řádku. Link se vytváří v místě aktuálního adresáře.

mklink /J NEJAKADATA D:\NEJAKADATANOVA

Link můžu vytvořit i přímo na soubor a to jak relativně i absolutně. Opět si pomůžu příkladem. Mám soubor, který často otvírám, ale je uložen hloboko ve struktuře adresářů. Například: c:\dokumenty\cesty\plány\pláncest.xls. Ale chtěl bych jej otvírat pomocí c:\pc.xls. Opět stačí vytvořit link pomocí příkazu provedeném ve složce c:\:

mklink pc.xls c:\dokumenty\cesty\plány\pláncest.xls

Hotovo, plán cest je možno otevřít pomocí c:\pc.xls a excel se bude tvářit, že pracuje se souborem na disku c:\. Vytvořená link je linkem absolutním, protože ukazuje přesné umístění souboru a pokud link přesunu na jiný disk nebo do jiného adresáře, bude stále pracovat a bude se mi otvírat stále stejný soubor. Zkusme jiný příklad. Chci otvírat například notepad.exe z disku a vytvřím si na něj takovýto link:

Pokud se pokusím otevřít c:\n.exe, spustí se mi poslušně notepad. Ale po přesunu n.exe z disku c:\ na jiné místo, například do adresáře dokumenty, přestane pracovat: hlášení disk nebo zařízení nenalezeno nebo soubor neexistuje. Proč? Protože je to relativní link. Pokud jsem n.exe přesunul například do adresáže c:\bin hledá se soubor notepad.exe, ale relativně k danému umístění, tedy c:\bin\windows\system32\notepad.exe. A tam není.

Toto vše jsou takzvané symbolické linky. Ty mají tu výhodu, že pokud je smažete, nic se nestane s jejich cílem. Dokonce mohou odkazovat (jak jsme ukázali v prvním příkladě) mezi diskovými oddíly. Naproti tomu existují ještě tzv hardlinky. Hardlink má několik výhod. Například můžete na link nastavit jiná oprávnění, než má odkazovaný dokument nebo složka. Symlinku je můžete nastavit také, ale jsou ignorována. Ale pozor, hardlink je místo ve struktuře, které napevno (hard) odkazuje na původní dokument, takže to má několik důsladků:

  • smazání hardlinku neodtraní odkazovaný dokument
  • ale smazání odkazovaného dokumentu jej neodtraní, dokud na něj odkazuje ještě nějaký hardlink.
  • pod existujícím hardlinkem bude dokument stále přístupný.
  • smazání proběhne až při smazání posledního odkazující linku.
  • naproti tomu při smazání cíle pro symlink se skutečně dokument odstraní a při pokusu jej otevřít dostanete pouze hlášení, že císlová složka (soubor) není dostupná.
  • hardlink může odkazovat pouze v rámci jednoho diskového oddílu.
  • hardlink ve výpise pomocí příkazu DIR neuvidíte ozančen jako link a ani Windows Explorer je nebude označovat ručičkou. Je to skutečně fyzický odkaz na svůj cíl - tedy řečeno jazykem NTFS - záznam adresáře na již existují umístění.

S linkování jste se již potkali, pokud jste si na Windows XP nebo na Windows Vista (i Windows 2000 v omezené míře) přesměrovali složku dokumenty nebo obrázky na jiné místo, které Vám více vyhovalo.

Pokud používáte stále ještě Windows XP, nevěště hlavu. Windows XP tuto funkcionalitu také podporují, ale není nativně přístupná uživatelům. Hardlink můžete vytvořit pomocí příkazu

fsutil hardlink

Junction Link MagicPokud chcete vytvářet symbolické linky, musíte použít nějakou utilitku třetí strany. Doporučuji například.Junction Link Magic Mikaela Nordella. Má přehledné grafické rozhraní a umožní i na systémech Windows 2000 a Windows XP provádět to samé, co lze s příkazem mklink ve Windows Vista. Ve Windows Vista jej můžete použít také, pokud nechcete pracovat s příkazovým řádkem.

Použití?

Při přesunu již zaběhnutého adresáře. Data přesunu, ale pomocí Symlinku ponechám původní odkaz v platnosti.

Změna konfiguračních informací pro aplikace. Konfigurační soubory umístím na místo, kde k nim mám přístup a mohu je snadno měnit a aplikaci pomocí symlinku nebo hardlinku je zpřístupním. Pokud mám konfigurací více (například testování), stačí pomocí mklink podstrčit nové umístění a původní konfigurace jsou pro aplikaci nepřístupné

Již zmíněný příklad umíněných aplikací, které stupidně vyžadují nějaké umístění na disku C\, ale tam jechci provozovat. Chci je mít na disku D: Podstrčím jim pomocí symlinku umístění na disku c:\. Aplikace je spokojená, a já také, protože jsem ji ošálil.

Pozor! Neplést si tzv MountPoints - tedy body připojení svazku.

Klíčová slova: hardlink, symlink, Windows XP, Windows Vista

Pokračujte ve čtení

Předchozí
Odkazy