Partilhar via


Trabalhando em sistemas de arquivos Windows e Linux

Há uma série de considerações a ter em mente ao trabalhar entre sistemas de arquivos 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 de arquivos e desempenho em sistemas de arquivos

Recomendamos que não trabalhe entre sistemas operativos com os seus ficheiros, a menos que tenha uma razão específica para o fazer. 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 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 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 do arquivo de uma linha de comando WSL, isso significa que você está trabalhando a partir de uma unidade montada. Assim, 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 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 seus arquivos estão armazenados abrindo o Explorador de Arquivos do Windows a partir da linha de comando, usando:

explorer.exe .

Como alternativa, você também pode usar o comando: powershell.exe /c start . Certifique-se de adicionar o ponto no final do comando para abrir o diretório atual.

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

Exibir arquivos de projeto no Explorador de Arquivos do Windows

Nome de arquivo e diferenciação de maiúsculas e minúsculas do diretório

A diferenciação de maiúsculas (FOO.txt) e minúsculas (foo.txt) é tratada como distinta (sensível a maiúsculas e minúsculas) ou equivalente (não sensível a maiúsculas e minúsculas) em nomes de ficheiros ou diretórios. Os sistemas de arquivos Windows e Linux lidam com sensibilidade a maiúsculas e minúsculas de formas distintas - o Windows é insensível à distinção entre maiúsculas e minúsculas e o Linux é sensível à distinção entre maiúsculas e minúsculas. Saiba mais sobre como ajustar a diferenciação de maiúsculas e minúsculas, especialmente ao montar discos com WSL, no artigo de instruções Como Ajustar a Diferenciação de Maiúsculas e Minúsculas.

Interoperabilidade entre comandos Windows e Linux

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

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

Executar ferramentas Linux a partir de uma linha de comando do Windows

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

Por exemplo:

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

Binários invocados desta forma:

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

O comando Linux seguinte wsl (ou wsl.exe) é tratado como qualquer comando executado no WSL. Coisas como sudo, tubulação e trabalho de redirecionamento de arquivo.

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

C:\temp> wsl sudo apt-get update

Seu nome de usuário de distribuição Linux padrão será listado depois de executar este comando e você será solicitado para sua senha. Depois de introduzir a sua palavra-passe corretamente, a sua distribuição irá descarregar atualizações.

Misturando comandos Linux e Windows

Aqui estão alguns exemplos de como misturar comandos do Linux e do Windows usando o PowerShell.

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

wsl ls -la | findstr "git"

Para usar o comando dir PowerShell para listar arquivos e o comando grep Linux para filtrar os resultados por palavras contendo "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 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 PowerShell para executar o comando ls -la e listar ficheiros no caminho do sistema de ficheiros Linux /proc/cpuinfo:

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 a partir do Linux

WSL pode executar ferramentas do Windows diretamente a partir da linha de comando da 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 no prompt de comando do WSL na maior parte do tempo -- as exceções são explicadas abaixo.
  • Ter 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 do prompt CMD.

Os executáveis do Windows, quando executados no WSL, são geridos de forma semelhante aos executáveis nativos do Linux -- encaminhamento, redirecionamentos e até mesmo a execução em segundo plano funcionam conforme o esperado.

Para executar a ferramenta Windows ipconfig.exe, use a ferramenta Linux grep para filtrar os resultados "IPv4" e use a ferramenta Linux cut para remover as colunas, de uma distribuição Linux (por exemplo, Ubuntu) digite:

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

Vamos tentar um exemplo misturando comandos do Windows e Linux. Abra sua distribuição 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 Windows PowerShell para filtrar os resultados para que apenas seu foo.txt arquivo seja exibido nos resultados:

ls -la | findstr.exe foo.txt

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

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

cmd.exe /C dir

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

ping.exe www.microsoft.com

Os parâmetros são passados para o binário do Windows sem modificações. Como exemplo, o seguinte comando irá abrir C:\temp\foo.txt em notepad.exe:

notepad.exe "C:\temp\foo.txt"

Isto também funcionará:

notepad.exe C:\\temp\\foo.txt

Compartilhar variáveis de ambiente entre Windows e WSL com WSLENV

WSL e Windows compartilham uma variável de ambiente especial, WSLENV, criada para unir distribuições Windows e Linux em execução no WSL.

Propriedades da WSLENV variável:

  • É partilhado; ele existe em ambientes Windows e WSL.
  • É uma lista de variáveis de ambiente para compartilhar entre o Windows e o WSL.
  • Ele pode formatar variáveis de ambiente para funcionar bem no Windows e WSL.
  • Ele pode ajudar no fluxo entre WSL e Win32.

Observação

Antes de 17063, apenas a variável de ambiente do Windows que o WSL podia acessar era PATH (para que você pudesse iniciar executáveis do Win32 a partir do WSL). A partir de 17063, WSLENV começa a ser apoiado. WSLENV distingue entre maiúsculas e minúsculas.

Bandeiras WSLENV

Há quatro sinalizadores disponíveis em WSLENV para influenciar como a variável de ambiente é traduzida.

WSLENV bandeiras:

  • /p - traduz 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 esta variável de ambiente só deve ser incluída ao executar WSL a partir do Win32.
  • /w - indica que essa variável de ambiente só deve ser incluída ao executar o Win32 da WSL.

As bandeiras podem ser combinadas conforme necessário.

Leia mais sobre o WSLENV, incluindo perguntas frequentes e exemplos de como definir o valor de WSLENV através de uma concatenação de outras variáveis de ambiente predefinidas, cada uma sufixada com uma barra seguida por sinalizadores que especificam como o valor deve ser traduzido, e como passar variáveis utilizando um script. Este artigo também inclui um exemplo para configurar um ambiente de desenvolvimento com a linguagem de programação Go, configurado para compartilhar um GOPATH entre WSL e Win32.

Desativar a interoperabilidade

Os usuários podem desabilitar a capacidade de executar ferramentas do Windows para uma única sessão WSL executando o seguinte comando como root:

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

Para reativar os binários do Windows, saia de todas as sessões WSL e execute novamente bash.exe ou execute o seguinte comando como root:

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

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