Linki symboliczne w Windowsie
Wiesz co to są linki symboliczne i linki twarde w systemie Linux? Podobny mechanizm oferuje Windows! Dowiedz się jak je tworzyć.
Spis treści
Co to jest link symboliczny i twardy
Link symboliczny (znany także jako dowiązanie symboliczne, z ang. symbolic link lub w skrócie symlink), to specjalny rodzaj pliku, który w pewien sposób wskazuje na inny plik na dysku, a w zasadzie na ścieżkę do tego pliku (sam plik docelowy może nawet nie istnieć – wtedy symlink prowadzi donikąd, więc nie da się go użyć). Linki symboliczne mogą być tworzone do plików na innym dysku niż one same. Usunięcie symlinka nie wpływa w żaden sposób na plik docelowy.
Program, który potrafi obsługiwać linki symboliczne, potrafi je odróżnić od normalnego pliku. Program który tego nie potrafi, obsługuje je jak każdy inny plik.
Link twardy (dowiązanie twarde, łącze stałe lub z ang. hardlink), to referencja na istniejący i-node na tym samym dysku, na tej samej partycji. Po stworzeniu hardlinku do pliku, istnieje on na równi z plikiem pierwotnym. Usunięcie pliku pierwotnego nie usuwa fizycznie pliku z dysku, tylko usuwa referencję, a nie plik właściwy. Miejsce na dysku jest zwalniane dopiero po usunięciu ostatniej referencji, czyli ostatniego linka twardego.
Część wspólna linków twardych i symbolicznych to fakt, że utworzenie jednego i drugiego nie powoduje zwiększenia zajętości dysku o wielkość pliku docelowego, tylko o kilka bajtów.
Zdecydowanie częściej korzysta się z symlinków niż z hardlinków.
Linki w systemie Linux
Dla osób pracujących pod Linuksem, link symboliczny (i twardy) jest czymś normalnym. Korzysta się z nich często, bo są bardzo wygodne. Utworzenie linku symbolicznego uzyskuje się poleceniem ln -s scieżka_do_pliku_istniejącego ścieżka_do_powstającego_linku
. Jak już wspomniałem, „plik istniejący” może nie istnieć, a link zacznie działać poprawnie w momencie, gdy ten plik zostanie stworzony.
Utworzenie linku twardego, to polecenie ln scieżka_do_pliku_istniejącego ścieżka_do_powstającego_linku
. Jak pewnie łatwo zauważyć, różni się jedynie brakiem opcji -s
, oznaczającego dowiązanie symboliczne.
W systemie Linux do tworzenia linków symbolicznych do katalogów używa się tego samego polecenia.
Windows a linki
W systemie Windows (od wersji 2000) mamy możliwość korzystania z linków, ale jedynie na partycji NTFS. W Windows Vista (tak samo w Windows7) producent udostępnił prosty programik dla linii poleceń (Start/Uruchom cmd), którym można tworzyć linki twarde i symboliczne, a także linki do katalogów (tutaj pod nazwą junction point). Użycie równie proste jak w Linuksie: mklink <opcje> nazwa_dowiązania ścieżka_docelowa
. Warto zauważyć odwróconą kolejność linku i pliku/katalogu docelowego (w stosunku do polecenia ln w Linuksie). Dostępne opcje to:
- /D – dowiązanie do katalogów
- /H – dowiązanie twarde
- /J – punkt połączenia katalogów (junction point)
Linki symboliczne są w Eksploratorze Windows oznaczone małą ikonką strzałki. Usunięcie takiego linku nie powoduje żadnych zmian na pliku docelowym. Linki twarde są widoczne jak każdy normalny plik.
Linki usuwa się tak samo jak pliki/katalogi. Istotnym faktem jest, że aby utworzyć link, potrzebujesz praw administratora systemu. Z poziomu zwykłego użytkownika się tego nie da zrobić, więc uruchamiając program cmd, nie zapomnij uruchomić go jako administrator.
Czym różni się link symboliczny do katalogu od tzw. junction point? Trudno powiedzieć, aczkolwiek jeśli chcesz udostępniać po sambie, korzystaj z junction pointów a nie dowiązań do katalogów, bo z tymi drugimi bywają problemy.
Programy integrujące się z systemem
Zapewne jest wiele programów ułatwiających pracę z linkami, najpopularniejszym jest chyba Link Shell Extension, ale wiele innych znajdziesz w wyszukiwarce.
Kolejny program, dla Windowsów starszych niż Vista, dostępny jest na stronach technet.microsoft.com – jest to program Junction działający pod konsolą (tak jak mklink).
Tworzenie linków symbolicznych w Total Commanderze
W programie Total Commander można na pasku z przyciskami dodać własny, który będzie służył do tworzenia linków symbolicznych. Otwórz menu „Konfiguracja”/„Zmień pasek narzędzi”. Po wciśnięciu przycisku „Dodaj” jako „Polecenie” wpisz C:\Windows\System32\cmd.exe, a w polu „Parametry” wartość /C FOR %%F IN (%S) DO IF EXIST "%P"%%F\ (mklink /J "%T"%%F "%P"%%F) ELSE (mklink "%T"%%F "%P"%%F)
. Możesz dowolnie wybrać ikonkę (np. jakąś z pliku C:\Windows\System32\shell32.dll) i etykietki (np. Link symboliczny). Po zapisaniu masz ikonkę, po kliknięciu której plik lub katalog znajdujący się pod kursorem, zostanie podlinkowany po drugiej stronie okna TC.
Drobne wyjaśnienie czemu tak skomplikowane są parametry: jako że program mklink musi dostać inne parametry w przypadku linku symbolicznego do pliku, niż w przypadku punktu połączenia (junction point) katalogów, więc na początku musimy sprawdzić czy pod kursorem jest plik, czy katalog.
Unreal Commander
Dla osób korzystających z darmowej alternatywy, czyli Unreal Commandera (chyba najfajniejszy z darmowych alternatyw), sposób jest bardzo podobny, chociaż z kilkoma różnicami. Edycja elementów na pasku przycisków odbywa się z poziomu menu „Konfiguracja”/„Opcje”, a następnie „Pasek narzędzi”. Tutaj podobnie, po kliknięciu przycisku „Dodaj”, wybierasz nazwę i ikonkę. W polu „Komenda wykonawcza” wpisujesz tak samo C:\Windows\System32\cmd.exe, a w polu „Parametry” wartość /C IF EXIST "%P%N\" (mklink /J "%T%N" "%P%N") ELSE (mklink "%T%N" "%P%N")
. Zwróć uwagę na znaki cudzysłowu, które są tu niezbędne! Minus jest taki, że podlinkować możesz w ten sposób jedynie pojedyncze pliki/katalogi, nie uwzględnia to ewentualnego podznaczenia jednego lub więcej plików, jedynie plik znajdujący się aktualnie pod kursorem.
TC/UC uruchomiony z prawami zwykłego użytkownika
Co zrobić, jeśli uruchamiasz swojego komandera bez praw administratora? Ten drobny problem można rozwiązać, tworząc skrót (zwykły skrót, nie link) do programu C:\Windows\System32\cmd.exe w dowolnym miejscu (np. w katalogu C:\Windows\System32). Po stworzeniu skrótu, wejdź w jego właściwości (PPM) i w zakładce „Skrót”, pod przyciskiem „Zaawansowane” zaznacz Uruchom jako administrator. Podając jako polecenie na ten skrót, zamiast pliku cmd.exe, jeśli TC/UC jest uruchomiony bez praw administratora, przy każdorazowym tworzeniu linku symbolicznego, będziesz musiał potwierdzić monit o uruchomienie polecenia z prawami administratora.
Do czego można wykorzystać linki symboliczne?
Potrzeb zapewne jest wiele i każdy ma jakieś swoje ulubione, ale wymienię kilka które akurat przychodzą mi na myśl:
- Masz katalog z 200 zdjęciami z aparatu, chcesz sobie wybrać 30 najfajniejszych, np. do oglądania jako slideshow. Tworzysz podkatalog, tworzysz w nim 30 linków symbolicznych do tych najfajniejszych zdjęć (ścieżka docelowa względna, czyli jako
..\plik1.jpg
). Zajmuje mało, jest wygodne, każdy program który „nie widzi” linków symbolicznych (tak ma pewnie jakieś 99,9% programów) będzie ładnie pokazywało wybrane pliki. - Masz poukładane filmy w jakichś strukturach katalogów, chcesz kuzynowi udostępnić 2 z nich w jakimś podkatalogu na dysku, przez FTP. Nie musisz ich kopiować i zajmować miejsca na dysku – utwórz linki symboliczne i udostępnij po FTP katalog z tymi dwoma linkami.
- Chcesz „widzieć” w głównym katalogu dysku, podkatalogi z najczęściej używanymi plikami, które są zagłębione w strukturze drzewa katalogu. Tworzysz linki symboliczne do nich w głównym katalogu Twojego dysku. Możesz nawet tworzyć linki pomiędzy dyskami, np. będąc w katalogu
C:\
uruchomićmklink /J katalog_d D:\
Zapewne sam wymyślisz kilka kolejnych ciekawszych zastosowań :) Po to właśnie są linki symboliczne!