Hier finden Sie eine Liste der ab 2018-05 verfügbaren Optionen mit einigen Aktualisierungen in Bezug auf die WSL im Zeitraum 2019-01 sowie einige Details zu den einzelnen Optionen.
Optionen, die auffallen
Cygwin bietet Folgendes:
- eine Bash-Shell und das Mintty-Terminal,
- Eine umfangreiche Palette gängiger Linux-Dienstprogramme, die für die Ausführung unter Windows kompiliert wurden
- Eine umfassende Kompatibilitätsebene, mit der Linux-Programme unter Windows ausgeführt werden können.
Cygwin ist bestrebt, die Portierung von Linux-Anwendungen auf Windows zu vereinfachen. Wenn ein C-Programm für Unix entwickelt wurde und Funktionen wie Pipes, Datei- und Verzeichniszugriff im Unix-Stil usw. verwenden soll, können Sie es für Cygwin kompilieren. Cygwin fungiert dann als Kompatibilitätsebene zwischen dem Code und dem fremden Betriebssystem (Windows). . Auf diese Weise kann dasselbe C-Programm unter Linux und Windows ohne oder mit nur geringen Änderungen ausgeführt werden. Eine riesige Liste von Linux-Programmen wurde damit erfüllt und kann ausgeführt werden, wenn Sie Cygwin installieren. Allerdings müssen Sie als Benutzer dieser Programme wahrscheinlich mit Unix vertraut sein. Beispielsweise müssen Sie möglicherweise Argumente wie /cygdrive/c/autoexec.bat
anstelle von übergeben c:\autoexec.bat
und bereit sein, die Ausgabe mit Unix-Zeilenterminierung ( \n
) anstelle von Windows-Zeilenterminierung ( \r\n
) zu verarbeiten.
Die Sammlung aller Cygwin-Programme umfasst ein Repository. Obwohl Cygwin über keinen herkömmlichen Linux-Paketmanager verfügt, können Sie Programme in diesem Repository jederzeit auf eine sehr kontraintuitive Weise hinzufügen, entfernen und aktualisieren (Sie führen die Datei setup.exe von Cygwin unter aus jederzeit nach Abschluss der Installation)
Babun ist Cygwin mit einem umfassenden Paketmanager (Pakt), oh-my-zsh für seine Shell, Git, automatischen Updates und einer Plug-in-orientierten Architektur. Obwohl die Standard-Shell zsh ist, können Sie leicht zu bash wechseln. Es scheint ein schönes Upgrade von Vanille Cygwin zu sein, wenn Sie das zusätzliche Gewicht nicht stören.
Mingw-w64 bietet Folgendes:
- eine bash shell,
- eine ganze Reihe von Linux-Dienstprogrammen,
- eine SW-Entwicklungs-Toolchain zum Erstellen von Apps, die ohne Linux-Kompatibilitätsebene (oder mit einer minimalen) ausgeführt werden.
MinGW ist in erster Linie eine Softwareverteilung und eine Bauplattform für Windows. Insbesondere ist es ein Windows-Port der GNU-Compiler-Tools wie GCC, make, bash und so weiter. Es enthält eine ganze Reihe von GNU-Tools und eine minimale Unix-Kompatibilitätsebene.
Der Hauptunterschied zwischen Mingw-w64 und Cygwin liegt in den Prioritäten: Cygwin strebt eine vollständige POSIX-Kompatibilitätsebene an, die eine vollständige Implementierung aller wichtigen Unix-Systemaufrufe und -Bibliotheken umfasst. Leistung ist sekundär zur Kompatibilität. MinGW strebt nach Leistung, sodass bestimmte POSIX-APIs nicht bereitgestellt werden, die unter Windows nicht einfach und / oder schnell genug implementiert werden können. Das Hauptziel von MinGW sind auch Softwareentwickler. Nichtsdestotrotz können Gelegenheitsbenutzer auch die Shell und die enthaltenen allgemeinen Hilfsprogramme genießen.
MSYS2 bietet Folgendes:
- eine Bash-Shell und das Mintty-Terminal,
- eine ganze Reihe von Linux-Dienstprogrammen,
- Ein voll ausgestatteter Kommandozeilen-Paket-Manager zur Installation von Betriebssystemprogrammen
- Teile von Cygwin und MinGW zur Unterstützung der Erstellung von Anwendungen mit oder ohne umfassende Linux-Kompatibilitätsebene.
- Ein Software-Repository und ein Paket-Manager (pacman), mit denen sich Software unter Windows einfach installieren, verwenden, erstellen und portieren lässt.
MSYS2 ist auch in erster Linie eine Softwareverteilung und eine Plattform für Windows wie MinGW, kombiniert jedoch sowohl die Art von Cygwin als auch die Art von MinGW. Mit MSYS2 können Sie entweder "MinGW-Programme" oder "MSYS2-Programme" erstellen . Die spätere Verknüpfung mit der Kompatibilitätsschicht von MSYS2 (msys-2.dll), die die Entwicklung der Kompatibilitätsschicht von Cygwin mit ein paar Ergänzungen / Modifikationen genau verfolgt . Die Repositories der beiden Projekte sind jedoch völlig unabhängig. Obwohl sowohl MSYS2 als auch Cygwin bereitgestellt werden, haben grep.exe
sie möglicherweise eine völlig andere Version.
Git für Windows ist entweder nur MSYS2 mit installiertem Git oder basiert zumindest stark auf MSYS2 . Es bietet die gleiche Shell (Bash), Terminal (Mintty) und Paket-Manager (Pacman). Es scheint der beliebteste Weg zu sein, den dominanten Git unter Windows zum Laufen zu bringen, und zusammen mit ihm erhalten Sie eine schöne Unix-Umgebung.
Die WSL löst das gleiche Problem mit einer völlig anderen Methode. Sie führen denselben Code aus wie auf einem Linux-System mit WSL, das Kernel-Aufrufe abfängt und in Windows-Kernel-Aufrufe übersetzt (das Gegenteil von Wine). Natürlich kann die Übersetzung nicht perfekt sein , aber Microsoft hat die droped Beta Warnung . Da die WSL vor 2018 auf Windows Server nicht verfügbar war, habe ich mich nicht so intensiv damit befasst. Wie auch immer, Sie erhalten eine nette Bash-Shell mit den meisten CLI-Extras, die Sie auf einer Ubuntu-Standardinstallation erwarten würden. Microsoft gibt offiziell an, dass "WSL nicht darauf abzielt, GUI-Desktops oder -Anwendungen zu unterstützen"Es gibt jedoch inoffizielle Anweisungen dazu. Aus heutiger Sicht (Anfang 2018) sind die Hauptnachteile von WSL folgende: a) Das Rendern des Bildschirms und der Festplattenzugriff sind sehr langsam. B) Sie sollten keine WSL (Linux) -Dateien unter Windows bearbeiten. C) es läuft nur unter 64bit Windows. Hier ist ein alter, aber netter Vergleich mit Cygwin (beachten Sie, dass Rich Turner Mitglied des WSL-Teams ist und viele nützliche Informationen zur WSL gepostet hat)
Gemeinsamkeiten
Abgesehen von der WSL haben die meisten der oben genannten Tools viele gemeinsame Technologien (Bibliotheken, ausführbare Dateien, Konzepte). Zum Beispiel hängt die Bash-Shell, die mit MinGW geliefert wird, von msys-2.dll ab, die selbst eine Abzweigung von cygwin.dll ist. Also ja, es gibt viel Raum für Verwirrung :-)
Mehr Optionen
Cmder bietet nur ein nettes Terminal und eine bash-artige Shell für Windows. Die Hauptkomponente ist Conemu (das Terminal). Darüber hinaus wird Clink hinzugefügt, das eine leistungsstarke Befehlszeilenbearbeitung im Bash-Stil , ein benutzerdefiniertes Eingabeaufforderungslayout und das Monokai-Farbschema bietet. Es ist in hohem Maße (oder möglicherweise vollständig) kompatibel mit nativen Windows-Konsolenprogrammen.
Scoop bietet einen Befehlszeilen-Paketmanager für viele bekannte plattformübergreifende Programme, einschließlich vieler GNU-Tools. Es werden vorkompilierte Pakete heruntergeladen. Es bietet weder eine Shell noch ein Terminal, sondern läuft unter Windows 'cmd.exe (mit all seinen Einschränkungen, aber auch mit seiner vollen Kompatibilität mit nativen Windows-Konsolenprogrammen). Es enthält auch keine Compiler-Suite (aber natürlich sind Compiler und Entwicklungstools typische Pakete, die Sie mit scoop installieren können). Viele der von Scoop installierten Programme stammen entweder direkt aus dem MinGW / MSYS-Projekt oder wurden mit ihren Tools erstellt.
Noch mehr Möglichkeiten
Die folgenden Lösungen scheinen nicht aktiv zu sein und ich habe sie nie getestet, aber sie scheinen die Arbeit für andere zu erledigen:
Gow (Gnu On Windows) ist die leichtgewichtige Alternative zu Cygwin ohne Shell. Es verwendet ein praktisches Windows-Installationsprogramm, mit dem ungefähr 130 äußerst nützliche Open-Source-Linux-Anwendungen installiert werden, die als native Win32-Binärdateien kompiliert und über die Windows-Datei cmd.exe verfügbar sind. Es soll so klein wie möglich sein (ca. 10 MB).
UnxUtils & GnuWin32 : UnxUtils ist eine Sammlung von Ports allgemeiner GNU-Unix-ähnlicher Dienstprogramme für natives Win32, deren ausführbare Dateien nur von der Microsoft C-Laufzeitdatei msvcrt.dll abhängen. Sie müssen den Hauptteil und einige Updates herunterladen. GnuWin32 hat spätere Versionen als UnxUtils, benötigt aber unterstützende Dateien (zB DLLs)
MSYS & MinGW scheinen zu haben wurde verworfen wurde von MSYS2 & MinGW-W64 so dass ich nie sah sie an.
Einige häufige Probleme bei Cygwin und MSYS2
In Bezug auf das Terminal
Mintty ist das in Cygwin, MSYS2 und deren Derivaten verwendete Terminal. Man sollte sich bewusst sein, dass wenn Sie Windows native Konsolenprogramme ausführen, dies kein schmerzloser Ersatz für die Windows-Eingabeaufforderung ist. Während Programme mit einfacher Textausgabe normalerweise gut funktionieren, haben interaktive und Vollbild-Programme häufig Probleme. Lesen Sie mehr auf der Homepage von Mintty und den Eintrag "Einige native Konsolenprogramme funktionieren nicht, wenn sie von Git Bash ausgeführt werden" in den häufig gestellten Fragen zu Git für Windows . In diesem Eintrag finden Sie die folgenden Empfehlungen, wenn Sie auf Probleme dieser Art stoßen:
Es gibt verschiedene Methoden, um diese Probleme zu umgehen:
- Führen Sie mit dem Dienstprogramm winpty Programme aus, bei denen Probleme auftreten . Auf diese Weise können Sie das schönere Mintty-Terminal weiterhin verwenden, es kann jedoch unhandlich werden, wenn Sie die Problemumgehung für viele Programme benötigen.
- [benutze cmd.exe] und konfiguriere es für "Quick Edit", angemessene Größe und Scroll-Back und passende Unicode-Schrift. Sie müssen immer noch mit den anderen Macken von [cmd.exe] leben.
- Installieren und verwenden Sie Conemu .
Andere Probleme
Die zwei wichtigsten Dinge, die Sie beachten sollten, sind folgende:
Es gibt einen Kompromiss zwischen Leistung und schwer zu debuggenden Problemen. Je leistungsfähiger die Lösung ist, desto mehr Dinge können schief gehen, auch wenn sie zunächst nicht mit Ihrer Linux-Ebene zusammenhängen.
Wenn Sie nicht viel Linux-Erfahrung haben, sollten Sie keine leistungsfähigeren Lösungen wie Cygwin / MSYS2 / MinGW verwenden
UnxUtils und GnuWin32 haben die geringste Leistung, aber auch das geringste Potenzial, Kopfschmerzen zu verursachen. Cygwin und ähnliches wird die Messlatte sowohl bei der Leistung als auch bei den Kopfschmerzen anführen. Cmder ist irgendwo in der Mitte. Wenn Sie also die leistungsstärksten Lösungen benötigen, schlafen Sie gut und konzentrieren Sie sich. Vermeiden Sie leistungsfähige Lösungen, während Sie etwas Neues und möglicherweise Instabiles testen. Vergessen Sie auch nicht, dass Lösungen mit mittlerer Komplexität wie cmder nicht makellos sind.
Das Problem, dass Linux-Befehle Windows-Befehle spiegeln, ist eine häufige Ursache für schwer zu debuggende Probleme in Lösungen wie Cygwin / MSYS2 / MinGW. Hier ist ein Beispiel: Ich hatte eine .bat-Datei, die den Befehl timeout verwendete. Wenn es unter Cygwin ausgeführt wird, schlägt dies fehl, da timeout ebenfalls ein Linux-Befehl ist, der jedoch eine andere Syntax aufweist. Nachdem ich das Problem entdeckt habe, habe ich herausgefunden, dass ich ein PATH = ... am oberen Rand der .bat-Datei hinzufügen kann, um sicherzustellen, dass der Windows-Befehl Priorität hat. Aber dann bekam ich einen noch kryptischeren Fehler "Eingabeumleitung wird nicht unterstützt" und entschied mich für eine Problemumgehung, bevor ich den Grund fand.
Hier ist ein Beispiel für ein Problem mit cmder. Ich habe die Windows-Version von unison unter Cmder ausgeführt und unter bestimmten Umständen hing sie ohne Fehlermeldung . Unter cmd.exe lief immer derselbe Befehl perfekt. Das Komische ist, dass es auch unter Cygwin einwandfrei lief (wenn Sie Unicode-Dateinamen haben, ist ein Cygwin-Terminal sogar besser als cmd.exe, da cmd.exe häufig fehlerhaften Unicode-Text anzeigt).
Über diese Anleitung
In den Jahren 2017-05 hatte ich es satt, die Unterschiede der oben genannten Tools nicht zu verstehen, obwohl ich einige davon schon vor langer Zeit verwendet habe (hauptsächlich CygWin und cmder, aber nie für Entwicklungszwecke). Also habe ich ein paar Stunden damit verbracht, die Landschaft zu graben. Diese Anleitung ist das Ergebnis meiner Notizen. Ich bin kein Experte auf dem Gebiet, aber ich habe mich bemüht, alle relevanten Informationen zu finden, sie mit kritischem Auge zu lesen und die wichtigsten Teile klar darzustellen. Bitte kommentieren Sie, wenn etwas falsch scheint und ich werde mein Bestes tun, um es zu korrigieren.
Zum Schluss eine Entschuldigung für einige terminologische Probleme: In diesem Text verwende ich manchmal den Begriff Linux anstelle von UNIX oder POSIX. Ich weiß, dass sie nicht gleich sind, aber es ist sehr schwierig, sie zu unterscheiden, wenn man sich einem Thema von einer so großen Entfernung nähert. Auch wenn es nicht schwierig ist, braucht es Zeit, die ich nicht habe ;-)
putty
eine Verbindung zu einem echten Linux-Server hergestellt. Unter Windows war ich immer sowohl zurückhaltend als auch in der Versuchung, es zu verwendencygwin
. Aber ich persönlich fand es praktischer als msys und schneller als ein vm. Nach der Installation stellt sich heraus, dass Cygwin irgendwie portabel ist. Es reicht aus, nur das Verzeichnis zu kopieren. Es wird jedoch ein neuer Benutzername auf jedem Computer / Benutzer basierend auf dem Windows-Benutzernamen erstellt (zumindest standardmäßig). Beachten Sie jedoch, dass einige [optionale] Befehlsschalter fehlen können, da cygwin / msys als benutzerdefinierte "Distribution" angesehen werden kann. teste sie.