Uso di file system Windows e Linux
Quando si lavora tra i file system Windows e Linux, è necessario tenere presenti alcune considerazioni. In questa guida sono stati descritti alcuni esempi di supporto per l'interoperabilità per la combinazione di comandi basati su Windows e Linux.
È consigliabile evitare di usare i propri file con più sistemi operativi, a meno che non lo si faccia per un motivo specifico. Per la massima velocità delle prestazioni, quindi, se usi una riga di comando di Linux (Ubuntu, OpenSUSE e così via) dovresti archiviare i file nel file system di WSL, mentre se usi una riga di comando di Windows (PowerShell, prompt dei comandi), dovresti archiviare i file nel file system di Windows.
Ad esempio, quando archivi i file di progetto WSL:
- Usa la directory radice del file system Linux:
/home/<user name>/Project
- Non la directory radice del file system Windows:
/mnt/c/Users/<user name>/Project$
oC:\Users\<user name>\Project
Quando viene visualizzato /mnt/
nel percorso del file di una riga di comando WSL, significa che si sta lavorando da un'unità montata. L'unità C:/ del file system di Windows (C:\Users\<user name>\Project
) sarà quindi simile alla seguente quando viene montata in una riga di comando WSL: /mnt/c/Users/<user name>/Project$
. È possibile archiviare i file di progetto in un'unità montata, ma la velocità delle prestazioni migliorerà se si archivia direttamente nell'unità drive \\wsl$
.
È possibile visualizzare la directory in cui sono archiviati i file aprendo Esplora file di Windows dalla riga di comando usando:
explorer.exe .
In alternativa, è anche possibile usare il comando: powershell.exe /c start .
Assicurarsi di aggiungere il punto alla fine del comando per aprire la directory corrente.
Per visualizzare tutte le distribuzioni Linux disponibili e i relativi file system radice in Esplora file di Windows, immettere nella barra degli indirizzi: \\wsl$
La distinzione tra lettere maiuscole (FOO.txt) e lettere minuscole (foo.txt) determina se queste vengono gestite come lettere differenti (case-sensitive) o equivalenti (case-insensitive) nel nome di un file o in una directory. I file system Windows e Linux gestiscono la distinzione tra maiuscole e minuscole in modi diversi: Windows non fa distinzione tra maiuscole e minuscole e Linux fa distinzione tra maiuscole e minuscole. Altre informazioni su come regolare la distinzione tra maiuscole e minuscole, in particolare quando si montano i dischi con WSL, sono disponibili nell'articolo Procedura per regolare la distinzione tra maiuscole e minuscole.
Gli strumenti e i comandi di Windows e Linux possono essere usati in modo intercambiabile con WSL.
- Eseguire gli strumenti di Windows, ad esempio notepad.exe, dalla riga di comando di Linux, ad esempio Ubuntu.
- Eseguire gli strumenti di Linux, ad esempio grep, dalla riga di comando di Windows, ad esempio PowerShell.
- Condividere le variabili di ambiente tra Linux e Windows (build 17063 e versioni successive).
Esegui file binari di Linux dal prompt dei comandi di Windows (CMD) o PowerShell usando wsl <command>
(o wsl.exe <command>
).
Ad esempio:
C:\temp> wsl ls -la
<- contents of C:\temp ->
I file binari richiamati in questo modo:
- Usano la stessa directory di lavoro del prompt dei comandi o di PowerShell corrente.
- Vengono eseguiti con il nome utente predefinito di Sottosistema Windows per Linux.
- Dispongono degli stessi diritti amministrativi Windows del processo chiamante e del terminale.
Il comando di Linux che segue wsl
(o wsl.exe
) viene gestito come qualsiasi comando eseguito in WSL. L'invio tramite pipe, il reindirizzamento dei file e sudo funzionano.
Esempio di uso di sudo per aggiornare la distribuzione predefinita di Linux:
C:\temp> wsl sudo apt-get update
Il nome utente predefinito della distribuzione di Linux verrà elencato dopo l'esecuzione di questo comando e verrà richiesta la password. Dopo aver immesso correttamente la password, la distribuzione scaricherà gli aggiornamenti.
Ecco alcuni esempi di combinazioni di comandi di Linux e Windows con PowerShell.
Per usare il comando di Linux ls -la
per elencare i file e il comando di PowerShell findstr
per filtrare i risultati relativi alle parole contenenti "git", combina questi comandi:
wsl ls -la | findstr "git"
Per usare il comando di PowerShell dir
per elencare i file e il comando di Linux grep
per filtrare i risultati relativi alle parole contenenti "git", combina questi comandi:
C:\temp> dir | wsl grep git
Per usare il comando di Linux ls -la
per elencare i file e il comando di PowerShell > out.txt
per stampare i risultati in un file di testo denominato "out.txt", combina questi comandi:
C:\temp> wsl ls -la > out.txt
I comandi passati in wsl.exe
vengono inoltrati al processo di Sottosistema Windows per Linux senza alcuna modifica. I percorsi di file devono essere specificati nel formato di Sottosistema Windows per Linux.
Per usare il comando di Linux ls -la
per elencare i file nel percorso del file system di Linux /proc/cpuinfo
usando PowerShell:
C:\temp> wsl ls -la /proc/cpuinfo
Per usare il comando di Linux ls -la
per elencare i file nel percorso del file system di Windows C:\Program Files
usando PowerShell:
C:\temp> wsl ls -la "/mnt/c/Program Files"
WSL può eseguire gli strumenti di Windows direttamente dalla propria riga di comando usando [tool-name].exe
. Ad esempio, notepad.exe
.
Le applicazioni che vengono eseguite in questo modo hanno le proprietà seguenti:
- Mantengono nella maggior parte dei casi la directory di lavoro come prompt dei comandi di Sottosistema Windows per Linux, tranne alcune eccezioni illustrate più avanti.
- Dispongono degli stessi diritti di autorizzazione del processo di Sottosistema Windows per Linux.
- Vengono eseguite con il nome utente di Windows attivo.
- Vengono visualizzate in Gestione attività di Windows come se fossero eseguite direttamente dal prompt dei comandi.
I file eseguibili di Windows eseguiti in Sottosistema Windows per Linux vengono gestiti in modo analogo ai file eseguibili nativi di Linux, ovvero l'invio tramite pipe, i reindirizzamenti e anche le attività in background funzionano come previsto.
Per eseguire lo strumento di Windows ipconfig.exe
, usare lo strumento di Linux grep
per filtrare i risultati "IPv4" e usare lo strumento di Linux cut
per rimuovere i campi colonna da una distribuzione di Linux (ad esempio, Ubuntu), immetti:
ipconfig.exe | grep IPv4 | cut -d: -f2
Proviamo un esempio che combina i comandi di Windows e Linux. Apri la distribuzione di Linux (ad esempio, Ubuntu) e crea un file di testo: touch foo.txt
. Usa ora il comando di Linux ls -la
per elencare i file diretti e i relativi dettagli di creazione, oltre allo strumento di Windows PowerShell findstr.exe
per filtrare i risultati in modo da visualizzare solo il file foo.txt
nei risultati:
ls -la | findstr.exe foo.txt
Gli strumenti di Windows devono includere l'estensione del file, mantenere la distinzione tra maiuscole e minuscole nel nome del file ed essere eseguibili. I file non eseguibili, inclusi gli script batch e comandi nativi del prompt dei comandi come dir
possono essere eseguiti con il comando cmd.exe /C
.
Elenca, ad esempio, il contenuto della directory C:/ del file system di Windows immettendo:
cmd.exe /C dir
In alternativa, usa il comando ping
per inviare una richiesta echo al sito Web microsoft.com:
ping.exe www.microsoft.com
I parametri vengono passati senza modifiche al file binario di Windows. Il comando seguente, ad esempio, aprirà C:\temp\foo.txt
in notepad.exe
:
notepad.exe "C:\temp\foo.txt"
Puoi usare anche questo comando:
notepad.exe C:\\temp\\foo.txt
WSL e Windows condividono una variabile di ambiente speciale, WSLENV
, creata come raccordo tra le distribuzioni Windows e Linux in esecuzione in WSL.
Proprietà della variabile WSLENV
:
- È condivisa: è presente negli ambienti Windows e Sottosistema Windows per Linux.
- È un elenco di variabili di ambiente da condividere tra Windows e Sottosistema Windows per Linux.
- Può formattare variabili di ambiente in modo che funzionino correttamente tra Windows e Sottosistema Windows per Linux.
- Può supportare durante il flusso tra WSL e Win32.
Nota
Nelle versioni antecedenti a 17063 l'unica variabile di ambiente di Windows a cui Sottosistema Windows per Linux può accedere è PATH
(in modo da poter avviare i file eseguibili Win32 da Sottosistema Windows per Linux). A partire da 17063, la variabile WSLENV
inizia a essere supportata.
In WSLENV viene fatta distinzione tra maiuscole e minuscole.
Per definire la modalità di conversione della variabile di ambiente, sono disponibili quattro flag in WSLENV
.
Flag di WSLENV
:
/p
: converte il percorso tra i percorsi di tipo Sottosistema Windows per Linux/Linux e i percorsi Win32./l
: indica che la variabile di ambiente è un elenco di percorsi./u
: indica che questa variabile di ambiente deve essere inclusa solo quando esegui Sottosistema Windows per Linux da Win32./w
: indica che questa variabile di ambiente deve essere inclusa solo quando esegui Win32 da Sottosistema Windows per Linux.
I flag possono essere combinati in base alle esigenze.
Altre informazioni su WSLENV, incluse domande frequenti ed esempi di impostazione del valore di WSLENV su una concatenazione di altre variabili di ambiente predefinite, ognuna con un suffisso con una barra seguita da flag per specificare la modalità di conversione del valore e il passaggio delle variabili con uno script. Questo articolo include anche un esempio per la configurazione di un ambiente di sviluppo con il linguaggio di programmazione Go, configurato per condividere GOPATH tra WSL e Win32.
Gli utenti possono disabilitare la capacità di eseguire gli strumenti di Windows per una singola sessione di WSL eseguendo questo comando come radice:
echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop
Per riabilitare i file binari di Windows, esci da tutte le sessioni di WSL ed esegui nuovamente bash.exe oppure esegui questo comando come radice:
echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
La disabilitazione dell'interoperabilità non verrà mantenuta tra le sessioni di Sottosistema Windows per Linux. L'interoperabilità verrà nuovamente abilitata all'avvio di una nuova sessione.
Feedback su Windows Subsystem for Linux
Windows Subsystem for Linux è un progetto di open source. Selezionare un collegamento per fornire feedback: