Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
-
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. -
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. -
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. -
Pevné zakódování
/mnt/c/— přípojný bod je konfigurovatelný v/etc/wsl.conf(prostřednictvím[automount] root). Použijtewslpathpro spolehlivý překlad cest. -
Když při volání programů Windows z WSL zapomenete na
.exe—notepadfungovat nebude; potřebujetenotepad.exe. Toto je běžná chyba způsobená kopírováním a vložením z dokumentace určené pouze pro Windows. -
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
.wslconfignastavení. - 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ší.
Související obsah
Windows developer