Oto lista opcji dostępnych od 2018-05 z kilkoma aktualizacjami dotyczącymi WSL w okresie 2019-01 wraz z odrobiną szczegółów dotyczących każdej z nich.
Opcje, które się wyróżniają
Cygwin zapewnia:
- powłoka bash i terminal Mintty,
- szeroki wachlarz typowych narzędzi Linux skompilowanych do działania w systemie Windows
- kompleksowa warstwa zgodności, która umożliwia uruchamianie programów Linux w systemie Windows.
Cygwin chce ułatwić przenoszenie aplikacji Linux na Windows. Jeśli jakiś program C został zaprojektowany dla Uniksa i spodziewa się korzystać z takich funkcji, jak potoki, dostęp do plików i katalogów w stylu Unix itp., Możesz go skompilować dla Cygwin, a Cygwin będzie działał jako warstwa kompatybilności między kodem a obcym systemem operacyjnym (Windows) . Pozwala to temu samemu programowi C działać zarówno w systemie Linux, jak i Windows, z niewielkimi modyfikacjami lub bez modyfikacji. W ten sposób spełniono ogromną listę programów dla systemu Linux i można je uruchomić po zainstalowaniu Cygwin. Jednak Ty, użytkownik tych programów, prawdopodobnie będziesz musiał zapoznać się z Uniksem. Na przykład może być konieczne przekazanie argumentów typu „ /cygdrive/c/autoexec.bat
zamiast” c:\autoexec.bat
i gotowość do radzenia sobie z danymi wyjściowymi za pomocą zakończenia linii \n
w systemie Unix ( ) zamiast zakończenia linii w systemie Windows ( \r\n
).
Zbiór wszystkich programów Cygwin składa się z repozytorium i chociaż Cygwin nie ma tradycyjnego menedżera pakietów Linuksa, możesz dodawać, usuwać i aktualizować programy z tego repozytorium w dowolnym momencie w bardzo sprzeczny z intuicją sposób (uruchamiasz Cygwin's setup.exe w w dowolnym momencie po zakończeniu instalacji)
Babun to Cygwin z w pełni funkcjonalnym menedżerem pakietów (pakt), oh-my-zsh za jego powłokę, git, automatyczne aktualizacje i architekturę zorientowaną na wtyczki. Chociaż domyślną powłoką jest zsh, możesz łatwo przełączyć się na bash. Wydaje się to być miłym ulepszeniem waniliowego Cygwina, jeśli nie przeszkadza ci dodatkowa waga.
Mingw-w64 zapewnia:
- bash shell,
- spora ilość narzędzi Linux,
- łańcuch narzędzi programistycznych do tworzenia aplikacji, które będą działały bez warstwy zgodności z Linuksem (lub z minimalną).
MinGW to przede wszystkim dystrybucja oprogramowania i platforma do budowania systemu Windows. W szczególności jest to port systemu Windows narzędzi kompilatora GNU, takich jak GCC, make, bash i tak dalej. Zawiera sporo narzędzi GNU i minimalną warstwę kompatybilności z Uniksem.
Główna różnica między Mingw-w64 a Cygwin dotyczy priorytetów: Cygwin dąży do zapewnienia kompletnej warstwy zgodności z POSIX, obejmującej pełną implementację wszystkich głównych wywołań systemowych i bibliotek Uniksa; wydajność ma drugorzędne znaczenie dla zgodności. MinGW dąży do wydajności, więc nie zapewni niektórych interfejsów API POSIX, których nie można łatwo i / lub wystarczająco szybko zaimplementować w systemie Windows. Głównym celem MinGW są również programiści S / W. Niemniej jednak zwykli użytkownicy mogą również cieszyć się jego powłoką, a ogólny cel obejmuje narzędzia.
MSYS2 zapewnia:
- powłoka bash i terminal Mintty,
- spora ilość narzędzi Linux,
- w pełni funkcjonalny menedżer pakietów wiersza poleceń do instalowania programów systemu operacyjnego
- części zarówno Cygwin, jak i MinGW do obsługi budowania aplikacji z lub bez kompleksowej warstwy kompatybilności z Linux
- repozytorium oprogramowania i menedżer pakietów (pacman), który ułatwia instalację, używanie, budowanie i przenoszenie oprogramowania w systemie Windows.
MSYS2 jest także przede wszystkim dystrybucją oprogramowania i platformą do budowania systemu Windows, taką jak MinGW, ale łączy zarówno sposób Cygwin, jak i MinGW. Możesz użyć MSYS2 do utworzenia „programów MinGW” lub „programów MSYS2” . Późniejsze łącze do warstwy zgodności MSYS2 (msys-2.dll), która sama ściśle śledzi rozwój warstwy zgodności Cygwin z kilkoma dodatkami / modyfikacjami . Repozytoria dwóch projektów są jednak całkowicie niezwiązane. A więc zarówno MSYS2, jak i Cygwin zapewniają, grep.exe
że mogą mieć zupełnie inną wersję.
Git dla Windows to albo MSYS2 z zainstalowanym gitem, albo przynajmniej w dużej mierze oparty na MSYS2 . Zapewnia tę samą powłokę (bash), terminal (Mintty) i menedżera pakietów (pacman). Wydaje się, że jest to najpopularniejszy sposób na uruchomienie dominującego Gita w systemie Windows, a wraz z nim otrzymujesz ładne środowisko uniksowe.
WSL rozwiązuje ten sam problem przy użyciu zupełnie innej metody. Uruchamiasz dokładnie ten sam kod, który uruchamiałbyś w systemie Linux na WSL, który przechwytuje wywołania jądra i tłumaczy je na wywołania jądra systemu Windows (jest to przeciwieństwo Wine). Oczywiście tłumaczenie nie może być idealne, ale Microsoft porzucił ostrzeżenie o wersji beta . Ponieważ WSL nie był dostępny w systemie Windows Server przed 2018 r., Nie analizowałem go zbyt często. W każdym razie dostajesz ładną powłokę bash z większością gadżetów CLI, których spodziewałbyś się znaleźć w standardowej instalacji Ubuntu. Microsoft oficjalnie stwierdza, że „WSL nie ma na celu obsługi komputerów stacjonarnych ani aplikacji z graficznym interfejsem użytkownika”istnieją jednak nieoficjalne instrukcje, jak to zrobić. Wydaje się, że w chwili obecnej (początek 2018 r.) Główne wady WSL są następujące: a) renderowanie ekranu i dostępu do dysku jest bardzo wolne b) nie należy edytować plików WSL (Linux) z systemu Windows c) działa tylko na 64-bitowym systemie Windows. Oto stare, ale miłe porównanie z cygwinem (zauważ, że Rich Turner jest członkiem zespołu WSL i opublikował wiele przydatnych informacji dotyczących WSL)
Wspólna płaszczyzna
Poza WSL większość powyższych narzędzi ma wiele wspólnych technologii (biblioteki, pliki wykonywalne, koncepcje). Na przykład powłoka bash dostarczana z MinGW zależy od msys-2.dll, który sam jest rozwidleniem cygwin.dll. Więc tak, jest dużo miejsca na zamieszanie :-)
Więcej opcji
Cmder zapewnia po prostu ładny terminal i powłokę przypominającą bash dla Windows. Jego głównym składnikiem jest Conemu (terminal). Ponadtododaje Clink, który zapewniapotężną edycję wiersza poleceń w stylu Bash , niestandardowy układ monitu i schemat kolorów Monokai. Jest wysoce (a może w pełni) kompatybilny z rodzimymi programami konsoli Windows.
Scoop zapewnia menedżera pakietów wiersza poleceń dla wielu dobrze znanych programów wieloplatformowych, w tym wielu narzędzi GNU. Pobiera wstępnie skompilowane pakiety. Nie zapewnia ani powłoki, ani terminala, ale działa pod Windows cmd.exe (ze wszystkimi swoimi ograniczeniami, ale także z pełną kompatybilnością z rodzimymi programami konsoli Windows). Nie zawiera również pakietu kompilatorów (ale oczywiście kompilatory i narzędzia programistyczne to typowe pakiety, które można zainstalować za pomocą scoop). Wiele programów instalowanych przez Scoop pochodzi bezpośrednio z projektu MinGW / MSYS lub zostało zbudowanych przy użyciu ich narzędzi.
Jeszcze więcej opcji
Rozwiązania poniżej nie wydają się aktywne i nigdy ich nie testowałem, ale wydają się wykonywać pracę dla innych:
Gow (Gnu On Windows) to lekka alternatywa dla Cygwina bez powłoki. Korzysta z wygodnego instalatora Windows, który instaluje około 130 niezwykle użytecznych aplikacji Linux typu open source skompilowanych jako natywne pliki binarne win32 i dostępnych za pośrednictwem cmd.exe systemu Windows. Ma być jak najmniejszy (około 10 MB).
UnxUtils & GnuWin32 : UnxUtils to zbiór portów wspólnych GNU uniksowych narzędzi do rodzimej Win32 z wykonywalne w zależności tylko od C-wykonawczego msvcrt.dll Microsoft. Musisz pobrać główną część i kilka aktualizacji . GnuWin32 ma nowsze wersje niż UnxUtils, ale wymaga plików obsługujących (np. DLL)
MSYS & MinGW wydają się mieć został zastąpiony przez MSYS2 & MinGW-W64 więc nigdy nie spojrzał na nich.
Niektóre typowe problemy dotyczące Cygwin i MSYS2
Odnośnie terminalu
Mintty jest terminalem używanym w Cygwin, MSYS2 i ich pochodnych. Należy pamiętać, że jeśli używasz rodzimych programów konsolowych systemu Windows, nie jest to bezbolesne zastąpienie wiersza polecenia systemu Windows. Podczas gdy programy z prostym wyjściem tekstu zwykle działają dobrze, programy interaktywne i pełnoekranowe często mają problemy. Przeczytaj więcej na stronie głównej Mintty, a także przeczytaj wpis „Niektóre natywne programy konsolowe nie działają po uruchomieniu z Git Bash” w Git na Windows FAQ . Ten wpis ma następujące zalecenia, gdy napotkasz tego rodzaju problemy:
Istnieje kilka metod obejścia tych problemów:
- Uruchamiaj programy, które mają problemy z korzystaniem z narzędzia winpty . To pozwala ci nadal używać ładniejszego terminalu miętowego, ale może stać się niewygodny, jeśli potrzebujesz obejścia dla wielu programów.
- [użyj cmd.exe] i skonfiguruj go pod kątem „Szybkiej edycji”, rozsądnego rozmiaru i przewijania wstecz oraz odpowiedniej czcionki Unicode. Nadal będziesz musiał żyć z innymi dziwactwami [cmd.exe].
- Zainstaluj i użyj Conemu .
Inne sprawy
Dwie najważniejsze rzeczy, o których należy pamiętać, to:
istnieje wymiana pomiędzy mocą a problemami trudnymi do debugowania. Im potężniejsze rozwiązanie, tym więcej rzeczy może pójść nie tak, nawet w sposób, który początkowo będzie wydawał się niezwiązany z warstwą Linuksa.
jeśli nie masz dużego doświadczenia z Linuksem, nie korzystaj z bardziej zaawansowanych rozwiązań, takich jak Cygwin / MSYS2 / MinGW
UnxUtils i GnuWin32 mają najmniejszą moc, ale także najmniejszy potencjał powodowania bólów głowy. Cygwin i podobne przebiją poprzeczkę zarówno pod względem siły, jak i bólów głowy. Cmder jest gdzieś pośrodku. Kiedy potrzebujesz najbardziej wydajnych rozwiązań, śpij spokojnie i bądź w pełni skoncentrowany. Unikaj używania zaawansowanych rozwiązań podczas testowania czegoś nowego i być może niestabilnego. Nie zapominaj również, że rozwiązania o średniej złożoności, takie jak cmder, nie są bez skazy.
Kwestia poleceń Linux-owych wyświetlających polecenia systemu Windows jest częstą przyczyną trudnych do debugowania problemów w rozwiązaniach takich jak Cygwin / MSYS2 / MinGW. Oto przykład: miałem plik .bat, który używał polecenia timeout. Uruchomienie pod Cygwin nie powiedzie się, ponieważ limit czasu jest również poleceniem Linuksa, ale z inną składnią. Po zauważeniu problemu dowiedziałem się, że mogę dodać PATH = ... na górze pliku .bat, aby upewnić się, że polecenie systemu Windows ma priorytet. Ale wtedy dostałem jeszcze bardziej tajemniczy błąd „Przekierowanie wejścia nie jest obsługiwane” i zdecydowałem się na obejście tego problemu przed znalezieniem przyczyny.
Oto przykład problemu z cmder. Uruchomiłem wersję unisona dla Windows pod Cmder i pod pewnymi specjalnymi warunkami wisiał bez żadnego komunikatu o błędzie . To samo polecenie zawsze działało idealnie pod cmd.exe. Zabawne jest to, że działał on również idealnie pod Cygwin (w rzeczywistości, jeśli masz nazwy plików Unicode, terminal Cygwin jest lepszy niż cmd.exe, ponieważ cmd.exe często wyświetla zniekształcony tekst Unicode).
O tym przewodniku
W latach 2017-05 miałem dość niezrozumienia różnic między powyższymi narzędziami, chociaż używałem niektórych z nich od dawna (głównie CygWin i cmder, ale nigdy do celów programistycznych). Poświęciłem więc kilka godzin na przemycenie krajobrazu. Ten przewodnik jest wynikiem notatek, które zachowałem. Nie jestem ekspertem w tej dziedzinie, ale starałem się znaleźć wszystkie istotne informacje, przeczytać je krytycznym okiem i wyraźnie przedstawić najważniejsze części. Proszę o komentarz, jeśli coś wydaje się nie tak, a ja postaram się to naprawić.
Na koniec przeprosiny za niektóre problemy terminologiczne: w tym tekście czasami używam terminu Linux zamiast UNIX lub POSIX. Wiem, że nie są takie same, ale bardzo trudno jest je rozróżnić, podchodząc do tematu z tak dużej odległości. Nawet jeśli nie jest to trudne, zajmuje mi to czasu, którego nie mam ;-)
putty
łączyć się z prawdziwym serwerem Linux. w systemie Windows zawsze byłem zarówno niechętny, jak i kuszony do używaniacygwin
, niechętnie z powodu mojej niezdarnej instalacji. Ale osobiście uważam, że jest wygodniejszy w użyciu niż msys i szybszy niż vm. po zainstalowaniu cygwin okazuje się w jakiś sposób przenośny, wystarczy skopiować jego katalog, jednak utworzy nową nazwę użytkownika na każdym komputerze / użytkowniku na podstawie nazwy użytkownika systemu Windows (przynajmniej domyślnie). Należy jednak pamiętać, że ponieważ cygwin / msys można postrzegać jako niestandardową „dystrybucję”, może brakować niektórych [opcjonalnych] przełączników poleceń. przetestuj je.