Windows Subsystem for Linux (WSL) no Windows 10: Guia Definitivo

O Subsistema do Windows para Linux ou Windows WSL é uma ótima solução para desenvolvedores trabalharem nativamente com o Linux diretamente em suas áreas de trabalho com a versão do Windows 10.

Se você passou muito tempo particionando discos rígidos para ter vários sistemas Linux instalados com o Windows, está com sorte com este artigo.

A fada madrinha do código na Microsoft decidiu lhe dar outra opção: O Subsistema do Windows para Linux (WSL). O WSL torna muito mais fácil e flexível executar um sistema Linux ao lado do Windows.

Neste tutorial, você aprenderá como começar com o WSL. Você aprenderá como começar a usar algumas ferramentas úteis, tornando o WSL ainda mais versátil do que usar o bash ou o PowerShell sozinhos.

Reduza as chamadas para o serviço de suporte e atualize as credenciais do cache para usuários remotos mesmo fora da VPN com uma solução de redefinição de senha self-service. Obtenha uma demonstração do Specops uReset!

O que é WSL?

O WSL ou C:\Windows\System32\wsl.exe é uma ferramenta do Windows que permite instalar uma distribuição Linux como um aplicativo na loja do Windows.

Como o WSL é um executável simples do Windows, você pode chamá-lo de um prompt de comando ou terminal do PowerShell. Vamos nos aprofundar nesse tópico mais tarde. Por enquanto, é importante entender um pouco mais sobre o que o WSL está fazendo nos bastidores.

wsl.exe

Como Habilitar WSL

Para configurar e habilitar o WSL, é necessário instalar uma distribuição Linux ao lado do Windows 10. Mas de uma maneira que permita que os dois sistemas operacionais diferentes interajam entre si.

Pré-requisitos

Se você é um profissional de TI lutando com muitos pedidos de redefinição de senha no Active Directory, confira o Specops uReset, uma solução segura de SSPR.

Para instalar o WSL no Windows, você tem um requisito a ser atendido; você deve ter um computador Windows 10 de 64 bits com a compilação 18917 ou posterior.

Você pode encontrar a compilação do seu Windows 10 executando o utilitário winver.

Windows build 1809

Habilitando o Recurso do Windows para WSL

Habilitar o WSL é fácil; nenhum download é necessário. É apenas um recurso do Windows.

Para habilitar o WSL, abra o PowerShell como administrador e execute o seguinte:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux 

Relacionado: Como Executar o PowerShell como Administrador

Assim que completar, reinicie seu computador e você está pronto!

Baixando uma Distribuição Linux para WSL

O WSL não instala nenhuma distribuição Linux por conta própria. Você precisará instalar uma. Assim que o Windows 10 reiniciar, comece a configurar a distribuição Linux escolhida.

Primeiro, abra a Microsoft Store e procure por ‘WSL’. Você logo verá uma lista de distribuições Linux aparecer.

Em seguida, escolha a sua distribuição de preferência e instale-a. Este tutorial utilizará o Ubuntu 18.04. No momento desta redação, você também tem algumas outras distribuições disponíveis, tais como:

  • Ubuntu 16.04 LTS
  • Ubuntu 18.04 LTS
  • OpenSUSE Leap 15
  • OpenSUSE Leap 42
  • SUSE Linux Enterprise Server 12
  • SUSE Linux Enterprise Server 15
  • Kali Linux
  • Debian GNU/Linux
  • Fedora Remix for WSL
  • Pengwin
  • Alpine WSL

Configurando sua Versão WSL

Talvez você precise habilitar o Linux para funcionar com a versão 2 do WSL. Se for o caso, você pode fazer isso seguindo as instruções abaixo.

Em um console PowerShell:

  1. Liste as versões de Linux que você tem instaladas executando wsl -l ou wsl --list.
  2. Depois de obter a lista, copie o nome da distribuição que deseja executar com o WSL2 e execute wsl --set-version <Distro> 2, substituindo <Distro> pelo nome que você copiou anteriormente.
  3. Confirme se o comando foi bem-sucedido executando wsl -l -v ou wsl --list --verbose. Este comando retornará uma lista completa de distribuições WSL e a versão que cada distribuição está usando.
