Arbeiten über Windows- und Linux-Dateisysteme hinweg

Es gibt eine Reihe von Überlegungen, die sie bei der Arbeit zwischen Windows- und Linux-Dateisystemen beachten sollten. Einige davon werden in diesem Leitfaden für Sie beschrieben, darunter einige Beispiele für die Interoperabilitätsunterstützung zum Mischen von Windows- und Linux-basierter Befehlen.

Dateispeicherung und -leistung über Dateisysteme hinweg

Es wird davon abgeraten, mit Ihren Dateien betriebssystemübergreifend zu arbeiten, es sei denn, es liegt ein besonderer Grund dafür vor. Für die schnellste Leistungsgeschwindigkeit speichern Sie Ihre Dateien im WSL-Dateisystem, wenn Sie mit einer Linux-Befehlszeile (Ubuntu, OpenSUSE usw.) arbeiten. Wenn Sie in einer Windows-Befehlszeile (PowerShell, Eingabeaufforderung) arbeiten, speichern Sie Ihre Dateien im Windows-Dateisystem.

Wenn Sie z. B. die WSL-Projektdateien speichern:

  • Verwenden Sie das Stammverzeichnis des Linux-Dateisystems: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Verwenden Sie nicht das Stammverzeichnis des Windows-Dateisystems: /mnt/c/Users/<user name>/Project$oder C:\Users\<user name>\Project.

Wenn im Dateipfad einer WSL-Befehlszeile /mnt/ angezeigt wird, bedeutet dies, dass Sie von einem bereitgestellten Laufwerk aus arbeiten. Das Laufwerk C:/ (C:\Users\<user name>\Project) des Windows-Dateisystems sieht bei der Bereitstellung in einer WSL-Befehlszeile wie folgt aus: /mnt/c/Users/<user name>/Project$. Sie können Ihre Projektdateien auf einem bereitgestellten Laufwerk speichern, aber die Leistungsgeschwindigkeit verbessert sich, wenn sie direkt auf dem Laufwerk \\wsl$ gespeichert werden.

Anzeigen Ihres aktuellen Verzeichnisses im Windows-Datei-Explorer

Sie können das Verzeichnis anzeigen, in dem Ihre Dateien gespeichert sind, indem Sie den Windows-Datei-Explorer über die Befehlszeile öffnen. Verwenden Sie dazu:

explorer.exe .

Alternativ können Sie auch den Befehl „powershell.exe /c start .“ verwenden. Stellen Sie sicher, dass Sie den Punkt am Ende des Befehls hinzufügen, um das aktuelle Verzeichnis zu öffnen.

Geben Sie zum Anzeigen aller verfügbaren Linux-Verteilungen und deren Stammdateisystemen im Windows-Datei-Explorer in der Adressleiste Folgendes ein: \\wsl$.

Anzeigen von Projektdateien im Windows-Datei-Explorer

Unterscheidung nach Groß-/Kleinschreibung bei Dateinamen und Verzeichnissen

Unterscheidung nach Groß-/Kleinschreibung bestimmt, ob Großbuchstaben (FOO.txt) und Kleinbuchstaben (foo.txt) in einem Datei- oder Verzeichnisnamen als unterschiedlich (Groß-/Kleinschreibung wird berücksichtigt) oder gleichwertig (Groß-/Kleinschreibung wird nicht berücksichtigt) behandelt werden. Windows- und Linux-Dateisysteme behandeln die Unterscheidung nach Groß-/Kleinschreibung unterschiedlich – Windows berücksichtigt die Groß-/Kleinschreibung, Linux nicht. Weitere Informationen zum Anpassen der Unterscheidung nach Groß-/Kleinschreibung, insbesondere beim Bereitstellen von Datenträgern mit WSL, finden Sie im Artikel Anpassen der Unterscheidung nach Groß-/Kleinschreibung.

Interoperabilität von Windows- und Linux-Befehlen

Windows- und Linux-Tools und -Befehle können in WSL gleichwertig und austauschbar verwendet werden.

  • Ausführen von Windows-Tools (z. B. „notepad.exe“) über eine Linux-Befehlszeile aus (d. h. Ubuntu).
  • Ausführen von Linux-Tools (z. B. „grep“) über eine Windows-Befehlszeile (d. h. PowerShell).
  • Freigeben von Umgebungsvariablen zwischen Linux und Windows. (Build 17063+)

Ausführen von Linux-Tools über eine Windows-Befehlszeile

Führen Sie Linux-Binärdateien über die Windows-Eingabeaufforderung (CMD oder PowerShell) mithilfe von wsl <command> (oder wsl.exe <command>) aus.

