Windows a dowiązania symboliczne

Windows a dowiązania symboliczne

Nie wszyscy sobie z tego zdają sprawę, ale Windows podobnie jak te bardziej porządne systemy operacyjne obsługuje funkcjonalność dowiązania symbolicznego. Słowem wyjaśnienia dla mniej technicznych użytkowników, dowiązanie symboliczne to informacja o tym, gdzie plik się znajduje. Dowiązanie zachowuje się dokładnie tak jak plik, jednak plikiem nie jest. Dowiązanie symboliczne jest podobne do skrótu (tego z ikonką strzałeczki w rogu), tylko jest bardziej.

Windows nie wspiera w sposób klikalny dowiązań symbolicznych, a szkoda. Trzeba się przełączać do tej brzydkiej i przerażającej konsoli i pisać polecenia. Nie chcę tutaj się wdawać w teorię, czym dokładniej są dowiązania symboliczne, bo każdy kto zna Uniksa będzie się nudził czytając, a pozostali i tak nie zrozumieją.

Jak zrobić swoje własne dowiązanie symboliczne? Bardzo prosto!

Na początku musimy otworzyć konsolę (start+r, wpisać: cmd, nacisnąć enter). Następnie wywołujemy magiczne polecenie mklink:

C:\Users\mt3o>mklink
Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target
/D Creates a directory symbolic link. Default is a file symbolic link.
/H Creates a hard link instead of a symbolic link.
/J Creates a Directory Junction. Link specifies the new symbolic link name. Target specifies the path (relative or absolute) that the new link refers to.

Link to nazwa dowiązania. Target, jak łatwo się domyślić, cel, obiekt wskazywany.

Przełącznik D umożliwia stworzenie dowiązania do katalogu, a nie tylko pliku. Stosuje się razem z J.

Windows pozwala stworzyć hardlink do folderu i w ten sposób mieć pętlę w systemie plików. Nie jest też na tyle inteligentny, aby kasując tylko usunąć dowiązanie. Usunie dowiązanie i to, co pod nim leży. Jeśli przeniesiemy dowiązanie do katalogu do kosza, pliki oryginalne będą istnieć tak długo, jak długo nikt nie wyrzuci śmieci.

Antywirus gdy zacznie skanować zapętlony katalog, będzie się kręcił, aż się wysypie, lub WinAPI powie, że nie rozumie nazwy dłuższej niż 255 znaków.

Do czego są te całe dowiązania? Chociażby po to, aby oszczędzić miejsce na dysku i uniknąć redundancji. Albo po to, aby zachować kompatybilność z innymi wersjami oprogramowania. Albo po to, by móc mieć Program Files na innej partycji. I do miliona innych celów.

Ps. Starsze windowsy, mające już (jeszcze?) NTFS mają polecenie linkd zamiast mklink, ale to temat na odrębny wpis…

Dodatkowe informacje:
http://pl.wikipedia.org/wiki/Dowiązanie_symboliczne
http://itblogs.pl/blogs/paula/archive/2008/03/09/symlink-czyli-mklink-w-windows-server-2008.aspx
http://en.wikipedia.org/wiki/NTFS_junction_point
http://support.microsoft.com/kb/205524

  • Zapomniałeś wspomnieć, że od Visty w górę.

  • hm

    W NTFS windowsa xp jest tylko fsutil hardlink – twarde dowiązanie na plik..

    w/g msdn-a, dopiero NTFS visty umie dowiązania symboliczne – ale dobrze że w końcu zrobili…

  • lolek

    Wow, nie dość że zrobili odwrotną kolejność parametrów niż w *nixie to jeszcze domyślnie jest soft a nie hardlink. To drugie w sumie może jest dobrym rozwiązaniem ale nie obraziłbym się na trochę konsekwencji – jak już kopiować to dokładnie 😛

  • > tylko jest bardziej.
    bardziej jaki?

  • jest bardziej.
    Btw, mklink obsluguje rowniez sciezki sieciowe, co jest np dobrym pomsylem na wydizelenie jakiegos udzialu (appdata np) i dobieranie sie do niego po smb. 🙂
    To tak na marginesie 🙂

  • Proponuję zapoznać się z http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html

    Pozwala wyklikać dowiązania symboliczne (Vista+) jak i Hardlinki, Junctiony w XP.

  • Szymon

    było kiedyś poruszane przy okazji…
    http://derin.jogger.pl/2008/08/19/winda/

  • skoro to jest od visty [wg niektorych] to jak to mozliwe ze programfiles mam na partycji F: [podlinkowane do c:/program files] i documents and settings na D [tez odpowiednio podlinkowane] w XP?
    i dla partycji da sie to wyklikac, a nie tylko z palca wklepac.

  • A nie masz po prostu dysku podmontowanego jako katalog? to chyba ficzer NTFSa.
    Dasz rade tak zrobic z F:\costam ?

  • tak, bo wczesniej mialem i PF i D&S na jednej partycji jako bodajze D:\program_files i d:\documents and settings podmontowane do odpowiednich folderow na C, ale fakt ze wtedy juz cos musialem klepac w cmd, jednak po ostatnim formacie po prostu dalem im dwie partycje bo bylo latwiej wyklikac niz klepac z klawiatury

  • – mi to wyglada tak czy siak na podmontowanie partycji/katalogu jako katalogu – co fizycznie ma sie nijak do dowiązań. mklink jako taki jest ficzerem Windy od Visty w góre. Wczesniej byly jakies podobne rozwiazania, ale nie potrafily tyle co mklink (vide obsluga smb…). Jesli interesuje cie roznica miedzy podmonotwaniem a podlinkowaniem, polecam lekture o hard i softlinkach, zarowno pod winda jak i linuxem (z *nixowych systemow caly pomysl sie zreszta AFAIK wywodzi) 🙂

  • uzywalem debiana przez pare lat, potrafie rozroznic soft od hardlinka, co nie zmienia faktu ze o ile teraz mam podmontowane to tak jak mowisz, o tyle wczesniej byl to hardlink, bo montowanie partycji nie pozwala na podmontowywanie katalogow jak sama nazwa wskazuje

  • – nie przecze, natomiast mklink wczesniej na pewno nie uzywales 🙂

  • bo nazywalo sie inaczej i mialo ciut inne funkcje… to tak jak powiedziec "nowego gadu gadu nie uzywales" bo wczesniej nie mialo slowa "nowe" w nazwie 😉

  • Link Shell Extension¹ (dla Windows 2000 i nowszych, na partycjach NTFS) sprawuje się wyśmienicie. Używam od lat, obok innych, użytecznych rozszerzeń powłoki².

    ¹ http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html#download
    ² http://grzglo.jogger.pl/2009/12/01/windows-osobisty-ranking-przydatnych-aplikacji/

  • – To akurat argument nietrafiony… To był zupelnie inny program, nie obslugiwal jednego z typow linkow, juz nie pamietam czy hard czy soft, ale na pewno jednego nie osblugiwal, AFAIR (tu nie jestem pewien) junction tez nie… zupelnie inny program, zupelnie inna funkcjonalnosc (choc czesc wspolna jest)…. wiec NIE, nie uzywales tego… tyle z mojej strony

  • n3m0: Jeśli to do mnie, to nie masz racji.

    Link Shell Extension obsługuje symbolic- i hardlinki, volume mountpoints oraz junction. I to od bardzo dawana (jeszcze pod Windows XP) tego używałem.

  • – @Grzegorz – to nie do ciebie 🙂

  • @Grzegorz: Fakt, ale to są nadal zewnętrzne programy, które trzeba sobie samemu poznać i pobrać. I to jest ich największa wada.

    @viralion: Znam link shell extension, ale gdy to ostatni raz używałem, wydawało mi się na tyle nieintuicyjne, że się zniechęciłem. Niemniej mam to zainstalowane na jednym z komputerów.


    Uzupełniłem notkę o link do tekstu Microsoftowego Supportu na temat linkd i mountvol, dla win2000.

  • Fajna sprawa. Pozwala przenieść bezproblemowo przenieść parę katalogów systemowych na inny dysk 🙂

  • – w pracy cos takiego wykorzystuje, podlinkowalem dane aplikacji z katalogu domowego uzytkownika do sieciowego udzialu, ktory dodatkowo jest regularnie backupowany. Oczywiscie wszystko chodzi po AD wiec gdzie bym sie nie zalgowal w sieci, wystarczy utworzyc link i srodowisko aplikacji mam takie jak na moim wlasnym komputerze. I nie martwie sie o kopie… 🙂