Jak mogę korzystać z powłoki podobnej do Basha w systemie Windows?


53

Używam Linuksa i Maca i wkrótce nauczę kilku rzeczy z linii poleceń.

Co mogę zainstalować w systemie Windows, aby uzyskać okno terminala najbardziej podobne do podstawowej powłoki Mac / Linux Bash?

Chciałbym również móc zdefiniować .bash_aliases, jeśli to możliwe.


3
zwykliśmy puttyłączyć się z prawdziwym serwerem Linux. w systemie Windows zawsze byłem zarówno niechętny, jak i kuszony do używania cygwin, 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.
n611x007

5
Microsoft właśnie ogłosił, że kolejna aktualizacja systemu Windows 10 będzie zawierać Bash.
Dmitri Nesteruk

Odpowiedzi:


42

Możesz zainstalować Cygwin lub MSYS / MinGW , lub możesz zainstalować pełną dystrybucję Linuksa na maszynie wirtualnej (na przykład za pomocą VirtualBox ).


Użyłem cygwina o wielkości 135 mb (z zapakowaniem 25 mb), skopiowanego z innego komputera (przenośnego). stworzył nową nazwę użytkownika na podstawie aktualnego użytkownika nowych komputerów i działał doskonale inaczej. mój obecny cygwin ma 800 MB, ze środowiskiem kompilacji, kodem źródłowym 200-300 MB i innymi rzeczami.
n611x007

2
Uwaga: możesz teraz zainstalować „Podsystem systemu Windows dla systemu Linux”, który umożliwia uruchamianie powłoki systemu Linux w trybie użytkownika i narzędzi użytkownika w systemie Windows. Zobacz odpowiedź poniżej ...
MrHinsh - Martin Hinshelwood

48

Możesz teraz zainstalować Podsystem Windows dla systemu Linux, który pozwala na uruchamianie natywnej powłoki systemu Linux w trybie użytkownika i narzędzi w systemie Windows . Pozwala to na uruchamianie powłoki Bash bezpośrednio w systemie Windows i jest oparty na Ubuntu.

Zostało to wprowadzone w systemie Windows 10 wraz z aktualizacją rocznicową (2016) i nie jest domyślnie włączone. Aby włączyć nową funkcję w maszynie Windows 10 Anniversary Update, wykonaj następujące czynności:

  1. Przejdź do Ustawienia -> Aktualizacja i bezpieczeństwo -> Dla programistów i wybierz „Tryb programisty”
  2. Panel sterowania -> Programy i funkcje i kliknij „Włącz lub wyłącz funkcje systemu Windows” w lewym górnym panelu
  3. W oknie dialogowym zaznacz „Podsystem Windows dla systemu Linux” i kliknij OK
  4. Uruchom ponownie maszynę
  5. Wyszukaj „bash” i kliknij na niego, powinien otworzyć wiersz polecenia i zapytać, czy chcesz zainstalować „Ubuntu w systemie Windows”, kontynuuj z „y”
  6. Po instalacji poprosi o utworzenie nazwy użytkownika i hasła do systemu UNIX
  7. Jesteś teraz gotowy do użycia powłoki bash

Trochę historii, w 2015 roku w ramach projektu Astoria rozpoczęto wprowadzanie aplikacji dla systemu Windows do systemu Windows. W tym celu zbudowano podsystem Linux o nazwie Windows Subsystem for Linux (WSL). Ostatecznie projekt Astoria został porzucony, ponieważ podważył ich strategię UWP (Universal Windows Platform), ale niektóre części zostały zachowane i stanowią podstawę bash dla Windows. W trakcie kursu Microsoft współpracował z Canonical (twórcami Ubuntu Linux), aby zapewnić im natywny obraz ze wszystkimi obsługiwanymi narzędziami / plikami binarnymi.

Więcej informacji dostępnych tutaj,
https://blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/
https://blogs.windows.com / buildingapps / 2016/03/30 / run-bash-on-ubuntu-on-windows /
https://sec.ch9.ms/sessions/build/2016/P488.mp4 (wideo)



Bardziej podoba mi się ta odpowiedź!
Peter

1
@Peter Dziękuję, wypróbowałem to wczoraj krótko, mogłem uruchomić gcc / g ++, mogłem uruchomić Firefoksa przez xserver (dość wolno, może ograniczają użycie procesora?), Chrome i domyślna przeglądarka ulegały awarii i niektóre polecenia, takie jak „ekran” nie działał, w następnej aktualizacji bash powinno się załatwić, ponieważ wciąż jest w fazie beta. Powiedziawszy to, po prostu bash dostępny natywnie w systemie Windows jest fantastyczny! Otwiera wiele możliwości. Kudos Microsoft!
Nemo,

Możesz również uruchomić to w programie Powershell (uruchom jako administrator): Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"I zainstalować dowolne z następujących programów ze sklepu Windows: Ubuntu, Debian, OpenSUSE, Kali Linux
Zhenhir

