Użytkownikom systemu Windows często brakuje potężnego narzędzia jakim jest konsola. Czy to z braku walorów programistycznych czy też braku elastyczności w zarządzaniu systemem. Część użytkowników decyduje się na przesiadkę, lecz zmiana systemu roboczego nie zawsze jest możliwa. Czy rozwiązanie jakim jest Cygwin może rozwikłać ten problem?

Czym jest Cygwin?

Cygwin to środowisko dla systemu Windows maksymalnie zbliżone do tego znanego z systemów Unixowych. Jest zgodne ze standardem POSIX, dzięki czemu umożliwia instalację i kompilację większości znanych z Linuksa aplikacji (vim, ssh,mc itd). Dotyczy to również aplikacji wykorzystujących interfejs graficzny (jak Gnome czy KDE). Pozwala na emulację pełnoprawnej powłoki bash, tcsh oraz wielu innych, integrując się z narzędziami oraz funkcjami z systemu Windows.

Cygwin - slider

Mówiąc prościej – Cygwin rozszerza konsolę w Windows o dużą część zalet i funkcjonalności znanych z powłoki bash’a oraz aplikacji GNU, a także umożliwia uruchamianie aplikacji okienkowych w oparciu o serwer Cygwin/X.

Instalacja

Instalacja początkowa, jak i aktualizacja i doinstalowywanie programów odbywa się przez jedno graficzne narzędzie – setup.exe (https://cygwin.com/install.html). Obsługa jest bezproblemowa i sprowadza się do wskazania ścieżki instalacyjnej, wybrania jednego z dostępnych mirrorów, oraz sposobu połączenia z internetem.

Cygwin - instalacja

Głównym elementem instalatora jest okno wyboru pakietów, które chcemy doinstalować. Domyślnie zaznaczone są tylko podstawowe aplikacje z katalogu Base, takie jak bash, grep i tar oraz inne niezbędne instalatorowi programy. Jest to dobry moment, aby zaznaczyć dodatkowe pakiety, które potrzebujemy. Kilka podstawowych narzędzi które nie są domyślnie instalowane:

  • openssh – klient oraz serwer ssh
  • vim – edytor tekstowy
  • nano – inny edytor tekstowy, bardziej przyjazny dla użytkownika
  • mc – edytor wizualny, podobny do Norton Commandera
  • wget – narzędzie do pobierania plików przez http/ftp
  • gcc-g++ – kompilator języka C++ (gcc jest instalowany domyślnie)

Pakiety można odnajdywać poprzez wyszukiwarkę u góry albo w kategoriach. Do wyboru mamy instalację i/lub pobranie źródeł, (np.jeśli chcielibyśmy kompilować przy użyciu własnych ustawień). Instalator sam rozwiązuje też kwestie zależności.

W przypadku, jeśli naszego oprogramowania nie ma na liście, musimy zdać się na ręczną kompilację jako że pliki binarne kompilowane pod Linux/Unix nie są kompatybilne z Cygwinem. Możemy też instalować w oparciu o nieoficjalne repozytoria (np. cygwinports.org), gdzie znaleźć można więcej gotowych pakietów.

To tyle w kwestii instalacji, jeśli w trakcie korzystania ze środowiska zauważymy brak istotnego dla nas programu ponownie uruchamiamy setup.exe i wyszukujemy go na liście.

Integracja z Windows

Cygwin emuluje własną strukturę katalogów zgodną z POSIX, na bazie tej istniejącej w Windows. W katalogu C:\Cygwin (domyślnie) znajdują się podkatalogi znane z systemów Unix, np.

home, usr, var, bin, etc

Oznacza to, że katalog

/home/użytkownik

będzie w rzeczywistości znajdował się w

C:\Cygwin\home\użytkownik

W przypadku partycji, są one automatycznie montowane w katalogu /cygdrive. Przykładowo partycja E: w Windows będzie zamontowana pod katalogiem /cygdrive/e. Dotyczy to też dowolnego innego nośnika, któremu przypiszemy literę partycji w Windows.

Dużą zaletą Cygwina jest możliwość uruchamiania plików .exe i poleceń powłoki bash w jednej konsoli. Oznacza to, że polecenie

ipconfig | grep ipv4

będzie jak najbardziej poprawne.

Zachowane są też dowiązania symboliczne i uprawnienia plików – w przypadku tych drugich bazują one ściśle na uprawnieniach ACL w Windows. Urządzenia /dev/null czy /dev/tty również są poprawnie odwzorowane. Pliki /etc/passwd i /etc/group, choć różnią się nieznacznie od swoich pierwowzorów, zawierają prawidłowe informacje bazujące na zasobach Windows. Podobnie jest z działaniem poleceń passwd czy mount.

Katalog /proc również jest emulowany, choć nie jest tak kompletny jak w natywnym systemie. Mamy dostęp m.in. do cpuinfo, meminfo oraz, co ciekawe, katalogu registry w którym możemy przeglądać zawartość rejestru Windows (w trybie read-only, w celu edycji można użyć narzędzia regtool).

Razem ze standardową instalacją dołączane są również narzędzia, ściśle związane z samym Cygwinem. Jednym z nich jest polecenie cygcheck, które pozwala sprawdzać stan oraz wersję zainstalowanych pakietów (przełącznik –c) lub przeszukiwać repozytoria w poszukiwaniu pakietu (przełącznik p). Narzędzie cygpath z kolei umożliwia konwersję ścieżek między formatami POSIX oraz Windows. Przykładowo polecenie

cygpath –w /home

zwróci scieżkę

C:\cygwin\home (w przypadku domyślnej instalacji)

Pełną listę narzędzi, razem z informacją o dostępnych przełącznikach można znaleźć w dokumentacji projektu: cygwin.com/cygwin-ug-net/using-utils.html.

Istnieje również możliwość uruchamiania usług w tle, przykładowo uruchomienia serwera ssh (sshd) sprowadza się do wykonania polecenia ssh-host-config który spyta m.in. czy chcemy uruchomić proces jako usługę Windows. Po zaakceptowaniu domyślnych ustawień poleceniem net start sshd uruchamiamy serwer ssh i już możemy zalogować się do Cygwina zdalnie, używając danych do logowania naszego konta Windows (poleceniem net stop sshd zatrzymujemy usługę).

Ograniczenia

Rzecz jasna Cygwin nie jest narzędziem doskonałym – istnieje wiele elementów które z różnych powodów nie mogły zostać zaimplementowane. Przykładowo z poziomu konsoli cygwina nie możemy poleceniem kill, kończyć pracy procesów tworzonych przez inne aplikacje. Podobnie jest w przypadku montowania katalogów – Cygwin nie ma możliwości montowania partycji o systemach plików innych, niż te wspierane natywnie przez Windows. Ponadto wydajność uruchamianych aplikacji będzie zdecydowanie wolniejsza niż gdyby były one uruchamiane natywnie. Nie jest to różnica widoczna w typowym użytkowaniu, ale w przypadku dużych aplikacji może być już znacząca.

Dla kogo jest ten produkt?

  • dla programistów portujących aplikacje POSIX na Windows
  • dla programistów skryptów bash/tcsh/awk/ etc
  • dla osób preferujących aplikacje GNU, edytory konsolowe
  • dla osób chcących korzystać z ulubionych aplikacji linuksowych na Windowsie

Komu (osobiście) odradzam instalację Cygwina:

  • osobom które szukają narzędzia konsolowego, pozwalającego zarządzać systemem w stopniu w jakim ma to miejsce w systemach uniksowych
  • osobom oczekującym wydajności uruchamianych aplikacji zbliżonej do natywnej

Alternatywy

Jeżeli możliwości Cygwina są dla nas niezadowalające – można sięgnąć do alternatyw

gnuwin32

Jeśli potrzebujemy jedynie kilku aplikacji takich jak wget, grep czy awk prekompilowanych na platformę Windows a nie pełnoprawnej konsoli bash’a – nie musimy zaprzęgać do pracy Cygwina. gnuwin32 to projekt zajmujący się portowaniem aplikacji opartych na licencji GNU i podobnych na platformę Windows. Pełna lista dostępnych aplikacji znajduje się na stronie projektu (http://gnuwin32.sourceforge.net)

CoLinux

CoLinux (z ang. Cooperative Linux) to specjalna wersja jądra Linux która może być uruchamiana „obok” systemu Windows. Jej zaletą jest dużo mniejsze wykorzystanie zasobów niż systemy w pełni zwirtualizowane (np. VirtualBox czy VMware) oraz wydajność bliska natywnej. Ponaddto, w odróżnieniu od Cygwina mamy do dyspozycji pełnoprawny system GNU/Linux pod postacią niemal dowolnej dystrybucji. Komunikacja sieciowa obdywa się poprzez mostek sieciowy (bridge) lub przez Windows API (slirp, mniej wydajne). Istnieje również możliwość korzystania z aplikacji okienkowych poprzez serwer VNC (dzięki zestawieniu wirtualnego połączenia punkt-punkt działa to dużo wydajniej niż przy połączeniu przez fizyczną sieć). Rozwiązanie może przypaść do gustu osobom dla których Cygwin nie emuluje konsoli w dostatecznym stopniu oraz nie potrzebują narzędzia integrującego się z systemem Windows (coLinux pracuje „obok” systemu Windows wobec czego nie ingeruje w jego pracę).

  • o_O

    Wystarczy usunąć windowsa i zainstalować Linuksa.

    • Jak pracujesz z klientami korporacyjnymi, gdzie na okrągło używasz Skype usunięcie Windowsa, to jak strzał w oba kolana :P
      W tym momencie Cygwin ratuje, bo masz praktycznie wszystkie najważniejsze funkcje SSH i nie tylko.

    • Fisiu

      To na Linuksie nie można dzwonić ze Skype? o_O
      A nie lepiej mieć tego Windowsa wirtualnie? Choć z drugiej strony, pracując w środowisku MS-only, to chyba mija się z celem używane cygwina i najprościej to mieć Windowsa bez udziwnień…

    • Można dzwonić, ale nie działają dobrze multirozmowy, przełączanie konferencji i są gorsze kodeki.

    • Fisiu

      A jak z nową wersją Skype, wydaną dzisiaj? Jakieś poprawy w tej kwestii?

    • Anatol

      Ale Ty jesteś głupi :)

  • Dreed

    Istnieje też coś takiego jak MobaXterm.
    Posiada te same właściwości, a dodatkowo jest portable.

    • Anatol

      Nie słyszałem. Opiszesz coś o tym więcej?

    • Dreed

      zobacz i poczytaj na http://mobaxterm.mobatek.net/
      ogólnie dobre narzędzie jak i cygwin. używam do komunikacji z różnymi serwerami po ssh, rdp. jedynie muszę przyznać, że sftp jest słabe i winscp lepiej spełnia zadanie.

    • Trevis

      Super zajawka z tym jest .
      Next art. proszę o tym :D

    • 123qwe

      Heh, wlasnie zmieniam prace na taka, w ktorej nie bede mogl ani w wirtualce linuxa zainstalowac :/ putty do codziennej pracy nie jest za wygodne a z tym MobaXterm to mi z nieba spadles.. nawet instalowac nie trzeba :D Duzy plus dla Ciebie :)

    • Satan

      Ja z kolei polecam Xshell: http://www.netsarang.com/products/xsh_overview.ht… . Jak dla mnie rewelacja.

    • o_O

      A ja mam pracę taką, gdzie nie wolno pracować na windowsie jak się nie ma ważnego powodu ku temu.

  • Komentator

    Polecam również narzędzie nircmd. Pozwala na wydanie Windowsowi wielu poleceń, które normalnie wymagałyby przeklikania nastu okien.

  • Wintek

    Jakie jest sensowne zastosowanie Cygiwna? Bo nie widzę żadnej w nim użyteczności.

  • janek

    zawodowo jak i hobbystycznie administruję systemami uniksowymi i rzeczywiście kilkukrotnie instalowałem cygwin dla wygody. było to tylko spowodowane moimi przyzwyczajeniami.
    dla ludzi związanych z windowsem polecam zapoznać się z powershell. od kolegów znających to narzędzie wiem, że jest naprawdę przydatne i podobno równie mocne jak typowa powłoka uniksowa.