Windows-Interoperabilität mit LinuxWindows interoperability with Linux

Das Windows-Subsystem für Linux (WSL) verbessert die Integration zwischen Windows und Linux kontinuierlich.The Windows Subsystem for Linux (WSL) is continuously improving integration between Windows and Linux. Sie haben folgende Möglichkeiten:You can:

  • Ausführen von Windows-Tools (z. B. „notepad.exe“) über eine Linux-Befehlszeile aus (d. h. Ubuntu).Run Windows tools (ie. notepad.exe) from a Linux command line (ie. Ubuntu).
  • Ausführen von Linux-Tools (z. B. „grep“) über eine Windows-Befehlszeile (d. h. PowerShell).Run Linux tools (ie. grep) from a Windows command line (ie. PowerShell).
  • Freigeben von Umgebungsvariablen zwischen Linux und Windows.Share environment variables between Linux and Windows. (Build 17063+)(Build 17063+)

Hinweis

Wenn Sie das Creators Update (Okt. 2017, Build 16299) oder das Anniversary Update (Aug. 2016, Build 14393) ausführen, fahren Sie mit Frühere Versionen von Windows 10 fort.If you're running Creators Update (Oct 2017, Build 16299) or Anniversary Update (Aug 2016, Build 14393), jump to the Earlier versions of Windows 10.

Ausführen von Linux-Tools über eine Windows-BefehlszeileRun Linux tools from a Windows command line

Führen Sie Linux-Binärdateien über die Windows-Eingabeaufforderung (CMD oder PowerShell) mithilfe von wsl <command> (oder wsl.exe <command>) aus.Run Linux binaries from the Windows Command Prompt (CMD) or PowerShell using wsl <command> (or wsl.exe <command>).

Beispiel:For example:

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

Auf diese Weise aufgerufene Binärdateien:Binaries invoked in this way:

  • Verwenden das gleiche Arbeitsverzeichnis wie die aktuelle CMD- oder PowerShell-Eingabeaufforderung.Use the same working directory as the current CMD or PowerShell prompt.
  • Werden als WSL-Standardbenutzer aus geführt.Run as the WSL default user.
  • Sie verfügen über dieselben Windows-Administratorrechte wie der aufrufende Prozess und das Terminal.Have the same Windows administrative rights as the calling process and terminal.

Der auf wsl (oder wsl.exe) folgende Linux-Befehl wird wie ein beliebiger Befehl verarbeitet, der in WSL ausgeführt wird.The Linux command following wsl (or wsl.exe) is handled like any command run in WSL. Dinge wie sudo, Piping und Dateiumleitung funktionieren.Things such as sudo, piping, and file redirection work.

Beispiel für die Verwendung von sudo zum Aktualisieren Ihrer Linux-Standardverteilung:Example using sudo to update your default Linux distribution:

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.Your default Linux distribution user name will be listed after running this command and you will be asked for your password. Nachdem Sie Ihr Kennwort ordnungsgemäß eingegeben haben, werden von Ihrer Verteilung die Updates heruntergeladen.After entering your password correctly, your distribution will download updates.

Kombinieren von Linux- und Windows-BefehlenMixing Linux and Windows commands

Hier finden Sie einige Beispiele für das Kombinieren von Linux- und Windows-Befehlen unter Verwendung von PowerShell.Here are a few examples of mixing Linux and Windows commands using 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:To use the Linux command ls -la to list files and the PowerShell command findstr to filter the results for words containing "git", combine the commands:

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:To use the PowerShell command dir to list files and the Linux command grep to filter the results for words containing "git", combine the commands:

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:To use the Linux command ls -la to list files and the PowerShell command > out.txt to print that list to a text file named "out.txt", combine the commands:

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

Die an wsl.exe übergebenen Befehle werden ohne Änderung an den WSL-Prozess weitergeleitet.The commands passed into wsl.exe are forwarded to the WSL process without modification. Dateipfade müssen im WSL-Format angegeben werden.File paths must be specified in the WSL format.

So verwenden Sie den Linux-Befehl ls -la zum Auflisten von Dateien im /proc/cpuinfo-Linux-Dateisystempfad mithilfe von PowerShell:To use the Linux command ls -la to list files in the /proc/cpuinfo Linux file system path, using 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:To use the Linux command ls -la to list files in the C:\Program Files Windows file system path, using PowerShell:

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

Ausführen von Windows-Tools aus LinuxRun Windows tools from Linux

WSL kann Windows-Tools direkt über die WSL-Befehlszeile mithilfe von [tool-name].exe ausführen.WSL can run Windows tools directly from the WSL command line using [tool-name].exe. Beispiel: notepad.exe.For example, notepad.exe.