Setting WSL Linux distro

Você também pode definir sua versão padrão do WSL para WSL2 para quaisquer distribuições que você instalar no futuro, executando wsl --set-default-version 2

Inicializando o WSL

Para começar a usar o WSL, abra um terminal do PowerShell e digite wsl. Se você configurou o WSL corretamente, entrará em um terminal bash em execução na distribuição WSL de sua escolha. A partir daqui, você pode executar todos os comandos do Linux que desejar.

Abaixo, você encontrará uma referência a todas as opções que o wsl.exe fornece ao iniciar.

Command Explanation Example
exec, -e Will run command using without using default shell wsl -e curl google.com
Passes anything after this parameter to default shell. Leaving the operator out will also work. wsl — curl google.com, wsl curl google.com
distribution, -d Opens a terminal in the specified distribution’s shell wsl -d Ubuntu-18.04
user, -u Runs WSL command as the specified user as long as user exists on that distro wsl -d Ubuntu-18.04 -u tux_user
export Exports the specified distribution to a tar file on your local system. wsl –export Ubuntu ./Test-Ubuntu.tar
import [–version] Imports a tar file as a new WSL distribution. Can specify WSL version with the –version option wsl –import Test-Ubuntu C:\data\Test-Ubuntu .\Test-Ubuntu.tar
list, -l [Options] wsl –list
all List all installed WSL distributions wsl -l –all
running List only WSL distributions that are currently running wsl -l –running
quiet, -q Only show WSL distribution names wsl -l -q
verbose, -v Show detailed information about all WSL distributions wsl -l -v
set-default, -s Sets the specified WSL distribution as the default distribution for WSL commands. wsl -s Test-Ubuntu
set-default-version Changes the default WSL version for all new distributions installed to that system wsl –set-default-version 2
set-version Changes the WSL version of the specified distribution wsl –set-version Test-Ubuntu 2
shutdown Immediately terminates all running WSL distributions wsl –shutdown
terminate, -t Terminates the specified WSL distribution wsl -t Test-Ubuntu
unregister Unregisters the specified WSL distribution wsl –unregister Test-Ubuntu
help Display information about using WSL wsl –help

Depois de se acostumar a usar esses comandos, você perceberá que executar e gerenciar aplicativos por meio do WSL é muito mais fácil do que gerenciar máquinas virtuais Linux por conta própria.

Dica rápida: Descubra todas as flags e argumentos para o WSL executando wsl --help.

Quando terminar, digite exit para voltar ao terminal do PowerShell.

Compartilhando Recursos do Windows/Linux via WSL

Uma das melhores partes do WSL é que ele pode compartilhar recursos do Windows e do Linux entre si. Atualmente, você pode compartilhar sistemas de arquivos, variáveis de ambiente, recursos de rede e ferramentas de linha de comando como cmd e PowerShell.

Todos os exemplos que você verá nesta seção são via a distribuição WSL Ubuntu Linux. Sua experiência pode variar se você escolheu baixar uma distribuição diferente.

Compartilhando Sistemas de Arquivos

O sistema de arquivos é uma das coisas mais úteis para compartilhar com o WSL. O WSL permite que você trabalhe com ambos os sistemas de arquivos como se fossem um só.

O sistema de arquivos do Windows 10 é montado como um diretório no Linux, enquanto o sistema de arquivos do Linux será montado como uma pasta no Windows.

Encontrando o Sistema de Arquivos do Linux a partir do Windows com Variáveis de Ambiente

Ao instalar uma distribuição Linux com WSL, às vezes será adicionada uma variável de ambiente do Windows. No caso da distribuição Ubuntu do WSL, será criada uma variável de ambiente chamada UBUNTU_HOME. Essa variável de ambiente aponta para o diretório Linux /home/ubuntu tanto do Windows quanto do WSL Ubuntu.

O caminho definido em UBUNTU_HOME pode ser utilizado para executar scripts que usam recursos entre eles ou definir um local padrão para o terminal do Windows (abordado posteriormente).

Inspecting the WSL UBUNTU_HOME environment variable

