Interoperabilita WSL – integrace Windows a Linuxu

Subsystém Windows pro Linux (WSL) poskytuje obousměrnou interoperabilitu mezi Windows a Linuxem. Příkazy Linuxu můžete spouštět z Windows procesů, spouštět Windows spustitelné soubory z prostředí Linuxu, sdílet soubory v obou systémech souborů a předávat síťová připojení. Tato stránka shrnuje klíčové vzory vzájemné spolupráce a jejich kompromisy.

Important

Interoperabilita WSL vyžaduje, aby byla nainstalovaná služba WSL a zaregistrovala se aspoň jedna distribuce Linuxu. Nepředpokládejte, že je WSL k dispozici — před voláním wsl.exe nebo před přístupem k cestám v \\wsl$\ to vždy ověřte. V systémech, kde není nainstalována služba WSL, wsl.exe vrátí nenulový ukončovací kód s chybovou zprávou a \\wsl$\ cesty UNC se nepodaří vyřešit.

Interoperabilita příkazového řádku

Spouštění linuxových příkazů z Windows

Ke spouštění linuxových příkazů použijte wsl.exe libovolné prostředí Windows (PowerShell, příkazový řádek nebo Terminál Windows):

# 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"

Spouštění spustitelných souborů Windows z Linuxu

Z prostředí shellu WSL volejte libovolný spustitelný soubor systému Windows jeho úplným názvem (včetně přípony .exe):

# 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

Windows spustitelné soubory volané z WSL používají Windows PATH. Rozšíření .exe je povinné – bez něj prostředí hledá binární soubor Linuxu.

Zjištění, jestli je k dispozici WSL

Než se v aplikaci nebo skriptu spoléháte na interoperabilitu WSL, zkontrolujte dostupnost:

# 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
}

Interoperabilita systému souborů

Přístup k souborům Linuxu z Windows

Pro přístup k souborovým systémům Linuxu z Windows použijte cestu UNC \\wsl$\ (nebo \\wsl.localhost\):

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

Important

Cesta \\wsl$\ je k dispozici pouze v případě, že je spuštěna instance WSL. Pokud je distribuce vypnutá, cesta se nepřeloží. Nejprve spusťte distribuci wsl -d <distro-name> nebo použijtewsl.localhost, která může automaticky spustit distribuci na Windows 11.

Přístup k souborům Windows z Linuxu

Jednotky Windows jsou ve výchozím nastavení připojeny pod /mnt/:

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

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

Důležité informace o výkonu

Operation Performance Recommendation
Proces Linuxu čte soubory Linuxu (/home/...) Rychlé (nativní ext4) Soubory projektu najdete tady pro nástroje založené na Linuxu.
Windows proces čtení Windows souborů (C:\...) Rychlý (nativní NTFS) Soubory projektu najdete tady pro nástroje založené na Windows
Proces Linuxu čte Windows soubory (/mnt/c/...) Pomalý (protokol 9P mezi souborovými systémy) Vyhněte se sestavování systémů, node_modulesúložiště Git
Windows proces čtení souborů Linuxu (\\wsl$\...) Pomalý (protokol 9P napříč souborovými systémy) Používejte pro občasný přístup k souborům, ne v těsných smyčkách.

Tip

Nejběžnější chybou při výkonu je ukládání projektových souborů do systému souborů Windows (/mnt/c/...) při spouštění nástrojů pro sestavení Linuxu (npm, cargo, make). To způsobuje významné režijní náklady na vstupně-výstupní operace. Místo toho naklonujte úložiště do systému souborů Linux (~/projects/), pokud primárně používáte linuxové nástroje.

Překlad trasy

Použití wslpath uvnitř WSL k převodu mezi Windows a linuxovými cestami:

# 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

Interoperabilita sítí

Přesměrování localhostu

WsL 2 ve výchozím nastavení přesměruje porty z hosta Linuxu na localhost Windows. Server spuštěný na portu 3000 uvnitř WSL je přístupný z Windows na adrese http://localhost:3000.

Note

Přesměrování místního hostitele funguje z Windows do WSL automaticky ve většině verzí Windows. Připojení z WSL k serveru hostované Windows ale vyžaduje IP adresu hostitele Windows (najdete ji cat /etc/resolv.conf | grep nameserver ve starších konfiguracích WSL nebo ji použijte localhost přímo, pokud máte povolené zrcadlené sítě).

Zrcadlený síťový režim (Windows 11)

Windows 11 (verze 22H2 a novější) podporuje zrcadlené sítě, kde WSL sdílí stejný síťový zásobník jako Windows. Povolte ho v .wslconfig:

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

Se zrcadleným režimem:

  • WSL a Windows sdílejí stejnou IP adresu
  • Obě mohou obousměrně přistupovat ke službám na localhost
  • Připojení VPN na Windows jsou ve WSL automaticky dostupná
  • Protokol IPv6 funguje uvnitř WSL.

Sdílení proměnných prostředí

Předat proměnné prostředí systému Windows do WSL pomocí proměnné WSLENV:

# 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

Příznak /p překládá Windows cesty do formátu Linuxu. Jiné příznaky: /l (seznam oddělený dvojtečkami), /u (pouze WSL→Windows), /w (pouze Windows→WSL).

Běžné chyby

Tip

Chyby, které často vytvářejí LLM a generátory kódu:

  1. Předpoklad, že \\wsl$\ je vždy přístupná – cesta se vyhodnotí pouze tehdy, když je spuštěná cílová distribuce WSL. Kód, který přistupuje k cestám \\wsl$\, aniž by nejprve spustil distribuci, selže s chybou síťové cesty.
  2. Neřeší situaci, kdy není nainstalované WSL — mnoho počítačů (zejména se systémem Windows Server nebo podnikově spravovaných PC) WSL nemá. Před použitím vždy zkontrolujte existenci wsl.exe.
  3. Ukládání souborů projektu do nesprávného systému souborů – použití /mnt/c/ pro linuxové projekty nebo \\wsl$\ pro Windows projekty způsobuje závažné snížení výkonu vstupně-výstupních operací kvůli překladu systému souborů 9P.
  4. Pevné zakódování /mnt/c/ — přípojný bod je konfigurovatelný v /etc/wsl.conf (prostřednictvím [automount] root). Použijte wslpath pro spolehlivý překlad cest.
  5. Když při volání programů Windows z WSL zapomenete na .exenotepad fungovat nebude; potřebujete notepad.exe. Toto je běžná chyba způsobená kopírováním a vložením z dokumentace určené pouze pro Windows.
  6. S ohledem na síťovou topologii — výchozí režim WSL 2 (NAT) a zrcadlený režim mají odlišné síťové chování. Kód, který funguje na počítači jednoho vývojáře, může selhat na jiném v závislosti na jejich .wslconfig nastavení.
  7. Použití předpokladů WSL 1 pro WSL 2 – WSL 1 sdílelo zásobník sítě Windows a měl přímý přístup k systému souborů. WSL 2 používá jednoduchý virtuální počítač s virtuálním síťovým adaptérem a sdílením souborů 9P. Charakteristiky výkonu a sítě se liší.