Anwendungen, die auf diese Weise ausgeführt werden, besitzen die folgenden Eigenschaften:Applications run this way have the following properties:

  • Sie behalten das Arbeitsverzeichnis als das Verzeichnis der WSL-Eingabeaufforderung bei (in den meisten Fällen, Ausnahmen werden unten erläutert).Retain the working directory as the WSL command prompt (for the most part -- exceptions are explained below).
  • Sie verfügen über die gleichen Berechtigungen wie der WSL-Prozess.Have the same permission rights as the WSL process.
  • Sie werden als aktiver Windows-Benutzer ausgeführt.Run as the active Windows user.
  • Sie werden im Task-Manager von Windows so angezeigt, als würden die direkt über die CMD-Eingabeaufforderung ausgeführt.Appear in the Windows Task Manager as if directly executed from the CMD prompt.

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.Windows executables run in WSL are handled similarly to native Linux executables -- piping, redirects, and even backgrounding work as expected.

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:To run the Windows tool ipconfig.exe, use the Linux tool grep to filter the "IPv4" results, and use the Linux tool cut to remove the column fields, from a Linux distribution (for example, Ubuntu) enter:

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

Sehen wir uns ein Beispiel für das Kombinieren von Windows- und Linux-Befehlen an.Let's try an example mixing Windows and Linux commands. Öffnen Sie Ihre Linux-Verteilung (d. h. Ubuntu) und erstellen Sie eine Textdatei: touch foo.txt.Open your Linux distribution (ie. Ubuntu) and create a text file: 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:Now use the Linux command ls -la to list the direct files and their creation details, plus the Windows PowerShell tool findstr.exe to filter the results so only your foo.txt file shows in the results:

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.Windows tools must include the file extension, match the file case, and be executable. Nicht ausführbare Dateien, einschließlich Batchskripts.Non-executables including batch scripts. Native CMD-Befehle wie dir können mit einem Befehl cmd.exe /C ausgeführt werden.CMD native commands like dir can be run with cmd.exe /C command.

Listen Sie z. B. den Inhalt Ihres Windows-Dateisystemverzeichnisses „C:\“ auf, indem Sie Folgendes eingeben:For example, list the contents of your Windows files system C:\ directory, by entering:

cmd.exe /C dir

Oder verwenden Sie den Befehl ping, um eine Echoanforderung an die Website „microsoft.com“ zu senden:Or use the ping command to send an echo request to the microsoft.com website:

ping.exe www.microsoft.com

Parameter werden unverändert an die Windows-Binärdatei übergeben.Parameters are passed to the Windows binary unmodified. Beispielsweise öffnet der folgende Befehl C:\temp\foo.txt in notepad.exe:As an example, the following command will open C:\temp\foo.txt in notepad.exe:

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

Dies funktioniert auch:This will also work:

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

Freigeben von Umgebungsvariablen zwischen Windows und WSLShare environment variables between Windows and WSL

WSL und Windows verwenden WSLENV, eine spezielle Umgebungsvariable, die entwickelt wurde, um Windows- und Linux-Verteilungen, die unter WSL ausgeführt werden, zu verbinden.WSL and Windows share a special environment variable, WSLENV, created to bridge Windows and Linux distributions running on WSL.

Eigenschaften einer WSLENV-Variablen:Properties of WSLENV variable:

  • Die Variable ist freigegeben, und sie ist sowohl in Windows- als auch in WSL-Umgebungen vorhanden.It is shared; it exists in both Windows and WSL environments.
  • Es handelt sich um eine Liste von Umgebungsvariablen, die von Windows und WSL gemeinsam genutzt werden können.It is a list of environment variables to share between Windows and WSL.
  • Sie kann Umgebungsvariablen so formatieren, dass sie in Windows und WSL gut funktionieren.It can format environment variables to work well in Windows and WSL.
  • Sie kann den Flow zwischen WSL und Win32 unterstützen.It can assist in the flow between WSL and Win32.

Hinweis

Vor 17063 war PATH die einzige Windows-Umgebungsvariable, auf die WSL zugreifen konnte (sodass Sie ausführbare Win32-Dateien unter WSL starten konnten).Prior to 17063, only Windows environment variable that WSL could access was PATH (so you could launch Win32 executables from under WSL). Ab 17063 wird WSLENV unterstützt.Starting in 17063, WSLENV begins being supported. WSLENV unterscheidet zwischen Groß-/Kleinschreibung.WSLENV is case sensitive.

WSLENV-FlagsWSLENV flags

In WSLENV sind vier Flags verfügbar, die beeinflussen, wie die Umgebungsvariable übersetzt wird.There are four flags available in WSLENV to influence how the environment variable is translated.

WSLENV-Flags:WSLENV flags:

  • /p: Übersetzt den Pfad zwischen Pfaden im WSL-/Linux-Stil und Win32-Pfaden./p - translates the path between WSL/Linux style paths and Win32 paths.
  • /l: Gibt an, dass die Umgebungsvariable eine Liste von Pfaden ist./l - indicates the environment variable is a list of paths.
  • /u: Gibt an, dass diese Umgebungsvariable nur beim Ausführen von WSL aus Win32 einbezogen werden soll./u - indicates that this environment variable should only be included when running WSL from Win32.
  • /w: Gibt an, dass diese Umgebungsvariable nur beim Ausführen von Win32 aus WSL einbezogen werden soll./w - indicates that this environment variable should only be included when running Win32 from WSL.

