Naučte se pracovat se symbolickými a pevnými odkazy

Windows Vista a samozřejmě i Windows 7 obsahují podporu tzv. symbolických odkazů, pevných odkazů a spojení adresářů. Ukážeme si, že mohou být velmi užitečné a čeho můžete díky nim dosáhnout.

Pokud jste dříve přišli do styku s některým z unixových operačních systémů, možná tušíte, že na úrovni souborového systému lze vytvářet tzv. symbolické odkazy (symbolic links, symlinks) a pevné odkazy (hard links). Obdobně je tomu i ve Windows. Principy fungování symbolických i pevných linků se mezi těmito dvěma světy téměř neliší. Ve světě Windows se navíc můžete setkat s pojmem spojení adresáře (junction).

Vy, kteří slyšíte tyto pojmy poprvé nezoufejte, vše si vysvětlíme a ukážeme několik příkladů, které si můžete sami vyzkoušet. Předpokladem pro práci s odkazy je Windows Vista a novější, který je prvním systémem Microsoftu s jejich podporou. V tomto ohledu tedy Windows oproti unixovému světu lehce zaspala.

Zástupce

Začněme zlehka u struktury, kterou všichni důvěrně známe již dlouhá léta – zástupce. Připomeňme si jeho charakteristické znaky a čeho lze jeho použitím dosáhnout. Zástupce je soubor s příponou .LNK odkazující na jiný soubor nebo složku na libovolné diskové či síťové jednotce. Prakticky všechny položky nabídky Start jsou právě zástupci. Stejně tak pravděpodobně i vaše pracovní plocha obsahuje několik z nich. Poznáte je podle typického symbolu šipky v levé spodním rohu vyobrazení ikony. Obsahem souboru samotného zástupce je informace o umístění souboru či složky, na kterou odkazuje. Stejně tak nese i informaci o své ikoně a velikosti okna v jakém se má odkazovaný soubor nebo složka otevřít – normální, maximalizované okno atd. Smazání zástupce nemá žádný vliv na cílovou odkazovanou strukturu (soubor či složku), přičemž na strukturu může odkazovat bez problémů i více zástupců zároveň. Odkaz i cílová struktura se mohou nacházet na libovolných diskových oddílech či dokonce na síti.

Symbolický odkaz

Symbolický odkaz je principem svého fungování podobný klasickému zástupci. Odkazuje na soubor či složku a je stejně jako zástupce je reprezentován souborem. Tentokrát s tím rozdílem, že do jeho obsahu nelze zasahovat. Měli byste také myslet na to, že diskový oddíl na němž je samotný symbolický odkaz uložen musí být typu NTFS. Pro odkazovaný cílový soubor čí složku toto omezení neplatí. Sliboval jsem příklady, takže pojďme směle na ně.

Pro vytvoření tohoto odkazu slouží příkaz mklink, který se poprvé objevil ve Windows Vista. Pro jeho spuštění budete potřebovat administrátorské oprávnění, proto spusťte příkazový řádek cmd.exe v Režimu správce.

První ukázka zachycuje vytvoření symbolického odkazu s názvem n.exe v existující složce C:\Linky, který odkazuje na spustitelný .EXE soubor Poznámkového bloku z Windows. Do příkazového řádku v Režimu správce zadejte mklink C:\Linky\n.exe C:\Windows\system32\notepad.exe. Ve výpisu příkazu dir C:\Linky\ poznáme podle označení <SYMLINK>, že n.exe je ve skutečnosti odkaz. Navíc je reprezentován souborem, takže jeho odstranění provedete prostým smazáním del C:\Linky\n.exe.

Kompletní sled výše popsaných příkazů zachycuje obrázek níže.

Doplněním přepínače tentokrát příkazem mklink /D C:\Linky\fav C:\Users\Jirka\Favorites vytvoříme symbolický odkaz na složku s oblíbenými položkami uživatele Jirka . Příkazy cd C:\Linky\fav a dir si ověřte, že se opravdu vypíší všechny oblíbené webové stránky.

Poznávacím znamením symbolického linku na složku je označení typu <SYMLINKD> ve výpisu příkazu dir C:\Linky\. Ke smazání odkazu na ukázkovou složku použijte příkaz rd C:\Linky\fav. Výpis si můžete prohlédnout níže.

Pevný odkaz