Beispiel:

C:\temp> wsl ls -la
<- contents of C:\temp ->

Auf diese Weise aufgerufene Binärdateien:

  • Verwenden das gleiche Arbeitsverzeichnis wie die aktuelle CMD- oder PowerShell-Eingabeaufforderung.
  • Werden als WSL-Standardbenutzer aus geführt.
  • Sie verfügen über dieselben Windows-Administratorrechte wie der aufrufende Prozess und das Terminal.

Der auf wsl (oder wsl.exe) folgende Linux-Befehl wird wie ein beliebiger Befehl verarbeitet, der in WSL ausgeführt wird. Dinge wie sudo, Piping und Dateiumleitung funktionieren.

Beispiel für die Verwendung von sudo zum Aktualisieren Ihrer Linux-Standardverteilung:

C:\temp> wsl sudo apt-get update

Nachdem Sie diesen Befehl ausgeführt haben, wird der Benutzername Ihrer Linux-Standardverteilung angezeigt, und Sie werden zur Eingabe Ihres Kennworts aufgefordert. Nachdem Sie Ihr Kennwort ordnungsgemäß eingegeben haben, werden von Ihrer Verteilung die Updates heruntergeladen.

Kombinieren von Linux- und Windows-Befehlen

Hier finden Sie einige Beispiele für das Kombinieren von Linux- und Windows-Befehlen unter Verwendung von PowerShell.

Um den Linux-Befehl ls -la zum Auflisten von Dateien und den PowerShell-Befehl findstr zum Filtern der Ergebnisse nach Wörtern zu verwenden, die die Zeichenfolge „git“ enthalten, kombinieren Sie die Befehle:

wsl ls -la | findstr "git"

Um den PowerShell-Befehl dir zum Auflisten von Dateien und den Linux-Befehl grep zum Filtern der Ergebnisse nach Wörtern zu verwenden, die die Zeichenfolge „git“ enthalten, kombinieren Sie die Befehle:

C:\temp> dir | wsl grep git

Um den Linux-Befehl ls -la zum Auflisten von Dateien und den PowerShell-Befehl > out.txt zum Drucken dieser Liste in eine Textdatei mit dem Namen „out.txt“ zu verwenden, kombinieren Sie die Befehle:

C:\temp> wsl ls -la > out.txt

Die an wsl.exe übergebenen Befehle werden ohne Änderung an den WSL-Prozess weitergeleitet. Dateipfade müssen im WSL-Format angegeben werden.

So verwenden Sie den Linux-Befehl ls -la zum Auflisten von Dateien im /proc/cpuinfo-Linux-Dateisystempfad mithilfe von PowerShell:

C:\temp> wsl ls -la /proc/cpuinfo

So verwenden Sie den Linux-Befehl ls -la zum Auflisten von Dateien im C:\Program Files-Windows-Dateisystempfad mithilfe von PowerShell:

C:\temp> wsl ls -la "/mnt/c/Program Files"

Ausführen von Windows-Tools aus Linux

WSL kann Windows-Tools direkt über die WSL-Befehlszeile mithilfe von [tool-name].exe ausführen. Beispiel: notepad.exe.

Anwendungen, die auf diese Weise ausgeführt werden, besitzen die folgenden Eigenschaften:

  • Sie behalten das Arbeitsverzeichnis als das Verzeichnis der WSL-Eingabeaufforderung bei (in den meisten Fällen, Ausnahmen werden unten erläutert).
  • Sie verfügen über die gleichen Berechtigungen wie der WSL-Prozess.
  • Sie werden als aktiver Windows-Benutzer ausgeführt.
  • Sie werden im Task-Manager von Windows so angezeigt, als würden die direkt über die CMD-Eingabeaufforderung ausgeführt.

Ausführbare Windows-Dateien, die in WSL ausgeführt werden, werden ähnlich wie native ausführbare Linux-Dateien verarbeitet. Piping, Umleitungen und sogar Hintergrundverarbeitung funktionieren wie erwartet.

Um das Windows-Tool ipconfig.exe auszuführen, das Linux-Tool grep zum Filtern der „IPv4“-Ergebnisse und das Linux-Tool cut zum Entfernen der Spaltenfelder zu verwenden,geben Sie aus einer Linux-Verteilung (z. B. Ubuntu) Folgendes ein:

ipconfig.exe | grep IPv4 | cut -d: -f2

