Subsistema Windows para 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 em seus desktops com Windows 10.

Se você já gastou 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 aprender a usar algumas ferramentas interessantes, tornando o WSL ainda mais versátil do que usar o bash ou o PowerShell por si só.

Reduza as chamadas para o serviço de suporte e atualize as credenciais de 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 Windows Store.

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 mais 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 o WSL

Para configurar e habilitar o WSL envolve instalar uma distribuição Linux ao lado do Windows 10. Mas de uma forma que permita que os dois sistemas operacionais 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 cumprir; você deve ter um computador Windows 10 de 64 bits Build 18917 ou posterior.

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

Windows build 1809

Habilitando o Recurso do Windows WSL

WSL é fácil de habilitar; nenhum download é necessário. É apenas um único 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

Uma vez concluído, reinicie seu computador e pronto!

Baixando uma Distribuição Linux para WSL

O WSL não instala nenhuma distribuição Linux por si só. Você precisará instalar uma. Assim que o Windows 10 estiver de volta, comece a configurar sua distribuição Linux escolhida.

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

Em seguida, escolha a distribuição de sua preferência e instale-a. Este tutorial usará o Ubuntu 18.04. No momento desta escrita, 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 para WSL
  • Pengwin
  • Alpine WSL

Configurando a Versão do seu WSL

Você pode precisar 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 quais versões do Linux 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 qualquer distribuição que você instalar no futuro como WSL2 executando wsl --set-default-version 2

Iniciando o WSL

Para começar a usar o WSL, abra um terminal PowerShell e digite wsl. Se você configurou o WSL corretamente, você 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 familiarizar com esses switches, você descobrirá 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 todos os flags e argumentos para o WSL executando wsl --help.

Quando terminar, digite exit para voltar ao terminal PowerShell.

Compartilhando Recursos do Windows/Linux via WSL

Uma das melhores partes do WSL é que ele pode compartilhar recursos do Windows e do Linux de forma transparente. Neste momento, 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 Ubuntu Linux do WSL. Seu resultado pode variar se você optar por 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. Esta variável de ambiente aponta para o diretório /home/ubuntu do Linux, tanto do Windows quanto do WSL Ubuntu.

O caminho definido em UBUNTU_HOME pode ser usado para executar scripts que usam recursos entre eles, ou definir uma localização 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 pode ter sido adicionada.

Essa variável de ambiente é útil se você deseja colocar tudo no diretório /home/ubuntu. Mas vamos nos aprofundar um pouco mais em como ela chegou lá e como você pode acessá-la de outras maneiras.

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

Nem toda distribuição WSL garante uma maneira fácil de referenciá-la. É importante que você aprenda como encontrar o sistema de arquivos do Linux de uma forma alternativa.

Uma vez que 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 lugar 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, tome controle da pasta, pois geralmente ela é protegida por padrão.

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

Se você navegar até a pasta de pacotes, 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 abrirá um terminal bash. Este terminal bash iniciará no seu diretório UBUNTU_HOME por padrão.

Você também pode encontrar a raiz dos seus volumes de armazenamento do Windows. Cada uma das suas letras de unidade 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 pelo sistema de arquivos do WSL é bastante simples. Qualquer pessoa que não esteja 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, as coisas vão ficar um pouco mais complicadas.

O WSL2 altera fundamentalmente como tudo funciona nos bastidores 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 WSL do Ubuntu.

Você perceberá que os arquivos VHDX podem ser montados no Windows com a ferramenta Disk Manager. No entanto, os discos virtuais não podem ser montados enquanto a distribuição WSL estiver registrada.

Compartilhando 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 WSL Linux 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, você realmente precisa configurar 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 comutação usado (referência completa abaixo).

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

Opções de Compartilhamento

Você pode disponibilizar variáveis de quatro maneiras diferentes, dependendo da plataforma em que deseja que a variável de ambiente apareça, usando comutações (tabela mostrada abaixo).

  • Sistema de arquivos do Windows para ser disponível apenas a partir dele
  • Sistema de arquivos WSL para ser disponível apenas a partir do WSL
  • Sistema de arquivos 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 é para a tradução de caminho. Como você já deve saber, o Windows possui pastas de perfil de usuário enquanto o Linux possui 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 as comutações /p e /l, o WSL traduzirá esses caminhos de pasta entre plataformas.

Compartilhando e Traduzindo Caminhos do Windows com o Linux