Outras distribuições podem definir uma variável de ambiente semelhante. Verifique as variáveis de ambiente do Windows com o comando PowerShell Get-ChildItem -Path $Env:\ após instalar uma nova distribuição Linux para ver se alguma foi adicionada.

Este atalho de variável de ambiente é útil se você deseja colocar tudo no diretório /home/ubuntu. Mas vamos aprofundar um pouco mais sobre como isso aconteceu e como você pode acessá-lo de outras maneiras.

Encontrando o Sistema de Arquivos do Linux a partir do Windows através da Pasta de Pacotes da Microsoft Store

Não é garantido que toda distribuição WSL venha com uma maneira fácil de referenciá-la. É importante que você aprenda a encontrar o sistema de arquivos do Linux de uma maneira alternativa.

Como a maioria das distribuições Linux do WSL será instalada a partir da loja da Microsoft, você pode procurar pelo sistema de arquivos Linux no mesmo local que os outros aplicativos da loja do Windows. Navegue até %USERPROFILE%\AppData\Local\Packages\ para encontrar o diretório onde seus aplicativos da loja do Windows estão localizados. Em seguida, assuma o controle da pasta, pois geralmente ela é protegida por padrão.

Você verá muitas subpastas na pasta de pacotes onde o sistema de arquivos de sua distribuição Linux pode estar presente. A distro WSL Ubuntu, por exemplo, estava na pasta CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc para mim.

Se você navegar até a pasta do pacote, encontrará o sistema de arquivos Linux. Para o WSL Ubuntu, ele está localizado na pasta LocalState\rootfs. Este é o diretório raiz da sua distribuição Linux.

Linux filesystem under %USERPROFILE%/AppData/Local/Packages/

Encontrando o Sistema de Arquivos do Windows a partir do Linux

Para encontrar o sistema de arquivos do Windows 10 a partir do Linux, abra o WSL no Windows. O WSL então abrirá um terminal bash. Este terminal bash começará no seu diretório UBUNTU_HOME por padrão.

Você também pode encontrar a raiz dos volumes de armazenamento do Windows. Cada uma das suas unidades de letra do Windows (C, D, E, etc) é tratada como uma unidade montada a partir do sistema de arquivos Linux do WSL. Você encontrará cada volume montado como /mnt/c, /mnt/d, etc, desde que tenha privilégios de root.

Bash equivalent of running Get-ChildItem C:\Windows\System32 | Select-Object -First 5 running on WSL

O Sistema de Arquivos do WSL2

Navegar no sistema de arquivos do WSL é bastante direto. Qualquer pessoa não familiarizada com a estrutura de um sistema de arquivos Linux apreciará poder navegá-lo com o Windows Explorer. Mas se você quiser mudar para o WSL2, vai ser um pouco mais complicado.

O WSL2 muda como tudo funciona por baixo dos panos para compartilhar sistemas de arquivos. Para começar, o sistema de arquivos agora é um disco rígido virtual no formato vhdx em vez de um diretório.

Você pode encontrar o arquivo vhdx em %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState para uma distribuição Ubuntu WSL.

Você descobrirá que os arquivos VHDX podem ser montados no Windows com a ferramenta Gerenciador de Disco. Mas, os discos virtuais não podem ser montados enquanto a distribuição WSL estiver registrada.

Compartilhamento de Variáveis de Ambiente

As variáveis de ambiente são uma parte crucial de qualquer sistema operacional, facilitando a referência a binários e executáveis em qualquer lugar de suas aplicações.

Antes da compilação 17063 do Windows 10, a única variável de ambiente compartilhada entre o Windows 10 e o Linux WSL era a variável PATH. Desde então, é possível compartilhar variáveis de ambiente usando a variável de ambiente WSLENV.

Usar a variável de ambiente WSLENV para compartilhar outras variáveis de ambiente pode parecer um pouco meta. Para compartilhar variáveis de ambiente entre plataformas, na verdade você precisa definir variáveis de ambiente dentro de outra variável de ambiente.

Visão geral

