WSL-Interoperabilität – Windows- und Linux-Integration

Windows-Subsystem für Linux (WSL) bietet bidirektionale Interoperabilität zwischen Windows und Linux. Sie können Linux-Befehle aus Windows Prozessen starten, Windows ausführbare Dateien innerhalb einer Linux-Shell ausführen, Dateien für beide Dateisysteme freigeben und Netzwerkverbindungen weiterleiten. Diese Seite fasst die wichtigsten Interoperabilitätsmuster und die damit verbundenen Abwägungen zusammen.

Important

WSL-Interoperabilität erfordert, dass WSL installiert ist und mindestens eine Linux-Verteilung registriert ist. Gehen Sie nicht davon aus, dass WSL verfügbar ist – prüfen Sie immer zuerst, bevor Sie wsl.exe aufrufen oder auf \\wsl$\-Pfade zugreifen. Auf Systemen, auf denen WSL nicht installiert ist, gibt wsl.exe einen Exitcode ungleich null mit einer Fehlermeldung zurück, und \\wsl$\ UNC-Pfade lassen sich nicht auflösen.

Befehlszeilen-Interoperabilität

Ausführen von Linux-Befehlen aus Windows

Verwenden Sie wsl.exe aus einer beliebigen Windows Shell (PowerShell, Eingabeaufforderung oder Windows-Terminal), um Linux-Befehle auszuführen:

# Run a single command in the default distribution
wsl ls -la /home

# Run a command in a specific distribution
wsl -d Ubuntu-22.04 -- cat /etc/os-release

# Pipe Windows output into a Linux command
ipconfig | wsl grep "IPv4"

Windows-Programme unter Linux ausführen

Rufen Sie innerhalb einer WSL-Shell jede ausführbare Windows-Datei mit ihrem vollständigen Namen auf (einschließlich der .exe-Erweiterung):

# Open File Explorer in the current Linux directory
explorer.exe .

# Run a PowerShell command from Linux
powershell.exe -Command "Get-Date"

# Pipe Linux output into a Windows command
cat /etc/hosts | clip.exe

Note

Von WSL aufgerufene Windows-Programme verwenden den Windows-PATH. Die .exe Erweiterung ist erforderlich – ohne sie sucht die Shell nach einer Linux-Binärdatei.

Ermitteln, ob WSL verfügbar ist

Bevor Sie sich auf die WSL-Interoperabilität in Ihrer App oder Ihrem Skript verlassen, überprüfen Sie die Verfügbarkeit:

# PowerShell: Check if wsl.exe exists and WSL is functional
try {
    $wslStatus = wsl --status 2>&1
    if ($LASTEXITCODE -eq 0) {
        Write-Host "WSL is available"
    } else {
        Write-Host "WSL is installed but not functional"
    }
} catch {
    Write-Host "WSL is not installed"
}
// C#: Check WSL availability before use
var wslPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.System), "wsl.exe");

if (!File.Exists(wslPath))
{
    // WSL is not installed — handle gracefully
    return;
}

var process = Process.Start(new ProcessStartInfo
{
    FileName = wslPath,
    Arguments = "--status",
    RedirectStandardOutput = true,
    UseShellExecute = false,
    CreateNoWindow = true
}) ?? throw new InvalidOperationException("Failed to start wsl.exe process.");

process.WaitForExit();
if (process.ExitCode != 0)
{
    // WSL is installed but no distribution is registered
}

Dateisysteminteroperabilität

Zugreifen auf Linux-Dateien von Windows

Verwenden Sie den \\wsl$\-UNC-Pfad (oder \\wsl.localhost\), um von Windows aus auf Linux-Dateisysteme zuzugreifen:

\\wsl$\Ubuntu-22.04\home\username\project
\\wsl.localhost\Ubuntu-22.04\home\username\project

Important

Der \\wsl$\ Pfad ist nur verfügbar, wenn die WSL-Instanz ausgeführt wird. Wenn die Verteilung heruntergefahren wird, wird der Pfad nicht aufgelöst. Starten Sie die Verteilung zuerst mit wsl -d <distro-name>, oder verwenden Sie wsl.localhost, wodurch die Verteilung unter Windows 11 automatisch gestartet wird.

Zugreifen auf Windows Dateien von Linux

Windows-Laufwerke sind standardmäßig unter /mnt/ eingehängt:

# Access C: drive
ls /mnt/c/Users/username/Documents

# Access D: drive
ls /mnt/d/projects

Leistungsüberlegungen

Operation Performance Recommendation
Linux-Prozess liest Linux-Dateien (/home/...) Schnell (systemeigene Ext4) Projektdateien hier für Linux-basierte Tools beibehalten
Windows-Prozess liest Windows-Dateien (C:\...) Schnell (systemeigenes NTFS) Projektdateien hier für Windows-basierte Tools beibehalten
Linux-Prozess liest Windows Dateien (/mnt/c/...) Langsam (dateisystemübergreifendes 9P-Protokoll) Vermeiden von Buildsystemen, node_modulesGit-Repositorys
Windows-Prozess zum Lesen von Linux-Dateien (\\wsl$\...) Langsam (dateisystemübergreifendes 9P-Protokoll) Verwendung für gelegentlichen Dateizugriff, keine engen Schleifen

Tip

