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: \\wsl$\Ubuntu\home\<user name>\Project
  • Não o diretório raiz do sistema de arquivos do Windows: /mnt/c/Users/<user name>/Project$ ou C:\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

View project files in Windows File Explorer

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.