18

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 i Babun

Cygwin zapewnia:

  1. powłoka bash i terminal Mintty,
  2. szeroki wachlarz typowych narzędzi Linux skompilowanych do działania w systemie Windows
  3. 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.batzamiast” c:\autoexec.bati gotowość do radzenia sobie z danymi wyjściowymi za pomocą zakończenia linii \nw 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

Mingw-w64 zapewnia:

  1. bash shell,
  2. spora ilość narzędzi Linux,
  3. ł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 i Git dla Windows

MSYS2 zapewnia:

  1. powłoka bash i terminal Mintty,
  2. spora ilość narzędzi Linux,
  3. w pełni funkcjonalny menedżer pakietów wiersza poleceń do instalowania programów systemu operacyjnego
  4. części zarówno Cygwin, jak i MinGW do obsługi budowania aplikacji z lub bez kompleksowej warstwy kompatybilności z Linux
  5. 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.

Podsystem Windows dla systemu Linux (WSL)

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:

  1. 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.

  2. 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 ;-)


2
To wspaniała odpowiedź, dziękuję za podzielenie się swoimi odkryciami i doświadczeniem.
Daniel Sokolowski,

Kompleksowa odpowiedź, ale to pacmannie jestpackman
Adrian Günter

Jak to może nie być zaakceptowana odpowiedź. Dziękujemy za wyszczególnienie tego wszystkiego.
42.

10

Sugeruję pobranie i zainstalowanie minimalnego zestawu MinGW, a także minimalnego zestawu MSYS. Instalator MinGW zapewnia łatwy GUI do wyboru pakietów, które chcesz zainstalować. Jeśli wszystko czego potrzebujesz to BASH, instalacja nie zajmie więcej niż kilka megabajtów.

AKTUALIZACJA: Przeprowadziłem się do MSYS2, który jest znacznie bardziej zaawansowany i ma port narzędzia Pacman ArchLinux do zarządzania pakietami. Instalator MSYS2 ma wszystko, czego potrzebujesz, a także używa mięty, co jest absolutnie idealne.


10

Istnieje również Clink dostępny na GitHub . Integruje się z wierszem poleceń systemu Windows za pomocą bibliotek haków.

Z opisu projektu:

Clink łączy natywną powłokę systemu Windows cmd.exe z potężnymi funkcjami edycji wiersza poleceń biblioteki GNU Readline, która zapewnia bogate możliwości uzupełniania, historii i edycji linii.

(więc nie zapewnia funkcji bash-as-a-language-language ani innych dodatków uniksowych)

Używam Linuksa w pracy i czasami tabuluję się w cmd, co nie działa tak, jakbym tego oczekiwał po Bash. Dzięki Clink mogę pokonać niektóre z tych niedociągnięć.

Ostatnio odkryłem również obiecujący, ale jeszcze nieulegalny projekt o nazwie flinux, który emuluje funkcje systemu Linux i zapewnia na nim jakiś system (obecnie oparty na Arch Linux)


Czy Clink faktycznie zmienia język, czy tylko poprawia coś w cmd.exe? Nie jest to całkowicie jasne z odpowiedzi.
Sarge Barszcz

Umożliwia korzystanie ze zwykłych funkcji powłoki * nix, takich jak wyszukiwanie wsteczne za pomocą Ctrl + R, uzupełnianie poleceń wyszukiwania PATH itp.
Andreas

Więc to nie jest implementacja bash, prawda?
Sarge Barszcz

Eee, nie. Rozszerzenie do cmd.exe, tak jak opisano na stronie;)
Andreas

7

Oprócz tego, co powiedział faffaffaff , Git dla Windows zawiera Bash i niektóre popularne programy wiersza poleceń Linuksa (np. Vim , sed i gawk ). Opiera się na MSYS . Wersja programów jest jednak stara, na przykład Bash to wersja 3.1. Cygwin miałby nowsze wersje narzędzi.

Używam również ConEmu jako emulatora terminala (głównie do podświetlania składni w Vimie, stron tabulatorów i łatwiejszego wklejania kopii). console2 to także kolejny popularny emulator terminala, chociaż go nie próbowałem.


BTW: ConEmu rozpoznaje również instalacje MSYS2 i pozwala na pewną integrację z Clink.
Andreas


1

Właśnie próbowałem z Babunem , który zintegrował wewnętrznie Cygwin i smakuje mi dobrze:)

Plik do pobrania nieco duży, około 250 MB. Ale instalacja jest prosta; nie trzeba niczego konfigurować i to po prostu działa!


Babun obejmuje cały cygwin, jest naprawdę niesamowicie ogromny. Proces instalacji jest nieco zhackowany (obecnie archiwum zip jest blokowane przez chrome jako niebezpieczny plik). Ale jak dotąd najlepszy zamiennik terminala, jaki znalazłem.
Tombart

Babun był dla mnie naprawdę powolny. Przerzuciłem się na używanie conemu i git-shella
inaczej
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.