Compartilhar variáveis de ambiente é um processo de três etapas abaixo. A única diferença significativa ao compartilhar entre Windows/Linux é o argumento de switch usado (referência completa abaixo).

  1. Defina variável de ambiente no Windows ou Linux.
  2. Configure a variável de ambiente WSLENV igual à variável de ambiente previamente definida seguida por um argumento de switch (para tradução de caminho).
  3. Leia a variável de ambiente no Windows ou Linux.

Opções de Compartilhamento

Você pode tornar variáveis disponíveis de quatro maneiras diferentes, dependendo da plataforma em que deseja que a variável de ambiente apareça usando switches (tabela mostrada abaixo).

  • Sistema de arquivos do Windows para estar disponível apenas a partir dele mesmo
  • Sistema de arquivos do WSL para estar disponível apenas a partir do WSL
  • Sistema de arquivos do WSL para estar disponível tanto no WSL Linux quanto no Windows
  • Sistema de arquivos do Windows para estar disponível tanto no WSL Linux quanto no Windows
Flag Explanation
/p Single path. A variable set with this will be translated between the Windows and WSL Linux and made available to both.
/l List of paths. Similar to /p, except it can accept more than one path. On Windows, this list will be delimited by semicolons while on WSL Linux it will be delimited by colons.
/u Unix path. A path set with this flag can only be accessed when invoking WSL Linux from Windows. Can be used with either the /p or /l flags
/w Windows path. A path set with this flag can only be accessed when invoking Windows from WSL Linux. Can be used with either the /p or /l flags

Tradução de Caminho

A principal razão para compartilhar variáveis de ambiente é a tradução de caminho. Como você pode já saber, o Windows tem pastas de perfil de usuário, assim como o Linux tem diretórios de perfil de usuário, por exemplo. Cada usuário possui uma “pasta de usuário” predeterminada como C:\Users\<username> no Windows e /home/<username> no Linux.

Usando os switches /p e /l, o WSL traduzirá esses caminhos de pasta entre plataformas.

Compartilhando e Traduzindo Caminhos do Windows para o Linux

Você pode compartilhar um único caminho ou vários caminhos de uma vez usando as opções /p e /l.

Em um prompt de comando do Windows e com uma variável de ambiente do Windows chamada DESKTOP definida, atribua um valor de DESKTOP/p à variável WSLENV. Isso permite acessá-lo a partir do WSL Linux. Você pode ver um exemplo abaixo.

Setting variables in Windows and accessing in Linux

O mesmo procedimento exato pode ser realizado para vários caminhos de uma vez usando a opção /l.

Compartilhando e Traduzindo Caminhos do Linux para o Windows

Para compartilhar e traduzir caminhos do Linux para o Windows, o procedimento é o mesmo que para o Windows, embora utilizando comandos específicos do Linux para definir variáveis de ambiente.

Para uma visão mais aprofundada sobre o compartilhamento de variáveis de ambiente, confira, este artigo da Microsoft.

Compartilhando Recursos de Rede

O componente de rede é outro recurso útil para compartilhar entre o Windows e o WSL Linux.

Interfaces de Rede Física vs. Virtualizadas

No WSL2, as interfaces de rede são virtualizadas. Interfaces de rede virtualizadas significam que as instâncias de rede do WSL2 podem ter configurações IP diferentes de suas contrapartes no Windows 10.

No momento desta redação, os endereços IP para o Linux WSL2 usam Tradução de Endereço de Rede (NAT) para acessar recursos de rede no Windows, embora a Microsoft tenha mencionado que remover NAT é uma das principais questões a serem corrigidas.

Same comparison from earlier, but against a WSL2 distro

Resolução de DNS do Cliente

O WSL ainda irá gerar os arquivos /etc/resolv.conf e /etc/hosts para permitir a resolução de DNS. Desde que você não substitua explicitamente esse comportamento em /etc/wsl.conf, a resolução de DNS do cliente continuará funcionando conforme o esperado.

Você aprenderá mais sobre o arquivo wsl.conf posteriormente neste post.

Usando PowerShell e Bash juntos

Uma das características mais legais do WSL é a capacidade de passar informações de forma transparente para e do PowerShell e Bash no WSL.

PowerShell –> Bash