Der häufigste Leistungsfehler ist das Speichern von Projektdateien im Windows Dateisystem (/mnt/c/...) beim Ausführen von Linux-Buildtools (npm, Cargo, Make). Dies führt zu einem erheblichen E/A-Aufwand. Klonen Sie stattdessen Repositorys in das Linux-Dateisystem (~/projects/), wenn Sie hauptsächlich Linux-Tools verwenden.

Pfadübersetzung

Verwenden Sie wslpath in WSL, um zwischen Windows- und Linux-Pfaden zu konvertieren:

# Windows path → Linux path
wslpath "C:\Users\username\file.txt"
# Output: /mnt/c/Users/username/file.txt

# Linux path → Windows path
wslpath -w /home/username/file.txt
# Output: \\wsl.localhost\Ubuntu-22.04\home\username\file.txt

# Linux path → Windows path (with drive letter format)
wslpath -m /mnt/c/Users/username/file.txt
# Output: C:/Users/username/file.txt

Netzwerk-Interoperabilität

Localhost-Weiterleitung

Standardmäßig leitet WSL 2 Ports vom Linux-Gast an localhost unter Windows weiter. Ein Server, der in WSL auf Port 3000 läuft, ist von Windows aus unter http://localhost:3000 erreichbar.

Note

Die Localhost-Weiterleitung funktioniert von Windows zu WSL automatisch in den meisten Windows Versionen. Für die Verbindung von WSL mit einem unter Windows gehosteten Server ist jedoch die Windows-Host-IP erforderlich (in älteren WSL-Konfigurationen finden Sie sie mit cat /etc/resolv.conf | grep nameserver, oder verwenden Sie localhost direkt, wenn Sie die gespiegelte Vernetzung aktiviert haben).

Gespiegelter Netzwerkmodus (Windows 11)

Windows 11 (Version 22H2 und höher) unterstützt gespiegelte Netzwerke, wobei WSL denselben Netzwerkstapel wie Windows gemeinsam verwendet. Aktivieren sie in .wslconfig:

# %USERPROFILE%\.wslconfig
[wsl2]
networkingMode=mirrored

Im Spiegelmodus:

  • WSL und Windows dieselbe IP-Adresse gemeinsam nutzen
  • Beide können Dienste über localhost bidirektional erreichen
  • VPN-Verbindungen auf Windows sind automatisch in WSL verfügbar
  • IPv6 funktioniert in WSL

Gemeinsame Nutzung von Umgebungsvariablen

Übergeben Sie Windows Umgebungsvariablen mithilfe der WSLENV Variablen an WSL:

# Windows: Share GOPATH with WSL (translate the path)
$env:WSLENV = "GOPATH/p"
$env:GOPATH = "C:\Users\username\go"
wsl echo $GOPATH
# Output: /mnt/c/Users/username/go

Das /p Flag übersetzt Windows Pfade in das Linux-Format. Andere Flags: /l (durch Doppelpunkte getrennte Liste), /u (nur WSL→Windows), /w (nur Windows→WSL).

Häufige Fehler

Tip

Fehler, die häufig von LLMs und Codegeneratoren erstellt werden:

  1. Angenommen, \\wsl$\ ist immer zugänglich – der Pfad wird nur aufgelöst, während die WSL-Zieldistribution ausgeführt wird. Code, der \\wsl$\-Pfade öffnet, ohne die Distribution zuerst zu starten, schlägt mit einem Netzwerkpfadfehler fehl.
  2. Der Fall, dass WSL nicht installiert ist, wird nicht behandelt – viele Computer (insbesondere Windows Server oder vom Unternehmen verwaltete PCs) verfügen nicht über WSL. Überprüfen Sie vor der Verwendung immer, ob wsl.exe vorhanden ist.
  3. Das Speichern von Projektdateien auf dem falschen Dateisystem – die Verwendung /mnt/c/ für Linux-Projekte oder \\wsl$\ für Windows Projekte verursacht eine starke Beeinträchtigung der E/A-Leistung aufgrund der 9P-Dateisystemübersetzung.
  4. Hardcoding /mnt/c/ — der Montagepunkt kann in /etc/wsl.conf (via [automount] root) konfiguriert werden. Verwenden Sie wslpath für eine zuverlässige Pfadübersetzung.
  5. Vergessen Sie.exe, wenn Sie Windows Programme von WSL aufrufen , notepad funktionieren nicht; Sie benötigen notepad.exe. Dies ist ein allgemeiner Kopierfehler aus Windows-only-Dokumentation.
  6. Unter Annahme der Netzwerktopologie — der WSL 2-Standardmodus (NAT) und der gespiegelte Modus haben ein unterschiedliches Netzwerkverhalten. Code, der auf dem Computer eines Entwicklers funktioniert, schlägt je nach ihren .wslconfig Einstellungen möglicherweise fehl.
  7. Annahmen aus WSL 1 auf WSL 2 anwenden — WSL 1 nutzte den Windows-Netzwerkstack gemeinsam und hatte direkten Zugriff auf das Dateisystem. WSL 2 verwendet eine leichtgewichtige virtuelle Maschine mit einem virtuellen Netzwerkadapter und einer 9P-Dateifreigabe. Leistungsmerkmale und Netzwerke unterscheiden sich.