Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
localhostbidirektional 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:
-
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. -
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.exevorhanden ist. -
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. -
Hardcoding
/mnt/c/— der Montagepunkt kann in/etc/wsl.conf(via[automount] root) konfiguriert werden. Verwenden Siewslpathfür eine zuverlässige Pfadübersetzung. -
Vergessen Sie
.exe, wenn Sie Windows Programme von WSL aufrufen ,notepadfunktionieren nicht; Sie benötigennotepad.exe. Dies ist ein allgemeiner Kopierfehler aus Windows-only-Dokumentation. -
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
.wslconfigEinstellungen möglicherweise fehl. - 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.
Verwandte Inhalte
Windows developer