Você pode compartilhar um único caminho ou vários caminhos de uma vez usando os comandos /p e /l.

No prompt de comando do Windows e com uma variável de ambiente do Windows definida chamada DESKTOP, atribua um valor de DESKTOP/p à variável WSLENV. Isso permite acessá-la a partir do WSL Linux. Veja um exemplo abaixo.

Setting variables in Windows and accessing in Linux

O mesmo procedimento pode ser realizado para vários caminhos de uma vez usando o comando /l.

Compartilhando e Traduzindo Caminhos do Linux com o Windows

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

Para obter mais informações 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ísicas 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 de IP diferentes das do Windows 10.

No momento em que este texto foi escrito, os endereços IP para o WSL2 Linux utilizam a Tradução de Endereço de Rede (NAT) para acessar recursos de rede no Windows, embora a Microsoft tenha mencionado que remover o NAT é uma das principais questões a serem resolvidas.

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. Contanto que você não substitua explicitamente esse comportamento em /etc/wsl.conf, a resolução de DNS do cliente continuará funcionando como esperado.

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

Usando PowerShell e Bash juntos

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

PowerShell –> Bash

Como 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 pelo 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 a mesma 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 por meio 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 porque tem acesso à variável PATH do Windows por padrão

Abaixo você pode ver que pode executar ipconfig, que é um comando do Windows, de dentro do WSL e passar essa saída para o comando grep do Linux. Você também pode ver o oposto de chamar o comando do Linux which e passar a saída para o comando do 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 encaminhados para o bash serão achatados como uma string. Da mesma forma, qualquer saída do bash encaminhada para o PowerShell será convertida em um objeto de string.

Você pode contornar o comportamento em parte convertendo ou convertendo explicitamente tipos de objetos 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 converter a data do bash como a classe [datetime] no PowerShell, agora temos um objeto PowerShell válido 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 GUI do Subsistema Windows para Linux com Xfce4

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

Xfce

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

xRDP

Quando tiver um ambiente de desktop Linux configurado, precisará de um serviço que compreenda o protocolo RDP. Neste artigo, focaremos no servidor xRDP. O xRDP é um servidor RDP de código aberto para Linux que permite usar clientes RDP para se conectar ao Linux, assim como se estivesse em 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 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 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ê deve 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ê pode abrir uma conexão RDP para a distribuição Linux que está sendo executada no seu sistema operacional Windows, como mostrado abaixo.

Windows Subsystem for Linux GUI with Xfce4 and xRDP

Dicas e truques

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

Configurando itens de configuração do WSL no boot 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.

  • Automount – Montando unidades do Windows na inicialização
  • Network – Gerar o arquivo resolv.conf ou o arquivo hosts
  • Interop – Habilitar ou desabilitar a interoperabilidade com o Windows

Para mais detalhes sobre o arquivo wsl.conf, confira a página Microsoft Definir configurações de inicialização do WSL.

Desenvolvendo no WSL com o Visual Studio Code (VS Code)

O VS Code aparentemente se integra com tudo, e o WSL não é exceção. A partir do VS Code, você pode configurar um espaço de trabalho em sua distribuição do WSL, mas manipulá-lo completamente com o VS Code no Windows. Você nem precisa ter um terminal em execução!

Para configurar o VS Code no Windows para funcionar com o WSL, você precisará, primeiramente, ter o VS Code para Windows instalado. Certifique-se também de ter a extensão do VS Code Remote – WSL instalada.

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

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

Working with WSL and Visual Studio Code

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

Adicionando o Subsistema do Windows para Linux ao Windows Terminal

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

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

Se 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 definir isso como o diretório inicial para o seu terminal.

Checking the date in PowerShell and Bash

Se você gostaria de um tutorial em vídeo completo sobre como configurar o WSL para funcionar com o Terminal do Windows, 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 que os desenvolvedores Linux possam desenvolver no Windows. Até agora, o WSL tem sido um passo na direção certa.

Parece que o WSL vai ser um componente crucial da nova estratégia amigável ao open source da Microsoft. Se a Microsoft vai competir com a Apple para serem os dispositivos nos quais os desenvolvedores escrevem 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, como:

  • Muito mais leve do que executar VMs Linux locais
  • Removendo a sobrecarga de instalar e gerenciar um hipervisor
  • Não há mais necessidade de discos rígidos particionados
  • Não há mais inicializadores de grub complicados

O WSL apenas é ativado e funciona para que todos possamos programar felizes para sempre.

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