Trabalhando entre sistemas Windows e Linux
Há várias considerações a fazer ao trabalhar entre sistemas de arquivos Windows e Linux. Descrevemos alguns deles para você neste guia, incluindo alguns exemplos de suporte de interoperabilidade para a combinação de comandos baseados em Windows e Linux.
Armazenamento de arquivos e desempenho entre sistemas de arquivos
Não recomendamos trabalhar em sistemas operacionais com os seus arquivos, a menos que você tenha um motivo específico para fazer isso. Para a velocidade de desempenho mais rápida, armazene os seus arquivos no sistema de arquivos WSL se você estiver trabalhando em uma linha de comando do Linux (Ubuntu, OpenSUSE etc.). Se estiver trabalhando em uma linha de comando do Windows (PowerShell, Prompt de Comando), armazene os arquivos no sistema de arquivos do Windows.
Por exemplo, ao armazenar seus arquivos de projeto do WSL:
- Use o diretório raiz do sistema de arquivos do Linux:
/home/<user name>/Project
- Não o diretório raiz do sistema de arquivos do Windows:
/mnt/c/Users/<user name>/Project$
ouC:\Users\<user name>\Project
Quando você vê /mnt/
no caminho de arquivo de uma linha de comando do WSL, isso significa que você está trabalhando em uma unidade montada. Portanto, a unidade C:/ (C:\Users\<user name>\Project
) do sistema de arquivos do Windows terá esta aparência quando montada em uma linha de comando do WSL: /mnt/c/Users/<user name>/Project$
. É possível armazenar seus arquivos de projeto em uma unidade montada, mas a velocidade do desempenho melhorará se você os armazenar diretamente na unidade \\wsl$
.
Ver o diretório atual no Explorador de Arquivos do Windows
Você pode ver o diretório em que os arquivos estão armazenados abrindo o Explorador de Arquivos Windows através da linha de comando, usando:
explorer.exe .
Como alternativa, você também pode usar o comando: powershell.exe /c start .
. Não se esqueça de adicionar o ponto no final do comando para abrir o diretório atual.
Para ver todas as distribuições do Linux disponíveis e seus sistemas de arquivos raiz no Explorador de Arquivos do Windows, insira \\wsl$
na barra de endereços
Diferenciação de maiúsculas e minúsculas em nome de arquivo e diretório
A diferenciação de maiúsculas e minúsculas determina se letras maiúsculas (FOO.txt) e minúsculas (foo.txt) serão tratadas como distintas (diferenciação de maiúsculas e minúsculas) ou equivalentes (sem diferenciação de maiúsculas e minúsculas) em um nome de arquivo ou diretório. Os sistemas de arquivos do Windows e do Linux lidam com a diferenciação de maiúsculas e minúsculas de maneiras diferentes: o Windows não diferencia maiúsculas de minúsculas e o Linux sim. Saiba mais sobre como ajustar a diferenciação de maiúsculas e minúsculas, especialmente ao montar discos com o WSL, no artigo de instruções Ajustar a diferenciação de maiúsculas e minúsculas.
Interoperabilidade entre comandos do Windows e do Linux
Comandos e ferramentas do Windows e do Linux podem ser usados de maneira intercambiável com o WSL.
- Executar as ferramentas do Windows (por exemplo, notepad.exe) de uma linha de comando do Linux (por exemplo, Ubuntu).
- Executar ferramentas do Linux (por exemplo, grep) de uma linha de comando do Windows (por exemplo, PowerShell).
- Compartilhar variáveis de ambiente entre o Linux e o Windows. (Build 17063e posteriores)
Execute ferramentas do Linux usando uma linha de comando do Windows
Execute binários do Linux no prompt de comando do Windows (CMD) ou PowerShell usando o wsl <command>
(ou wsl.exe <command>
).
Por exemplo:
C:\temp> wsl ls -la
<- contents of C:\temp ->
Binários invocados desta maneira:
- Use o mesmo diretório de trabalho que o prompt do CMD ou do PowerShell atual.
- Execute como usuário padrão do WSL.
- Tenha os mesmos direitos administrativos do Windows que o processo de chamada e o terminal.
O comando do Linux após wsl
(ou wsl.exe
) é tratado como qualquer comando executado no WSL. Coisas como sudo, piping e redirecionamento de arquivo funcionam.
Exemplo usando o sudo para atualizar sua distribuição padrão do Linux:
C:\temp> wsl sudo apt-get update
Seu nome de usuário de distribuição do Linux padrão será listado após a execução desse comando e você será solicitado a fornecer sua senha. Depois de inserir sua senha corretamente, sua distribuição baixará as atualizações.
Como mesclar comandos do Windows e do Linux
Aqui estão alguns exemplos de como mesclar comandos do Linux e do Windows usando o PowerShell.
Para usar o comando ls -la
do Linux para listar arquivos e o comando findstr
do PowerShell para filtrar os resultados de palavras que contenham "git", combine os comandos:
wsl ls -la | findstr "git"
Para usar o comando dir
do PowerShell para listar arquivos e o comando grep
do Linux para filtrar os resultados de palavras que contenham "git", combine os comandos:
C:\temp> dir | wsl grep git
Para usar o comando ls -la
do Linux para listar arquivos e o comando > out.txt
do PowerShell para imprimir a lista em um arquivo de texto chamado "out.txt", combine os comandos:
C:\temp> wsl ls -la > out.txt
Os comandos passados para wsl.exe
são encaminhados para o processo do WSL sem modificação. Os caminhos de arquivo devem ser especificados no formato do WSL.
Para usar o comando ls -la
do Linux para listar arquivos no caminho do sistema de arquivos /proc/cpuinfo
do Linux usando o PowerShell:
C:\temp> wsl ls -la /proc/cpuinfo
Para usar o comando ls -la
do Linux para listar arquivos no caminho do sistema de arquivos C:\Program Files
do Windows usando o PowerShell:
C:\temp> wsl ls -la "/mnt/c/Program Files"
Executar ferramentas do Windows no Linux
O WSL pode executar as ferramentas do Windows diretamente da linha de comando do WSL usando [tool-name].exe
. Por exemplo, notepad.exe
.
Os aplicativos executados dessa maneira têm as seguintes propriedades:
- Mantenha o diretório de trabalho como o prompt de comando do WSL (em grande parte – as exceções são explicadas abaixo).
- Tenha os mesmos direitos de permissão que o processo do WSL.
- Execute como usuário ativo do Windows.
- É exibido no Gerenciador de Tarefas do Windows como se fosse executado diretamente no prompt do CMD.
Os executáveis do Windows executados no WSL são tratados de forma semelhante aos executáveis do Linux nativos – piping, redirecionamentos e até mesmo o trabalho em segundo plano conforme o esperado.
Para executar a ferramenta ipconfig.exe
do Windows, use a ferramenta grep
do Linux para filtrar os resultados de "IPv4", e use a ferramenta cut
do Linux para remover os campos de coluna. De uma distribuição do Linux (por exemplo, Ubuntu), insira:
ipconfig.exe | grep IPv4 | cut -d: -f2
Vamos tentar mesclar comandos do Windows e do Linux. Abra sua distribuição do Linux (por exemplo, Ubuntu) e crie um arquivo de texto: touch foo.txt
. Agora, use o comando ls -la
do Linux para listar os arquivos diretos e seus detalhes de criação, além da ferramenta findstr.exe
do Windows PowerShell para filtrar os resultados para que apenas o arquivo foo.txt
seja exibido nos resultados:
ls -la | findstr.exe foo.txt
As ferramentas do Windows devem incluir a extensão do arquivo, corresponder o caso do arquivo e ser executáveis. Não executáveis, incluindo scripts do lote. Comandos nativos do CMD, como dir
, podem ser executados com o comando cmd.exe /C
.
Por exemplo, liste o conteúdo de seu diretório C:\ do sistema de arquivos do Windows, digitando:
cmd.exe /C dir
Ou use o comando ping
para enviar uma solicitação de eco para o site microsoft.com:
ping.exe www.microsoft.com
Os parâmetros são passados para o binário do Windows não modificado. Por exemplo, o seguinte comando abrirá C:\temp\foo.txt
no notepad.exe
:
notepad.exe "C:\temp\foo.txt"
Isso também funcionará:
notepad.exe C:\\temp\\foo.txt
Compartilhar variáveis de ambiente entre o Windows e o WSL com o WSLENV
O WSL e o Windows compartilham o WSLENV
, uma variável de ambiente especial criada para vincular distribuições do Windows e do Linux em execução no WSL.
Propriedades da variável WSLENV
:
- Ele é compartilhado e existe em ambientes do Windows e do WSL.
- É uma lista de variáveis de ambiente a serem compartilhadas entre o Windows e o WSL.
- Pode formatar variáveis de ambiente para funcionamento no Windows e no WSL.
- Pode auxiliar no fluxo entre o WSL e o Win32.
Observação
Antes do 17063, a única variável de ambiente do Windows que o WSL podia acessar era PATH
(portanto, era possível iniciar os executáveis do Win32 no WSL). O WSLENV
passa a ter suporte no 17063 e posteriores.
O WSLENV diferencia maiúsculas de minúsculas.
Sinalizadores de WSLENV
Há quatro sinalizadores disponíveis no WSLENV
para influenciar como essa variável de ambiente é convertida.
WSLENV
sinalizadores:
/p
– converte o caminho entre os caminhos do estilo WSL/Linux e os caminhos do Win32./l
– indica que a variável de ambiente é uma lista de caminhos./u
– indica que essa variável de ambiente só deve ser incluída ao executar o WSL usando o Win32./w
– indica que essa variável de ambiente só deve ser incluída ao executar o Win32 usando o WSL.
Os sinalizadores podem ser combinados conforme necessário.
Leia mais sobre WSLENV, incluindo perguntas frequentes e exemplos de como definir o valor de WSLENV para uma concatenação de outras variáveis de ambiente predefinidas, cada uma delas com uma barra seguida de sinalizadores para especificar como o valor deve ser traduzido, e de como passar variáveis com um script. Este artigo também inclui um exemplo para configurar um ambiente de desenvolvimento com a linguagem de programação Go, configurada para compartilhar um GOPATH entre WSL e Win32.
Desabilitar interoperabilidade
Os usuários podem desabilitar a capacidade de executar ferramentas do Windows para uma sessão do WSL executando o seguinte comando como raiz:
echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop
Para reabilitar os binários do Windows, saia de todas as sessões do WSL e execute o bash.exe novamente ou execute o seguinte comando como raiz:
echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
Desabilitar a interoperabilidade não persistirá entre as sessões do WSL – a interoperabilidade será habilitada novamente quando uma nova sessão for iniciada.
Windows Subsystem for Linux