Já que o executável WSL aceita entrada do pipeline, você pode chamar o comando wsl.exe dentro do PowerShell e aceitar stdin. Isso permite que você use o WSL para passar objetos inteiros do PowerShell para o WSL, que então são processados com o terminal bash. Você pode ver um exemplo abaixo.

Passing PowerShell to grep

Bash –> PowerShell/Cmd

Você também pode passar informações do bash no WSL para o PowerShell e cmd com facilidade. Abaixo você pode ver um exemplo de execução do comando Linux ls e passando a saída para o cmdlet Select-Object do PowerShell através do pipeline.

Passing Bash output to PowerShell

Você também pode chamar algumas utilidades do cmd do Windows a partir do WSL e passar a saída de volta para o Linux, desde que ambos os comandos estejam no caminho do sistema.

Lembre-se de que o WSL sabe qual é o caminho do sistema em ambos os lados, pois tem acesso à variável PATH do Windows por padrão

Abaixo, você pode ver que pode executar ipconfig, que é um comando do Windows, dentro do WSL e passar a saída para o comando Linux grep. Você também pode ver o oposto, chamando o comando Linux which e passando a saída para o comando Windows ipconfig.

Executing a Windows command in Linux

Problemas de Tradução

Há algumas ressalvas ao passar a saída do comando de um lado para o outro entre o bash e o PowerShell.

Um grande problema é como o PowerShell e o bash retornam informações. O PowerShell é uma linguagem de programação orientada a objetos, enquanto o bash é uma ferramenta de manipulação de strings. Quaisquer objetos do PowerShell direcionados ao bash serão convertidos em uma string. Da mesma forma, qualquer saída do bash direcionada ao PowerShell será convertida em um objeto string.

Você pode contornar esse comportamento convertendo ou fazendo o cast explícito dos tipos de objeto no PowerShell, como no exemplo abaixo. Mas se você espera passar objetos entre o PowerShell e o WSL sem nenhum trabalho extra, ficará desapontado.

Problems passing objects

Ao fazer o cast da data do bash como a classe [datetime] no PowerShell, agora temos um objeto válido do PowerShell que podemos usar em nosso script. Se você estiver escrevendo scripts que precisam ir do Windows para o WSL e vice-versa, é possível fazer isso com um pouco de ajuste no código.

Instale uma interface gráfica do Windows Subsystem para Linux com o Xfce4

Quando as ferramentas de linha de comando não são suficientes, é hora de usar as interfaces gráficas. Se você precisa executar uma utilidade gráfica no WSL, explorar uma distribuição personalizada ou se ainda não está familiarizado com o bash, você pode instalar uma GUI do Linux.

Xfce

O Linux possui muitos ambientes de desktop disponíveis. Um dos mais comuns de configurar para o WSL é chamado de Xfce. No momento desta redação, o Xfce está na versão 4. Outros ambientes de desktop estão disponíveis, mas neste artigo, você aprenderá a configurar o Xfce4.

xRDP

Quando você tem um ambiente de desktop Linux configurado, precisará de um serviço que compreenda o protocolo RDP. Neste artigo, vamos nos concentrar no servidor xRDP. xRDP é um servidor RDP de código aberto para Linux que permite usar clientes RDP para se conectar ao Linux da mesma forma que você faria com hosts Windows.

Configurando

Para acessar uma GUI do Linux a partir do Windows com Xfce4 e xRDP, siga as instruções abaixo. Em um terminal do WSL:

  1. Baixe e instale o Xfce4 – Baixe e instale o Xfce4 usando o comando sudo apt-get -y install xfce4 && sudo apt-get -y install xubuntu-desktop. Isso levará algum tempo. Aguarde.
  2. Instale o servidor xRDP – Baixe e instale o xRDP executando o comando sudo apt-get -y install xrdp.
  3. Configure o xRDP para o xfce4 – echo xfce4-session > ~/.xsession
  4. Reinicie o xRDPsudo service xrdp restart
  5. Encontre o endereço IP da distribuição WSLifconfig | grep inet

Neste ponto, você deverá ser capaz de abrir uma sessão RDP a partir do Windows 10. Abra a janela de conexão de desktop remoto usando mstsc e forneça o endereço IP do Linux encontrado no passo #5.

