Compartilhar via


Trabalhando em sistemas de arquivos Windows e Linux

Há várias considerações a serem consideradas ao trabalhar entre sistemas de arquivos Do Windows e Linux. Descrevemos alguns deles para você neste guia, incluindo alguns exemplos de suporte de interoperabilidade para misturar comandos baseados em Windows e Linux.

Armazenamento e desempenho de arquivos em sistemas de arquivos

É recomendável não trabalhar em sistemas operacionais com seus arquivos, a menos que você tenha um motivo específico para fazer isso. Para obter a velocidade de desempenho mais rápida, armazene seus arquivos no sistema de arquivos WSL se você estiver trabalhando em uma linha de comando do Linux (Ubuntu, OpenSUSE etc. Se você estiver trabalhando em uma linha de comando do Windows (PowerShell, Prompt de Comando), armazene seus arquivos no sistema de arquivos do Windows.

Por exemplo, ao armazenar seus arquivos de projeto 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$ ou C:\Users\<user name>\Project

Quando você vê /mnt/ no caminho de arquivo de uma linha de comando WSL, isso significa que você está trabalhando em um disco montado. Portanto, a unidade C:/ do sistema de arquivos do Windows (C:\Users\<user name>\Project) terá esta aparência quando montada em uma linha de comando WSL: /mnt/c/Users/<user name>/Project$. É possível armazenar seus arquivos de projeto em uma unidade montada, mas sua velocidade de desempenho melhorará se você armazená-los diretamente na \\wsl$ unidade.

Exibir seu diretório atual no Explorador de Arquivos do Windows

Você pode exibir o diretório onde os arquivos são armazenados abrindo o Explorador de Arquivos do Windows na linha de comando usando:

explorer.exe .

Como alternativa, você também pode usar o comando: powershell.exe /c start . adicione o período ao final do comando para abrir o diretório atual.

Para exibir todas as distribuições disponíveis do Linux e seus sistemas de arquivos raiz no Explorador de Arquivos do Windows, na barra de endereços, digite: \\wsl$

Exibir arquivos de projeto no Explorador de Arquivos do Windows

Sensibilidade a maiúsculas e minúsculas de nome de arquivo e diretório

A diferenciação entre maiúsculas e minúsculas determina se letras maiúsculas (FOO.txt) e minúsculas (foo.txt) são tratadas como distintas (diferenciação entre maiúsculas e minúsculas) ou equivalentes (não diferenciação entre 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 sensibilidade a maiúsculas e minúsculas de maneiras diferentes – o Windows é insensível a maiúsculas e minúsculas, enquanto o Linux diferencia maiúsculas de minúsculas. Saiba mais sobre como ajustar a sensibilidade de maiúsculas e minúsculas, especialmente ao montar discos com WSL, no artigo como ajustar a sensibilidade de maiúsculas e minúsculas.

Interoperabilidade entre comandos Windows e Linux

As ferramentas e os comandos do Windows e do Linux podem ser usados de forma intercambiável com o WSL.

  • Execute ferramentas do Windows (ou seja, notepad.exe) de uma linha de comando do Linux (ou seja, Ubuntu).
  • Execute ferramentas do Linux (ou seja, grep) de uma linha de comando do Windows (ou seja. PowerShell).
  • Compartilhe variáveis de ambiente entre Linux e Windows. (Build 17063+)

Executar ferramentas do Linux de uma linha de comando do Windows

Execute binários do Linux no CMD (Prompt de Comando do Windows) ou no PowerShell usando wsl <command> (ou wsl.exe <command>).

Por exemplo:

C:\temp> wsl ls -la
<- contents of C:\temp ->

Binários invocados dessa forma:

  • Use o mesmo diretório de trabalho que o prompt atual do CMD ou do PowerShell.
  • Execute como o usuário padrão do WSL.
  • Possua os mesmos direitos administrativos do Windows que o processo de chamada e o terminal possuem.

O comando Linux a seguir wsl (ou wsl.exe) é tratado como qualquer execução de comando no WSL. Coisas como sudo, tubulação e redirecionamento de arquivo funcionam.

Exemplo usando sudo para atualizar sua distribuição padrão do Linux:

C:\temp> wsl sudo apt-get update

O nome de usuário de distribuição padrão do Linux será listado depois de executar esse comando e você será solicitado a fornecer sua senha. Depois de inserir sua senha corretamente, sua distribuição baixará as atualizações.

Combinando comandos do Linux e do Windows

Aqui estão alguns exemplos de combinação de comandos do Linux e do Windows usando o PowerShell.

Para usar o comando ls -la Linux para listar arquivos e o comando findstr do PowerShell para filtrar os resultados de palavras que contêm "git", combine os comandos:

wsl ls -la | findstr "git"

Para usar o comando dir do PowerShell para listar arquivos e o comando grep Linux para filtrar os resultados de palavras que contêm "git", combine os comandos:

C:\temp> dir | wsl grep git

Para usar o comando ls -la Linux para listar arquivos e o comando > out.txt do PowerShell para imprimir essa 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 WSL sem modificação. Os caminhos de arquivo devem ser especificados no formato WSL.

Para usar o comando ls -la Linux para listar arquivos no caminho do sistema de arquivos do Linux usando o /proc/cpuinfo PowerShell:

C:\temp> wsl ls -la /proc/cpuinfo

Para usar o comando ls -la Linux para listar arquivos no caminho do sistema de arquivos do Windows usando o C:\Program Files PowerShell:

C:\temp> wsl ls -la "/mnt/c/Program Files"

Executar ferramentas do Windows no Linux

O WSL pode executar ferramentas do Windows diretamente da linha de comando WSL usando [tool-name].exe. Por exemplo, notepad.exe.

Os aplicativos executados dessa forma têm as seguintes propriedades:

  • Mantenha o diretório de trabalho como o prompt de comando do WSL (na maioria das vezes -- as exceções são explicadas abaixo).
  • Tenha os mesmos direitos de permissão que o processo do WSL.
  • Execute como o usuário ativo do Windows.
  • Apareça no Gerenciador de Tarefas do Windows como se fosse executado diretamente no prompt do CMD.

Os executáveis do Windows que rodam no WSL são tratados de forma semelhante aos executáveis nativos do Linux, permitindo o uso de canalizações, redirecionamentos e até mesmo a execução em segundo plano como esperado.

Para executar a ferramenta do Windows ipconfig.exe, use a ferramenta do Linux grep para filtrar os resultados de "IPv4", e a ferramenta do Linux cut para remover os campos de coluna. A partir de uma distribuição do Linux (por exemplo, Ubuntu), insira:

ipconfig.exe | grep IPv4 | cut -d: -f2

Vamos tentar um exemplo de combinação de comandos do Windows e do Linux. Abra sua distribuição do Linux (ou seja, Ubuntu) e crie um arquivo de texto: touch foo.txt. Agora, use o comando ls -la 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 foo.txt o arquivo apareça nos resultados:

ls -la | findstr.exe foo.txt

As ferramentas do Windows devem incluir a extensão de arquivo, corresponder ao caso de arquivo e ser executáveis. Não executáveis, incluindo scripts de lote. Comandos nativos do CMD como dir podem ser executados com cmd.exe /C comando.

Por exemplo, liste o conteúdo do diretório C:\ do sistema de arquivos do Windows inserindo:

cmd.exe /C dir

Ou use o ping comando para enviar uma solicitação de eco para o site do microsoft.com:

ping.exe www.microsoft.com

Os parâmetros são passados para o binário do Windows sem modificação. Como exemplo, o seguinte comando abrirá C:\temp\foo.txt em 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 uma variável WSLENVde ambiente especial, criada para fazer a ponte entre as distribuições do Windows e do Linux em execução no WSL.

Propriedades da WSLENV variável:

  • É compartilhada e existe em ambos os ambientes: Windows e WSL.
  • É uma lista de variáveis de ambiente a serem compartilhadas entre o Windows e o WSL.
  • Ele pode formatar variáveis de ambiente para funcionar bem no Windows e no WSL.
  • Ele pode ajudar no fluxo entre o WSL e o Win32.

Observação

Antes de 17063, somente a variável de ambiente do Windows que o WSL podia acessar era PATH (para que você pudesse iniciar executáveis Win32 em WSL). A partir de 17063, WSLENV começa a ter suporte. O WSLENV é sensível à diferenciação de maiúsculas e minúsculas.

Sinalizadores WSLENV

Há quatro opções disponíveis em WSLENV para influenciar a tradução da variável de ambiente.

WSLENV Sinalizadores:

  • /p – converte o caminho entre caminhos de estilo WSL/Linux e caminhos 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 do Win32.
  • /w - indica que essa variável de ambiente só deve ser incluída ao executar o Win32 do WSL.

Os sinalizadores podem ser combinados conforme necessário.

Leia mais sobre o WSLENV, incluindo FAQs e exemplos de como definir o valor do WSLENV como uma concatenação de outras variáveis de ambiente predefinidas, cada uma sufixada com uma barra seguida por sinalizadores para especificar como o valor deve ser traduzido e transmitir 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 o WSL e o Win32.

Desabilitar interoperabilidade

Os usuários podem desabilitar a capacidade de executar ferramentas do Windows para uma única sessão 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 novamente o bash.exe ou execute o seguinte comando como root:

echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop

A desabilitação da interoperabilidade não persistirá entre as sessões do WSL. A interoperabilidade será habilitada novamente quando uma nova sessão for iniciada.