Zatímco symbolický link slouží pouze jako ukazovátko na soubor či složku, pevný odkaz (hard link) lze vytvořit pouze mezi dvěma soubory. Vazba mezi nimi je o poznání důkladnější. Vytvoříme-li pevný odkaz C:\Pevnylink.doc na existující dokument C:\Návody\Odkazy.doc, vznikne vlastně druhá cesta k témuž souboru. Přičemž obě budou odkazovat na stejný soubor, který je na pevném disku fyzicky uložen pouze jednou a zabírá tedy místo na disku pouze jednou. Ať už tedy upravíte text dokumentu C:\Návody\Odkazy.doc či v jeho pevném odkazu C:\pevnylink.doc, budou vždy viditelné z obou umístění. Tuto vazbu vytvoříte příkazem mklink /H C:\Pevnylink.doc C:\Návody\Odkazy.doc.

Zásadní rozdíl oproti symbolickým odkazům spočívá v tom, že v pevné odkazy je možné vytvářet pouze v rámci téhož diskového NTFS oddílu. Liší se i postup při odstraňování souboru a jeho pevného linku. Ve skutečnosti totiž při smazání původního dokumentu C:\Návody\Odkazy.doc zůstává obsah souboru fyzicky stále uložen na pevném disku, protože na něj stále ukazuje pevný odkaz C:\Pevnylink.doc. Dokud neprovedeme smazání pevného linku, bude obsah souboru přes pevný odkaz i nadále přístupný.

Smazání pevného odkazu proveďte příkazem del C:\Pevnylink.doc.

A jak to všechno využít v praxi? Nelíbilo by se vám například přistupovat k hosts souboru přímo přes C:\hosts? Pomůže vám příkaz ve tvaru mklink /H C:\hosts C:\windows\system32\drivers\etc\hosts.

Veškeré operace mazání souborů a odkazů můžete samozřejmě provádět i z grafického rozhraní Průzkumníka.

Spojení adresářů

Zajímavější uplatnění můžete najít pro techniku Spojení adresářů (Junction). Opět jde o dvě cesty ke složce, která je fyzicky na pevném disku uložena jednou. Jde tak trochu o obdobu symbolického linku.

Praktické použití může být následující. Na externím pevném disku v umístění K:\Data\Audio\ máte hudbu, kterou byste rádi viděli jako složku C:\Hudba. Příkazem mklink /J C:\Hudba K:\Data\Audio docílíte přesně tohoto požadavku.

Otevřením složky Hudba na disku C: se rázem transparentně dostáváte přímo na externí disk. Podobně si můžete zpřístupnit například složku pracovní plochy nebo jakoukoliv jinou.

Spojení adresářů můžete zrušit například nástrojem Junction Link Magic.

Published by

Jiri Brejcha

Jiri is passionate about mobility ranging from Wi-Fi to folding bikes;-) He is a Wi-Fi Technical Solutions Architect at Cisco UK, proud member of the Cisco Live Network Operations Center deployment team, and WLAN Pi development team. If he is not working, he is most likely riding his Brompton bike. All opinions are my own, not Cisco's.

