Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Subsistema do Windows para Linux (WSL) fornece interoperabilidade bidirecional entre Windows e Linux. Você pode iniciar comandos do Linux a partir de processos do Windows, executar executáveis do Windows de dentro de um shell Linux, compartilhar arquivos entre os dois sistemas de arquivos e redirecionar conexões de rede. Esta página resume os principais padrões de interoperabilidade e suas vantagens e desvantagens.
Importante
A interoperabilidade do WSL requer que o WSL esteja instalado e pelo menos uma distribuição do Linux seja registrada. Não presuma que o WSL esteja disponível — sempre verifique antes de chamar wsl.exe ou acessar caminhos \\wsl$\. Em sistemas em que o WSL não está instalado, wsl.exe retorna um código de saída diferente de zero com uma mensagem de erro e \\wsl$\ os caminhos UNC não são resolvidos.
Interoperabilidade de linha de comando
Executar comandos do Linux de Windows
Use wsl.exe em qualquer shell do Windows (PowerShell, Prompt de Comando ou Terminal do Windows) para executar comandos do Linux:
# 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"
Executar executáveis do Windows no Linux
De dentro de um shell WSL, chame qualquer Windows executável pelo nome completo (incluindo a extensão .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
Executáveis do Windows chamados a partir do WSL usam o PATH do Windows. A .exe extensão é necessária – sem ela, o shell procura um binário do Linux.
Detectar se o WSL está disponível
Antes de depender da interoperabilidade do WSL em seu aplicativo ou script, verifique a disponibilidade:
# 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
}
Interoperabilidade do sistema de arquivos
Acessar arquivos linux de Windows
Use o caminho UNC \\wsl$\ (ou \\wsl.localhost\) para acessar sistemas de arquivos Linux no Windows:
\\wsl$\Ubuntu-22.04\home\username\project
\\wsl.localhost\Ubuntu-22.04\home\username\project
Importante
O \\wsl$\ caminho só estará disponível quando a instância do WSL estiver em execução. Se a distribuição for desativada, o caminho não é resolvido. Inicie a distribuição primeiro com wsl -d <distro-name> ou use wsl.localhost o que pode iniciar automaticamente a distribuição no Windows 11.
Acessar arquivos Windows do Linux
As unidades do Windows são montadas em /mnt/ por padrão:
# Access C: drive
ls /mnt/c/Users/username/Documents
# Access D: drive
ls /mnt/d/projects
Considerações sobre desempenho
| Operation | Performance | Recommendation |
|---|---|---|
Processo do Linux lendo arquivos Linux (/home/...) |
Rápido (ext4 nativo) | Manter arquivos de projeto aqui para ferramentas baseadas em Linux |
Processo do Windows lendo arquivos do Windows (C:\...) |
Rápido (NTFS nativo) | Manter arquivos de projeto aqui para ferramentas baseadas em Windows |
Processo do Linux lendo arquivos do Windows (/mnt/c/...) |
Lento (protocolo 9P entre sistemas de arquivos) | Evite para sistemas de compilação, node_modules, repositórios Git |
Processo do Windows lendo arquivos do Linux (\\wsl$\...) |
Lento (protocolo 9P entre diferentes sistemas de arquivos) | Use para acesso ocasional a arquivos, não para loops intensivos |
Dica
O erro de desempenho mais comum é armazenar arquivos de projeto no sistema de arquivos Windows (/mnt/c/...) ao executar ferramentas de build do Linux (npm, carga, make). Isso causa uma sobrecarga significativa de E/S. Em vez disso, clone repositórios para o sistema de arquivos do Linux (~/projects/) se você usa principalmente ferramentas do Linux.
Conversão de caminhos
Use wslpath no WSL para converter entre caminhos do Windows e do Linux:
# 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
Interoperabilidade de rede
Redirecionamento de localhost
Por padrão, o WSL 2 encaminha portas do ambiente Linux para localhost no Windows. Um servidor em execução na porta 3000 dentro do WSL pode ser acessado no Windows em http://localhost:3000.
Note
O encaminhamento de localhost do Windows para o WSL funciona automaticamente na maioria das versões do Windows. No entanto, conectar-se do WSL a um servidor hospedado no Windows requer o IP do host do Windows (localize-o com cat /etc/resolv.conf | grep nameserver em configurações mais antigas do WSL ou use localhost diretamente se você tiver o espelhamento de rede habilitado).
Modo de rede espelhado (Windows 11)
Windows 11 (versão 22H2 e posteriores) oferece suporte à rede espelhada, em que o WSL compartilha a mesma pilha de rede que o Windows. Habilite-o em .wslconfig:
# %USERPROFILE%\.wslconfig
[wsl2]
networkingMode=mirrored
Com o modo espelhado:
- WSL e Windows compartilham o mesmo endereço IP
- Ambos podem acessar serviços em
localhostbidirecionalmente - As conexões VPN em Windows estão automaticamente disponíveis no WSL
- O IPv6 funciona dentro do WSL
Compartilhamento de variável de ambiente
Passe variáveis de ambiente do Windows para o WSL usando a variável 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
A opção /p converte caminhos do Windows para o formato do Linux. Outros sinalizadores: /l (lista separada por dois pontos), /u (somente WSL→Windows), /w (somente Windows→WSL).
Erros comuns
Dica
Erros frequentemente produzidos por LLMs e geradores de código:
-
Supondo que
\\wsl$\esteja sempre acessível , o caminho só é resolvido enquanto a distribuição WSL de destino está em execução. O código que abre caminhos\\wsl$\sem iniciar primeiro a distribuição falha com erro de caminho de rede. -
Não lidar com WSL não instalado — muitos computadores (especialmente Windows Server ou computadores gerenciados pela empresa) não têm WSL. Sempre verifique a existência de
wsl.exeantes de usar. -
Armazenar arquivos de projeto no sistema de arquivos incorreto – usar
/mnt/c/para projetos do Linux ou\\wsl$\para projetos Windows causa degradação grave do desempenho de E/S devido à tradução do sistema de arquivos 9P. -
Codificação fixa
/mnt/c/— o ponto de montagem é configurável em/etc/wsl.conf(via[automount] root). Usewslpathpara tradução de caminho confiável. -
Esquecer
.exeao chamar programas do Windows a partir do WSL —notepadnão funcionará; você precisa denotepad.exe. Este é um erro comum de copiar e colar na documentação exclusiva para Windows. -
Supondo que a topologia de rede – NAT (padrão do WSL 2) e os modos espelhados tenham comportamentos de rede diferentes. O código que funciona no computador de um desenvolvedor pode falhar em outro, dependendo de suas
.wslconfigconfigurações. - Usando os pressupostos do WSL 1 para o WSL 2 — o WSL 1 compartilhava a pilha de rede do Windows e tinha acesso direto ao sistema de arquivos. O WSL 2 usa uma VM leve com um adaptador de rede virtual e compartilhamento de arquivos 9P. As características de desempenho e a rede são diferentes.
Conteúdo relacionado
Windows developer