Se tudo correr bem, você poderá abrir uma conexão RDP para a distribuição Linux que está em execução no seu sistema operacional Windows, conforme mostrado abaixo.

Windows Subsystem for Linux GUI with Xfce4 and xRDP

Dicas e Truques

Agora que você conhece o básico do WSL e como usá-lo, o que vem depois? Felizmente, existem muitas ferramentas que foram construídas para o WSL ou que funcionam bem com ele.

Configurando Itens de Configuração do WSL na Inicialização com wsl.conf

A configuration file exists in the WSL at /etc/wsl.conf. This file contains configuration settings that run every time the WSL distro is started. When the wsl.conf file exists, WSL will ingest any setting in this file every time the Linux distro is started.

Há algumas seções diferentes dentro do arquivo wsl.conf que você pode configurar.

  • Automontagem – Montar unidades do Windows no início
  • Rede – Gerar resolv.conf ou o arquivo hosts
  • Interop – Habilitar ou desabilitar interoperação com o Windows

Para mais detalhes sobre o arquivo wsl.conf, confira a página Configurar Configurações de Inicialização do WSL da Microsoft

Desenvolvendo no WSL com Visual Studio Code (VS Code)

O VS Code aparentemente se integra com tudo e o WSL não é exceção. De dentro do VS Code, você pode configurar um espaço de trabalho na sua Distribuição WSL, mas manipulá-lo completamente com o VS Code no Windows. Nem mesmo é necessário ter um terminal em execução!

Para configurar o VS Code no Windows para trabalhar com o WSL, você primeiro obviamente precisa ter o VS Code para Windows instalado. Além disso, certifique-se de ter a extensão do VS Code Remote – WSL instalada.

Depois de ter a extensão instalada, você pode conectar-se a ela abrindo um terminal do WSL e executando code <workspace>.  <Workspace> é o diretório de onde você deseja executar o VS Code. O VS Code então detectará que você está em uma distribuição WSL, abrirá uma janela e estabelecerá uma conexão com o espaço de trabalho.

Confirme se funcionou observando o ícone de conexão do WSL no canto inferior esquerdo do VS Code. Você deverá ver que ele tem o nome da sua distribuição WSL.

Working with WSL and Visual Studio Code

Você até pode usar o terminal integrado para interagir diretamente com o espaço de trabalho do WSL. Não há necessidade de executar uma janela separada para comandos do git bash.

Adicionando o Subsistema do Windows para Linux ao Terminal do Windows

Outro caso de uso útil do WSL é adicionar o console do WSL ao Terminal do Windows.

Dentro do Terminal do Windows, você adiciona cada distribuição WSL em sua própria aba. Você também pode personalizar a aparência de cada aba para não se perder.

Se você estiver usando uma distribuição WSL que define uma variável de ambiente para o diretório do usuário, como UBUNTU_HOME, você também pode configurá-la como o diretório inicial para o seu terminal.

Checking the date in PowerShell and Bash

Se você deseja um tutorial em vídeo completo sobre como configurar o WSL para funcionar com o Windows Terminal, confira o vídeo how-to da TechSnips abaixo.

Pensamentos Finais

Pare de lutar com chamadas de redefinição de senha e bloqueios de conta no Active Directory. Obtenha um teste GRATUITO do Specops uReset.

A Microsoft lançou o WSL para permitir aos desenvolvedores Linux a capacidade de desenvolver no Windows. Até agora, o WSL tem sido um passo na direção certa.

Parece que o WSL será um componente crucial da nova estratégia amigável à open source da Microsoft. Se a Microsoft vai competir com a Apple para ser a escolha dos desenvolvedores ao escrever seu código, será uma batalha difícil. Mas o WSL é uma carta forte a ser jogada.

O WSL traz muitos benefícios bem-vindos para os desenvolvedores, tais como:

  • Muito mais leve do que executar VMs Linux locais
  • Elimina a sobrecarga de instalar e gerenciar um hipervisor
  • Não há mais necessidade de discos rígidos particionados
  • Sem os complicados carregadores de inicialização do grub

O WSL simplesmente liga e funciona, para que todos possamos programar felizes para sempre.

Source:
https://adamtheautomator.com/windows-subsystem-for-linux/