13 thoughts on “Naučte se pracovat se symbolickými a pevnými odkazy”

  1. Zdravím
    k čemu se v PRAXI dají použít symbolické a pevné odkazy?
    Nějaké využitelné příklady…
    Dík

  2. Dobrý den,

    pár příkladů jsem zmínil v textu. Je ale pravda, že zpravidla nejde o každodenně využívané techniky. Na druhou stranu se například s použitím Junction (spojení adresářů) můžete setkat hned několikrát ve Windows 7. Jejich výpis provedete příkazem “dir /aL /s”.

  3. dobry den, pekny clanek, nicmene by mne zajimalo, zda je mozne ve win7 udelat jeden odkaz, ktery bude spojovat vice adresaru.. rekneme ze mam adresare “filmy” na discich D:, E:, F:, a chtel bych mit v umisteni C:\Filmy obsahy vsech zminenych adresaru, vite, jak to myslim, ze pokud bych pridal/odebral cokoliv z jakehokoliv umisteni v ramci zminenych adresaru (D:\Filmy; E:\Filmy; F:\Filmy), tak zmeny by se projevily taktez v adresari C:\Filmy, ktery by sam o sobe ale neexistoval… nevedel byste prosim nahodou jak by toto (pokud to je mozne)slo zaridit? predem dekuji, a clanek se mi opravdu libil.. ;)

  4. Michal: Tak to nejde… Zcela logicky – NTFS nepodporuje dva soubory se stejným jménem…

  5. Prosím o radu: mám W7 tablet (w500) s malým SSD diskem (32GB). Po nainstalování dostupných aktualizací mi zbývá cca 10GB, to tam ještě nemám např. office. Šlo by pomocí výše popsaných řešení (spojení adresářů?) přesunout např. Program Files na paměťovou kartu, kterou bych nechával nastálo vloženou v přístroji?

  6. Dobrý den, vyzkoušel jsem si všechny druhy propojení zde popsané. Právě tohle jsem na webu hledal, když jsem chtěl napodobit “linky” z win7 a udělat si vlastní. ALE chování vytvořených Junction je přeci jen jiné, než těch originálních. Když v mém oblíbeném Total Commanderu jdu originálním linkem např. z user\uzivatel\”poslední”, ocitnu se někde hluboko v adresářích v “Recent” a jdu-li o adresář výš, jdu tou reálnou strukturou adresářů jak je na disku. Tak bych to chtěl i u vytvořených linků. Ale ty se chovají tak, že se sice objeví obsah cílové složky (např. Recent), jenže cesta je stále nastavená na název použitého linku a o adresář výš jsem hned zase v “uzivatel”. Nedostanu se do opravdové cílové složky. Můžete mi prosím někdo vysvětlit, jak to je možné?

  7. Mám stejný problém jako v předchozím příspěvku p. Prokop.

    Navíc, pokud odkazujete vnořeným adresářem do nadřazené složky, tak to má fatální důsledek nekonečného zacyklení. A není to je akademický případ – konkrétně ve Windows 8 je adresář

    C:\Users\\AppData\Local\Data aplikací\

    spojený (junction) s nadřízeným adresářem

    C:\Users\\AppData\Local\

    A funguje to právě jen v případě, že odkaz vás to té nové složky “hodí”. Jakmile ukáže její obsah jako svůj, tak se to zacyklí.

    Poradí někdo způsob jak vytvořit “junction” spojení s “házením” do nové složky?

    Děkuji JB.

  8. Praktický příklad využití linků je například u aplikací jako DropBox, OneDrive (dříve pod jménem SkyDrive) atp. Např. OneDrive neumožňuje nastavit automatické sdílení i pro jinou složku než jednu defaultní. To znamená, že pokud chci synchronizovat i jinou složku, mám dvě možnosti: přesunout složku do sdílené složky OneDrive (což většinou nechci), nebo vytvořit symbolický odkaz ve složce OneDrive na mojí složku ke sdílení..pro mě funkcionalita k nezaplacení

  9. ello, jde udelat pomoci symlinks to, ze jedna slozka bude slouzit pro dve aplikace? ne jen ze ji jako uvidim kdyz mam napr na exter hd neco a chci to videt po pripojeni na c disku
    proste aby to ta alikace brala a sahala si tam porad
    viz:

    app1 addons1 <—-|
    |
    app2 ————-| app2 pouziva stejne soubory (ze slozky app1)

    vzdycky kdyzs jsem to zkousel tak mi to napise nelze vytvorit, uz existuje

  10. Ahoj,
    děkuji za kvalitní článek. Na otázku z prvního komentáře bych se rád podělil o případ použití. U nás ve firmě máme nástroj na centralizované kopírování souborů, který nepodporuje mezery v názvech adresářů. Jeden ze sdílených adresářů v názvu mezeru má a protože je již prostřednictvím sdílení široce používán, není možné ho přejmenovat. Stačilo vytvořit pomocí spojení adresářů link na tento adresář a problém byl vyřešen.

  11. Zdravím. Dostal jsem se sem čistě náhodou, ale myslím že tohle je to správné místo na můj dotaz.

    Lze v systému Windows nějak zakázat spustit spustitelný soubor pomocí symbolického odkazu?

    Měl jsem za to že ano, buďto pomocí FSUtil nebo dokonce nastavení v BCD, ale vzpomenout si nemohu ani nikde nic najít.

    Pokud to jde, jakkoli, a znáte někdo řešení, tak se podělte. Děkuji.

Leave a Reply to V.Prokop Cancel reply

Your email address will not be published. Required fields are marked *