Funzionalità di base
Per verificare che WSL 2 sia attivo e vedere la versione del kernel:
wsl --status
wsl --version
Per vedere le distribuzioni installate
wsl --list --verbose
Il comando di seguito abilita i componenti necessari, installa il kernel Linux aggiornato e scarica Ubuntu come distribuzione predefinita. Riavvia il PC quando richiesto.
wsl --install
Per vedere le distribuzioni disponibili online
wsl --list --online
A questo punto per installare una distribuzione specifica
wsl --install -d Debian
wsl --install -d kali-linux
wsl --install -d openSUSE-Tumbleweed
wsl --install -d AlmaLinux-9
Per avviare una distro
# avvia distro di default
wsl
# avvia una distro specifica
wsl -d Debian
wsl -d kali-linux
Cambiare la distribuzione predefinita associata al comando wsl
wsl --set-default [nomedistro]
Per rimuovere una distribuzione
wsl --unregister [nomedistro]
Di seguito alcuni comandi di gestione generale
# Fermare tutte le distro e il processo WSL
wsl --shutdown
# Terminare una singola distro
wsl --terminate [nomedistro]
# Aggiornare il kernel WSL
wsl --update
# Eseguire come utente specifico
wsl -d [nomedistro] -u root
# Spostare una distro su un altro disco
wsl --export [nomedistro] D:\backup.tar
wsl --unregister [nomedistro]
wsl --import [nomedistro] D:\WSL\Ubuntu D:\backup.tar
Configurazione di WSL
Esistono due file di configurazione con scopi diversi.
/etc/wsl.conf— configurazione per singola distro%USERPROFILE%\.wslconfig— configurazione globale
Crea o modifica /etc/wsl.conf dentro la distro Linux:
sudo nano /etc/wsl.conf
[boot]
systemd=true # abilita systemd (raccomandato)
[user]
default=mioutente # utente predefinito al login
[network]
hostname=mylinux # hostname della macchina virtuale
generateResolvConf=true
[interop]
enabled=true # permette di lanciare .exe da Linux
appendWindowsPath=true # aggiunge il PATH di Windows a Linux
Dopo la modifica, riavvia la distro:
wsl --shutdown
wsl -d [nomedistro]
Crea questo file in C:\Users\[utente]\.wslconfig (da PowerShell):
notepad $env:USERPROFILE\.wslconfig
[wsl2]
memory=8GB # RAM massima assegnata
processors=4 # numero di CPU virtuali
swap=2GB # spazio di swap
diskSize=60GB # dimensione massima del disco virtuale
[experimental]
sparseVhd=true # disco virtuale a espansione automatica (risparmia spazio)
autoMemoryReclaim=gradual # rilascia RAM inutilizzata a Windows
Applica modifiche riavviando machina linux
wsl --shutdown
Interazione tra S.O.
Interazione Windows → Linux
Eseguire comandi Linux direttamente da PowerShell/CMD
# Eseguire un comando e tornare a Windows
wsl ls -la /home
# Usare una distro specifica
wsl -d Debian -- apt list --installed
# Pipe tra comandi Windows e Linux
Get-Content C:\log.txt | wsl grep "ERROR"
# Usare tool Linux su file Windows
wsl sort -u <<< "$(Get-Content C:\dati.txt)"
Il filesystem di ogni distro è accessibile tramite il percorso UNC:
\\wsl$\Ubuntu-24.04\home\utente\
\\wsl$\Debian\etc\
Oppure direttamente da Esplora File digitando \\wsl$ nella barra degli indirizzi.
Da PowerShell puoi copiare file:
Copy-Item "C:\Documenti\file.txt" "\\wsl$\Ubuntu-24.04\home\utente\"
I dischi Windows vengono montati automaticamente in /mnt/:
ls /mnt/c/Users/ # Disco C:
ls /mnt/d/ # Disco D: (se esiste)
Per montare manualmente un disco o una partizione:
# Da PowerShell (Admin) — monta un disco fisico
wsl --mount \\.\PHYSICALDRIVE1 --partition 1
Interazione Linux → Windows
Eseguire eseguibili Windows da Linux. Grazie all'interoperabilità, puoi lanciare qualsiasi .exe da dentro WSL:
# Aprire Esplora File nella directory corrente
explorer.exe .
# Aprire un file con il programma predefinito di Windows
cmd.exe /c start documento.pdf
# Usare notepad
notepad.exe /mnt/c/Users/utente/file.txt
# Usare winget per installare software Windows
winget.exe install Git.Git
Accedere al filesystem Windows da Linux
cd /mnt/c/Users/tuoutente/Desktop
ls /mnt/c/Program\ Files/
Copiare file da Linux a Windows
cp miofile.txt /mnt/c/Users/utente/Desktop/
Usare variabili d'ambiente di Windows
# Leggere variabili d'ambiente Windows
echo $WSLENV
cmd.exe /c echo %APPDATA%
Per condividere variabili tra i due ambienti, imposta WSLENV in Windows:
# Aggiunge MYVAR al bridge WSL (valore condiviso)
[Environment]::SetEnvironmentVariable("WSLENV", "MYVAR/u", "User")
Rete e Accesso ai Servizi
IP e hostname
# IP della macchina WSL (varia a ogni riavvio)
ip addr show eth0 | grep "inet "
# IP della macchina Windows (gateway da Linux)
ip route | grep default
cat /etc/resolv.conf | grep nameserver
Accedere a un server avviato in Linux da Windows. Se avvii un server in WSL (es. python3 -m http.server 8080), puoi accedervi dal browser Windows su:
http://localhost:8080
WSL 2 in Windows 11 gestisce automaticamente il port forwarding per localhost.
Accedere a un server Windows da Linux
# Usa l'IP del gateway (la macchina Windows)
curl http://$(ip route | grep default | awk '{print $3}'):3000
Modalità Mirrored Networking (Windows 11 22H2+). Questa modalità avanzata fa sì che Linux e Windows condividano lo stesso stack di rete:
# In .wslconfig
[wsl2]
networkingMode=mirrored
Con questa opzione localhost funziona in entrambe le direzioni senza configurazioni aggiuntive.
Eseguire Applicazioni GUI (WSLg)
WSL 2 su Windows 11 include WSLg, che permette di eseguire applicazioni grafiche Linux nativamente senza configurazione aggiuntiva.
# Installa e avvia Firefox
sudo apt install firefox -y
firefox &
# Editor grafico
sudo apt install gedit -y
gedit &
# Applicazioni GTK/Qt funzionano out-of-the-box
sudo apt install gimp -y
gimp &
Le finestre appaiono direttamente sul desktop Windows come normali applicazioni.
Systemd e Servizi
Con systemd=true in wsl.conf puoi gestire i servizi come su un normale Linux:
# Avviare e abilitare SSH
sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh
# Avviare Docker (senza Docker Desktop)
sudo systemctl start docker
sudo systemctl enable docker
# Controllare tutti i servizi
systemctl list-units --type=service --state=running
Importare ed Esportare Distribuzioni
Esportare una distro (backup)
wsl --export [nomedistro] C:\Backup\ubuntu-backup.tar
Importare una distro (ripristino o clonazione)
wsl --import MioUbuntu C:\WSL\MioUbuntu C:\Backup\ubuntu-backup.tar --version 2
Importare una distro personalizzata (es. Arch Linux/Rocky Linux)
# Scarica il rootfs di Arch
# Da https://gitlab.archlinux.org/archlinux/archlinux-docker/-/releases
# Poi importa:
wsl --import Arch C:\WSL\Arch C:\Downloads\archlinux-rootfs.tar.zst --version 2
wsl -d Arch
# esempio rockylinux
wsl --import RockyLinux10 V:\WSL\RockyLinux10 "Z:\WSL\wsl_distro\Rocky-10-WSL-Base.latest.x86_64.wsl"
# per eseguire la macchina appena importata
wsl -d RockyLinux10
Per rockylinux10 abbiamo che:
RockyLinux10→ il nome che vuoi dare alla distro in WSLV:\WSL\RockyLinux10→ la cartella dove WSL salverà il disco virtuale (.vhdx). Verrà creata automaticamente"Z:\WSL\..."→ il percorso del file sorgente
Ottimizzazioni e prestazioni
Col tempo il file .vhdx cresce. Per compattarlo:
# Prima, libera spazio dentro Linux
wsl -d Ubuntu-24.04 -- bash -c "sudo fstrim -av"
# Poi compatta da PowerShell (Admin)
wsl --shutdown
Optimize-VHD -Path "$env:LOCALAPPDATA\Packages\CanonicalGroupLimited.Ubuntu24.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" -Mode Full