Diese Flags können nach Bedarf kombiniert werden.Flags can be combined as needed.

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.Read more about WSLENV, including FAQs and examples of setting the value of WSLENV to a concatenation of other pre-defined environment vars, each suffixed with a slash followed by flags to specify how the value should be translated and passing variables with a script. 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.This article also includes an example for setting up a dev environment with the Go programming language, configured to share a GOPATH between WSL and Win32.

Deaktivieren der InteroperabilitätDisable interoperability

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:Users may disable the ability to run Windows tools for a single WSL session by running the following command as root:

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:To re-enable Windows binaries, exit all WSL sessions and re-run bash.exe or run the following command as root:

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.Disabling interop will not persist between WSL sessions -- interop will be enabled again when a new session is launched.

Frühere Windows 10-VersionenEarlier versions of Windows 10

Für die Interoperabilitätsbefehle in früheren Windows 10-Versionen bestehen mehrere Unterschiede.There are several differences for the interoperability commands on earlier Windows 10 versions. Wenn Sie ein Creators Update (Okt. 2017, Build 16299) oder ein Anniversary Update (Aug. 2016, Build 14393) von Windows 10 ausführen, empfehlen wir, dass Sie auf die neueste Windows-Version aktualisieren. Wenn dies jedoch nicht möglich ist, werden nachfolgend einige der Unterschiede in der Interoperabilität erläutert.If you're running a Creators Update (Oct 2017, Build 16299), or Anniversary Update (Aug 2016, Build 14393) version of Windows 10, we recommend you update to the latest Windows version, but if that's not possible, we have outlined some of the interop differences below.

Zusammenfassung:Summary:

  • bash.exe wurde durch wsl.exe ersetzt.bash.exe has been replaced with wsl.exe.
  • Die -c-Option zum Ausführen eines einzelnen Befehls ist mit wsl.exe nicht erforderlich.-c option for running a single command isn't needed with wsl.exe.
  • Der Windows-Pfad ist in $PATH von WSL enthalten.Windows path is included in the WSL $PATH.
  • Der Prozess zum Deaktivieren von Interop ist unverändert.The process for disabling interop is unchanged.

Linux-Befehle können an der Windows-Eingabeaufforderung oder in PowerShell ausgeführt werden. Für frühe Windows-Versionen müssen Sie jedoch möglicherweise den Befehl bash verwenden.Linux commands can be run from the Windows Command Prompt or from PowerShell, but for early Windows versions, you man need to use the bash command. Beispiel:For example:

C:\temp> bash -c "ls -la"

Dinge wie Eingabe, Piping und Dateiumleitung funktionieren erwartungsgemäß.Things such as input, piping, and file redirection work as expected.

Die an bash -c übergebenen WSL-Befehle werden ohne Änderung an den WSL-Prozess weitergeleitet.The WSL commands passed into bash -c are forwarded to the WSL process without modification. Dateipfade müssen im WSL-Format angegeben werden, und es muss darauf geachtet werden, dass relevante Zeichen mit Escapezeichen versehen werden.File paths must be specified in the WSL format and care must be taken to escape relevant characters. Beispiel:Example:

C:\temp> bash -c "ls -la /proc/cpuinfo"

Oder:Or...

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

Wenn Sie ein Windows-Tool aus einer WSL-Verteilung in einer früheren Version von Windows 10 aufrufen, müssen Sie den Verzeichnispfad angeben.When calling a Windows tool from a WSL distribution in an earlier version of Windows 10, you will need to specify the directory path. Geben Sie z. B. in der WSL-Befehlszeile Folgendes ein:For example, from your WSL command line, enter:

/mnt/c/Windows/System32/notepad.exe

In WSL werden diese ausführbaren Dateien ähnlich wie native ausführbare Linux-Dateien behandelt.In WSL, these executables are handled similar to native Linux executables. Dies bedeutet, dass das Hinzufügen von Verzeichnissen zum Linux-Pfad und das Piping zwischen Befehlen erwartungsgemäß funktioniert.This means adding directories to the Linux path and piping between commands works as expected. Beispiel:For example:

export PATH=$PATH:/mnt/c/Windows/System32

OderOr

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

Die Windows-Binärdatei muss die Dateierweiterung enthalten, der Groß-/Kleinschreibung der Datei Rechnung tragen und eine ausführbare Dateien sein.The Windows binary must include the file extension, match the file case, and be executable. Nicht ausführbare Dateien einschließlich Batchskripts und Befehle wie dir können mit dem Befehl /mnt/c/Windows/System32/cmd.exe /C ausgeführt werden.Non-executables including batch scripts and command like dir can be run with /mnt/c/Windows/System32/cmd.exe /C command. Beispiel:For example:

/mnt/c/Windows/System32/cmd.exe /C dir

Zusätzliche RessourcenAdditional resources