Sehen wir uns ein Beispiel für das Kombinieren von Windows- und Linux-Befehlen an. Öffnen Sie Ihre Linux-Verteilung (d. h. Ubuntu) und erstellen Sie eine Textdatei: touch foo.txt. Verwenden Sie nun den Linux-Befehl ls -la, um die direkten Dateien und deren Erstellungsdetails aufzulisten, sowie das Windows PowerShell-Tool findstr.exe, um die Ergebnisse zu filtern, sodass nur Ihre foo.txt-Datei in den Ergebnissen angezeigt wird:

ls -la | findstr.exe foo.txt

Windows-Tools müssen die Dateierweiterung enthalten, der Groß-/Kleinschreibung der Datei Rechnung tragen und ausführbare Dateien sein. Nicht ausführbare Dateien, einschließlich Batchskripts. Native CMD-Befehle wie dir können mit einem Befehl cmd.exe /C ausgeführt werden.

Listen Sie z. B. den Inhalt Ihres Windows-Dateisystemverzeichnisses „C:\“ auf, indem Sie Folgendes eingeben:

cmd.exe /C dir

Oder verwenden Sie den Befehl ping, um eine Echoanforderung an die Website „microsoft.com“ zu senden:

ping.exe www.microsoft.com

Parameter werden unverändert an die Windows-Binärdatei übergeben. Beispielsweise öffnet der folgende Befehl C:\temp\foo.txt in notepad.exe:

notepad.exe "C:\temp\foo.txt"

Dies funktioniert auch:

notepad.exe C:\\temp\\foo.txt

Freigeben von Umgebungsvariablen zwischen Windows und WSL mit WSLENV

WSL und Windows verwenden WSLENV, eine spezielle Umgebungsvariable, die entwickelt wurde, um Windows- und Linux-Verteilungen, die unter WSL ausgeführt werden, zu verbinden.

Eigenschaften einer WSLENV-Variablen:

  • Die Variable ist freigegeben, und sie ist sowohl in Windows- als auch in WSL-Umgebungen vorhanden.
  • Es handelt sich um eine Liste von Umgebungsvariablen, die von Windows und WSL gemeinsam genutzt werden können.
  • Sie kann Umgebungsvariablen so formatieren, dass sie in Windows und WSL gut funktionieren.
  • Sie kann den Flow zwischen WSL und Win32 unterstützen.

Hinweis

Vor 17063 war PATH die einzige Windows-Umgebungsvariable, auf die WSL zugreifen konnte (sodass Sie ausführbare Win32-Dateien unter WSL starten konnten). Ab 17063 wird WSLENV unterstützt. WSLENV unterscheidet zwischen Groß-/Kleinschreibung.

WSLENV-Flags

In WSLENV sind vier Flags verfügbar, die beeinflussen, wie die Umgebungsvariable übersetzt wird.

WSLENV-Flags:

  • /p: Übersetzt den Pfad zwischen Pfaden im WSL-/Linux-Stil und Win32-Pfaden.
  • /l: Gibt an, dass die Umgebungsvariable eine Liste von Pfaden ist.
  • /u: Gibt an, dass diese Umgebungsvariable nur beim Ausführen von WSL aus Win32 einbezogen werden soll.
  • /w: Gibt an, dass diese Umgebungsvariable nur beim Ausführen von Win32 aus WSL einbezogen werden soll.

Diese Flags können nach Bedarf kombiniert werden.

Hier finden Sie weitere Informationen über WSLENV, einschließlich FAQs und Beispiele für das Festlegen des Werts von WSLENV auf eine Verkettung anderer vordefinierter Umgebungsvariablen, jeweils mit einem Schrägstrich als Suffix, gefolgt von Flags, um Spezifizieren, wie der Wert übersetzt werden soll, und für die Übergabe von Variablen mit einem Skript. Dieser Artikel enthält auch ein Beispiel für das Einrichten einer Entwicklungsumgebung mit der Programmiersprache „Go“, die für die gemeinsame Nutzung eines GOPATH zwischen WSL und Win32 konfiguriert ist.

Deaktivieren der Interoperabilität

Benutzer können die Möglichkeit zum Ausführen von Windows-Tools für eine einzelne WSL-Sitzung deaktivieren, indem Sie den folgenden Befehl als root ausführen:

echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop

Zum erneuten Aktivieren von Windows-Binärdateien beenden Sie alle WSL-Sitzungen und führen „bash.exe“ erneut aus, oder führen Sie den folgenden Befehl als root aus:

echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop

Die Deaktivierung von Interop wird nicht zwischen WSL-Sitzungen beibehalten. Interop wird erneut aktiviert, wenn eine neue Sitzung gestartet wird.