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.

Archiviazione e prestazioni dei file nei file system

È 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: \\wsl$\Ubuntu\home\<user name>\Project
  • Non la directory radice del file system Windows: /mnt/c/Users/<user name>/Project$ o C:\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$.

Visualizzare la directory corrente in Esplora file di Windows

È 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$

View project files in Windows File Explorer

Distinzione tra nomi file e maiuscole/minuscole della directory

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.

Interoperabilità tra i comandi Windows e Linux

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).

Eseguire strumenti Linux dalla riga di comando di Windows

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.

Combinazione di comandi di Linux e Windows

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"

Eseguire strumenti di Windows da Linux

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

Condividere le variabili di ambiente tra Windows e Sottosistema Windows per Linux con WSLENV

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.

Flag WSLENV

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.

Disabilitare l'interoperabilità

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.