NTFS umí nativně symlinky jako Linux
Dosud jsem za jednu z předností Linuxových filesystémů považoval jejich strukturu a symlinky, tedy třeba příkaz ln -s cíl adresář
. Věděl jsem, že Windows obsahují symlinky pro celé diskové oblasti, které je možno zařadit do stávající adresářové struktury, ale velice jsem postrádal symlinky pro adresáře a jednotlivé soubory.
Až Libor mě v komentářích upozornil na to, že existují dva produkty, které tuto funkci nabízí i pro Windows. Navíc se nejedná o žádnou magii, NTFS umí symlinky zcela nativně, jen pro tuto operaci Microsoft nenabízí ve standardní instalaci žádný nástroj (opravdu nechápu proč v běžné instalaci skrývá takto vynikající funkce; v nabídce je jen program linkd.exe
v Resource Kitu).
K čemu jsou symlinky? Řekněme tomu, že právě pracujete na webu v adresáři D:\web\www\moc_hezký_web
, pomocí symlinků si jej můžete dočasně umístit do C:\work
. Stejně tak můžete adresář C:\Program Files
přemapovat na nově zakoupený disk do D:\bin
. Použití je rozmanité, a funguje naprosto všude a ve všech programech, protože je to vlastnost NTFS souborového systému.
K tvorbě symlinků Vám poslouží buď utilita Junction od Sysinternals (používá se z příkazové řádky; doporučuji nakopírovat do Windows\System32) nebo Junction Link Magic od Mikaella Nordela.
To uměl i dos ne tam byl příkaz SUBST
[1] kdepak, SUBST pouze přiřazuje cestě jedno z 26 písmen jednotek, to není symlink
[2] Jenom doplním, že příkaz SUBST je i ve Windows XP a je velice užitečný. Například lze nainstalovat Apache+Mysql+PHP na virtuální disk W: se zachováním stejných cest jako v linuxu W:etchttpd.conf
[3] jenže tím se dostáváme k omezení 26 písmenek, a to je prostě špatnej systém, symlink a jedna společná adresářová struktura pod C:, což je vlastně root, je přehlednější, a netrpí omezením na 26 písmenek
Stejně tak můžete adresář C:\Program Files přemapovat na nově zakoupený disk do D:\bin.
To vypadá docela užitečně, jestli tomu dobře rozumím, tak když si přemapuju Program Files na jiný disk jak uvádíte, tak tam překopíruju všechny stávající data a cokoliv dalšího budu instalovat do %ProgramFiles% se bude sypat do D:\Bin. A co po restartu Woken, zůstane to přelinkování aktivní, nebo se to nalinkování bude muset spouštět v nějaké dávce po startu?
[5] ano, tak to funguje, Windows pod C:\Program Files vidí obsah, který je fyzicky na D:\bin. A žádná dávka není potřeba, toto nativně umí NTFS, je to jeho součástí, utilita junction.exe jen tento symlink vytvoří
Velice užitečné, akorát mi přijde, že v linux umí udělat symlink na soubor, tady mi to jaksi nejde, což je škoda. Ale i tak velmi dobrá pomůcka :)
Symlinky určitě použiju, díky za info, mít vše v jedné struktuře není špatné.
[4]
Na druhou stranu, mít více disků také není k zahození. Windows totiž mají jednu výhodu - pamatují si u každého disku aktuální cestu. V průzkumníku to tak znát není ale třeba v total commanderu je to daleko pohodlnější, když si to u každého disku pomatuje kde jsem, pokud jsem na jednom disku mám smůlu. Ale asi hodně záleží na stylu práce, někomu jinému by to asi nechybělo.
[7] to není pravda, symlink jde udělat i na soubor, píšu o tom... Navíc odkazy na soubory se dají dělat přes klasické
*.lnk
.[4] Ale po vyčerpání jednoho písmenka mají nastoupit dvě. Třeba když dojdeš k Z, tak se objeví CA apod. Nezkoušel jsem to, ale je to v jednom návodu ;-)
Škoda že nieje stále možné možne mountnuť (juncktnuť) sieťový disk tak ako v linuxe.
A link na súbor síce vytvoriť môžete, ale nebude fungovať ...
[10] Mě to prostě nejde :( asi jsem lama, ale když dám vytvořit symlink na soubor, tak mi to napíše hlášku o neplatném adresáři :(
[12] jestli jen nepoužíváte špatnou utilitu ;-)
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fsutil_hardlink.mspx...
Libor
Pomocí Junction jsem to zkoušel už dříve, ale nepovedlo se mi vytvořit symlink na adresář na zašifrovaném disku (šifrováno pomocí TrueCrypt). Obráceně, tj. vytvořit symlink adresáře umístěného na nezašifrovaném disku na zašifrovaný, to jde bez problémů.
Nemám tedy Win XP, ale Win 2000.
Nezkoušel to někdo? Pokud ano, s jakým výsledkem? ;-)
[13] Jenom technický detail. On to pak není symlink, ale hard-link.
Trochu mě celý článek zmátl, protože Windows sice nepoužívám, leč něco málo jsem o nich a jmenovitě i NTFS četl a měl jsem dojem, který ovšem i nyní po překontrolování dostupné dokumentace přetrvává, totiž: NTFS umí (něco jako) symlinky pro adresáře a hard linky pro soubory.
Kromě odlišné implementace je zde uživatelsky asi nejpodstatnějším rozdílem: hard link, jakožto vlastně další jméno jednoho souboru, lze vytvářet pouze v rámci jednoho souborového systému.
Opatrně s tím! Při vysypání koše se mi občas stalo, že se "hardlinkované" soubory a adresáře smazaly (přesněji vyprázdnily). Neznám přesné příčiny, ale bylo to velmi nemilé...
[15] nejen v rámci jednoho souborového systému, ale bohužel i jen na jednom svazku. Souborové hardlinky nepoužívám, jen jsem s nimi tak trochu laboroval, ale s adresářovými symlinky nemám ve wxp už delší dobu žádné problémy, dokonce ani s tím, že by se mi nějaký symlinkovaný adresář [16] smazal sám od sebe. Používal jsem je i mezi flashdiskem a harddiskem, taktéž bez výraznějších problémů, dokud mě nezačala otravovat nutnost odpojovat flashdisk místo jeho prostého vytažení z USB... Libor
[17] Zdá se, že pod pojmem souborový systém (fs) chápeme různé věci. Neměl jsem na mysli celý strom, ale pouze jednu konkrétní instanci fs (i v případě, že je do stromu připojená), což by mohl být svazek nebo také soubor s fs připojený přes místní smyčku (pokud Windows něco podobného umí, ale tipují, že různé šifrované fs budou něco podobného). Ono to nakonec možná může být i přes více "fyzických" svazků, pokud Windows umí něco jako LVM(?). Hloupě řečeno (platí pouze pro výchozí win-chování): hard linky mohou být pouze v rámci disku se stejným "písmenkem".
Když se dorozumíme, tak se určitě i shodneme. ;)
[16] Jestli to nesouvisí s tím, že NTFS to sice umí (kompatibilita s některými vlastnostmi POSIX - popsáno zde), ale Windows a jejich výchozí nástroje s tím neumějí pracovat, ani s tím vlastně nepočítají (taky popsáno na té stránce). Proto je dost dobře představitelné, že běžné postupy (jako vysypávání koše) si neporadí se skutečností, že jeden soubor má v rámci fs více jmen (reprezentací).
[18] Ano, v tomto s vámi souhlasím, čili shodli a dorozuměli ;) . V každém případě považuji hardlinky pod Win za poměrně nebezpečné pohrávání si s daty.
pěkné ... velmi jenom čekám kdy Radek Hulán příjde taky na to, že existují nástroje které příkazy z linuxu portují na Win. To se jeden bude divit když se dočte o tom, že je možno použít ls -l místo DIR apod.
(znouvu a s diakritikou)
Jen bych dodal (někomu by se to mohlo hodit :)), že pokud smažete běžnými nástroji symlink, smažete i vše co zastupuje, pokud chcete jen zrušit symlink, musíte opět použít jeden z uvedených nástroju pro práci se symlinky.
(Jen pro pořádek, uz jsem nějaké články o symlinku četl, a v diskusi pod nimi se vždycky našel někdo koho by tohle varováni zachránilo pred ztrátou dat :)))
[21] absolutní omyl, symlink NEMAŽE vše, co zastupuje, smazáním symlinku se smaže jen tento symlink, a nikoliv obsah adresáře, na který ukazoval
A ako sa vytvára odkaz na súbor? Lebo cez tie programiky to nejde a "*.lnk" mi nič nehovorí.
Já tu řeším trochu podobný problém a to jak pracovat v PHP s Opendir() a sítovým adresářem (Novell). To se mi nepovedlo ani pomocí symlinku. Neznáte někdo nějakej způsob aby to fungovalo? Díky
No, jestli se nepletu tak ve Win Vista i Win 7 je spousta simlinků již od inslace systému. Např. pro cestu C:\users je vytvořen (pro zpětnou kompatibilitu) simlink C:\Document and Settings apod. Jejich smazaním se opravdu odkazovaná data nesmažou!