Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
sottosistema Windows per Linux (WSL) fornisce interoperabilità bidirezionale tra Windows e Linux. È possibile avviare comandi Linux da processi Windows, eseguire Windows eseguibili da una shell Linux, condividere file in entrambi i file system e inoltrare le connessioni di rete. Questa pagina riepiloga i modelli di interoperabilità chiave e i relativi compromessi.
Important
L'interoperabilità WSL richiede l'installazione di WSL e la registrazione di almeno una distribuzione Linux. Non dare per scontato che WSL sia presente — verifica sempre prima di invocare wsl.exe o accedere ai percorsi \\wsl$\. Nei sistemi in cui WSL non è installato, wsl.exe restituisce un codice di uscita diverso da zero con un messaggio di errore e \\wsl$\ i percorsi UNC non vengono risolti.
Interoperabilità della riga di comando
Eseguire comandi Linux da Windows
Usa wsl.exe da qualsiasi shell di Windows (PowerShell, Prompt dei comandi o Terminale Windows) per eseguire comandi 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"
Eseguire gli eseguibili di Windows da Linux
All'interno di una shell WSL, richiama qualsiasi eseguibile Windows usando il nome completo (compresa l'estensione .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
Annotazioni
Gli eseguibili di Windows richiamati da WSL usano il PATH di Windows. L'estensione .exe è obbligatoria, senza di essa, la shell cerca un file binario Linux.
Rilevare se WSL è disponibile
Prima di basarsi sull'interoperabilità WSL nell'app o nello script, verificare la disponibilità:
# 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
}
Interoperabilità del file system
Accedere ai file Linux da Windows
Usare il \\wsl$\ percorso UNC (o \\wsl.localhost\) per accedere ai file system Linux da Windows:
\\wsl$\Ubuntu-22.04\home\username\project
\\wsl.localhost\Ubuntu-22.04\home\username\project
Important
Il \\wsl$\ percorso è disponibile solo quando l'istanza WSL è in esecuzione. Se la distribuzione viene arrestata, il percorso non viene risolto. Avviare prima la distribuzione con wsl -d <distro-name> o usare wsl.localhost che può avviare automaticamente la distribuzione in Windows 11.
Accedere ai file di Windows da Linux
Le unità di Windows vengono montate in /mnt/ per impostazione predefinita:
# Access C: drive
ls /mnt/c/Users/username/Documents
# Access D: drive
ls /mnt/d/projects
Considerazioni sulle prestazioni
| Operation | Performance | Raccomandazione |
|---|---|---|
Processo Linux che legge i file Linux (/home/...) |
Veloce (ext4 nativo) | Mantenere i file di progetto qui per gli strumenti basati su Linux |
Processo Windows che legge file di Windows (C:\...) |
Veloce (NTFS nativo) | Mantenere i file di progetto qui per gli strumenti basati su Windows |
Processo Linux che legge file di Windows (/mnt/c/...) |
Lento (protocollo 9P tra filesystem) | Evitare per i sistemi di compilazione, node_modules, repository Git |
Processo Windows che legge file Linux (\\wsl$\...) |
Lento (protocollo 9P tra filesystem) | Da usare per l'accesso occasionale ai file, non per cicli molto frequenti |
Suggerimento
L'errore di prestazioni più comune consiste nell'archiviare i file di progetto nel file system Windows (/mnt/c/...) durante l'esecuzione di strumenti di compilazione Linux (npm, cargo, make). Ciò causa un sovraccarico di I/O significativo. Clonare invece i repository nel file system Linux (~/projects/) quando si usano principalmente strumenti Linux.
Traduzione del percorso
Usare wslpath in WSL per eseguire la conversione tra percorsi Windows e 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
Interoperabilità di rete
Inoltro di localhost
Per impostazione predefinita, WSL 2 inoltra le porte dal guest Linux a localhost in Windows. Un server in esecuzione sulla porta 3000 all'interno di WSL è accessibile da Windows all'indirizzo http://localhost:3000.
Annotazioni
L'inoltro localhost funziona da Windows a WSL automaticamente nella maggior parte delle versioni Windows. Tuttavia, la connessione da WSL a un server ospitato Windows richiede l'ip host Windows (trovarlo con cat /etc/resolv.conf | grep nameserver nelle configurazioni WSL precedenti o usare localhost direttamente se è abilitata la rete con mirroring).
Modalità di rete rispecchiata (Windows 11)
Windows 11 (versione 22H2 e successive) supporta la rete con mirroring, in cui WSL condivide lo stesso stack di rete di Windows. Abilitalo in .wslconfig:
# %USERPROFILE%\.wslconfig
[wsl2]
networkingMode=mirrored
Con la modalità speculare:
- WSL e Windows condividono lo stesso indirizzo IP
- Entrambi possono raggiungere i servizi su
localhostin entrambe le direzioni - Le connessioni VPN in Windows sono automaticamente disponibili in WSL
- IPv6 funziona all'interno di WSL
Condivisione di variabili di ambiente
Passare le variabili di ambiente di Windows a WSL usando la variabile 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
L'opzione /p traduce i percorsi di Windows nel formato Linux. Altri flag: /l (elenco delimitato da due punti), /u (solo WSL→Windows), /w (solo Windows→WSL).
Errori comuni
Suggerimento
Errori generati frequentemente da LLMs e generatori di codice:
-
Supponendo
\\wsl$\che sia sempre accessibile , il percorso viene risolto solo quando la distribuzione WSL di destinazione è in esecuzione. Il codice che apre\\wsl$\i percorsi senza avviare prima la distribuzione ha esito negativo e viene visualizzato un errore di percorso di rete. -
Mancata gestione di WSL-not-installed — molte macchine (in particolare Windows Server o PC gestiti a livello aziendale) non dispongono di WSL. Verificare sempre l'esistenza di
wsl.exeprima di utilizzarlo. -
L'archiviazione dei file di progetto nel file system errato: l'uso
/mnt/c/di per i progetti Linux o\\wsl$\per i progetti Windows causa una grave riduzione delle prestazioni di I/O a causa della conversione del file system 9P. -
Hardcoding
/mnt/c/— il punto di montaggio è configurabile in/etc/wsl.conf(tramite[automount] root). Usawslpathper una traduzione affidabile del percorso. -
Se si dimentica
.exequando si chiamano programmi Windows da WSL —notepadnon funziona; servenotepad.exe. Si tratta di un comune errore di copia-incolla nella documentazione solo per Windows. -
Topologia di rete presunta — la modalità predefinita (NAT) e la modalità con mirroring di WSL 2 hanno comportamenti di rete diversi. Il codice che funziona in un computer dello sviluppatore potrebbe non riuscire in un altro a seconda delle impostazioni
.wslconfig. - L'uso di presupposti WSL 1 per WSL 2 — WSL 1 ha condiviso lo stack di rete Windows e ha avuto accesso diretto al file system. WSL 2 usa una macchina virtuale leggera con una scheda di rete virtuale e una condivisione file 9P. Le caratteristiche delle prestazioni e la rete sono diverse.