Fun with the Windows Sub-subsistema for Linux

At Build 2016 , Microsoft introduced to the world the Windows Sub-subsistema for Linux (Beta), which enables developers to run native Ubuntu user-mode console binaries through the Bash shell in Windows 10. Se você estiver no programa do Windows Insider, você teve a oportunidade de experimentar este recurso usando as últimas compilações internas de atualização do aniversário do Windows.

desenvolvedores Web são usados para fazer escolhas difíceis sobre quais ferramentas e bibliotecas eles podem usar com base no sistema operacional em que eles estão trabalhando ativamente. O WSL foi projetado e construído pela equipe de Kernel do Windows e entregue em parceria com a Canonical, para ajudar os desenvolvedores do Windows 10 a usar o ecossistema de desenvolvedores ricos Linux e ferramentas ao lado das grandes ferramentas que eles já estão usando no Windows, sem ter que iniciar em outro sistema operacional ou VM. Este é definitivamente um recurso “por desenvolvedores, para Desenvolvedores” Windows 10, especificamente projetado para remover um pouco de fricção do fluxo de trabalho diário dos desenvolvedores.

neste post, eu vou mostrar a vocês algumas das características do WSL que eu pessoalmente acho muito interessante, bem como indicar alguns recursos para ajudá-lo a aprender mais. Primeiro, vou mostrar a integração de comandos básicos como o ssh para trabalhar com servidores e dispositivos Linux. Em segundo lugar, vou demonstrar a capacidade de usar o Bash scripting para automatizar tarefas de uma forma muito natural. Terceiro, vou me divertir um pouco com os grandes compiladores de linha de comando, Outras ferramentas e a compatibilidade *nix oferecida, e jogar um pouco NetHack. Finalmente, vou mostrar a você a capacidade de usar Python existente e outros scripts disponíveis na web.

Windows é o meu sistema operacional primário e ambiente de desenvolvimento, e tem sido desde o Windows 3.0 no meu primeiro 286. No entanto, eu sempre tive servidores Linux ou dispositivos em minha casa. A partir de dispositivos IoT como o Raspberry Pi e dedicado router/gateway dispositivos para servidores Minecraft, eles tendem a coletar nas prateleiras e cantos do meu escritório. Uma coisa que eu sempre preciso fazer é gerenciar e configurar esses computadores Linux facilmente a partir da minha estação de trabalho principal.

gerindo servidores e dispositivos

i atualmente executa um servidor Ubuntu Minecraft sem cabeça a partir da minha casa. Foi o meu presente de Natal para o meu filho de 10 anos no ano passado, mas acabou por ser o meu brinquedo tanto quanto o dele (ok, mais o meu brinquedo). Eu costumava usar alguns aplicativos de clientes para geri-lo a partir do meu PC primário Windows 10, mas agora eu apenas Uso a linha de comando ssh de dentro da Bash no Windows 10. Usando aplicativos como PuTTY e Tera Termo são bons, é claro, como é usar as grandes ferramentas que vêm com Cygwin, mas eu queria uma experiência verdadeiramente nativa e natural que acabou de fluir bem. Cygwin sempre me pareceu pedir batatas fritas numa pizzaria. Foi bom, mas a execução não me pareceu adequada para o ambiente.

I have the public / private key pairs set up using ssh-keygen and ssh-copy-id from the WSL, so to SSH, I simply type:

$ ssh <username><servidor>

eu criei um alias o que torna mais rápido. Este é um padrão do Linux/Bash recurso:

$ alias mc=’ssh <usuário><servidor>’

Agora, para chegar ao servidor de Minecraft eu simplesmente digite “mc” no prompt Bash no Windows 10.

Esta mesma abordagem funciona, é claro, com qualquer Linux baseado em web ou servidores de banco de dados ou até mesmo Raspberry Pi e similares IoT dispositivos que você pode estar usando, como parte de sua solução.

ser capaz de limpar o shell de um prompt de console é apenas uma conveniência e uma preferência. No entanto, uma vez que você se acostumar a trabalhar diretamente no shell, em um ambiente completo que inclui agrafos como apt, node, Ruby, Python, e outros, você abre todos os tipos de possibilidades de automação.

programação remota

digamos que você tem um monte de dispositivos ou Servidores Linux, e você quer executar um comando remoto neles. Assumindo que já configurou os seus pares de chaves público/privado, poderá simplesmente executar comandos SSH remotos da Bash.

Por exemplo, para ver quando a última hora de reinicialização estava num servidor remoto, você iria escrever isto:

$ ssh <usuário><servidor> ‘última -x|grep reboot’

isto é seguro conchas para o servidor e executa o último comando-x, e procura as linhas que contêm a palavra “reboot.”When I run it against my Ubuntu Minecraft server, I get this result:

reboot system boot 4.4.0-28-generic Thu Jul 7 08: 14 still running

that’s a single server. Se você tem uma lista de Servidores, você pode automatizar essa parte também. Criei um ficheiro chamado servidores.txt na minha pasta pessoal na WSL. Ele contém um monte de nomes de servidor/dispositivo Linux — um por linha. Eu então li esse arquivo a partir de um script que eu criei em meu diretório home em WSL.

Depois de anos trabalhando com dispositivos como o Raspberry Pi, eu sou um nano tipo de cara (em VMS eu era um LSEdit pessoa), então isto é o que o script parecido no meu favorito de console do editor:

Você pode, claro, usar o vim ou emacs ou qualquer outro editor que funciona no Ubuntu a sessão de console.

a linguagem utilizada é o script Bash (também chamado de script Bash shell). Para executar o programa, eu simplesmente digito:

$ ./foreachserver.sh ‘Last-x|grep reboot’

E ele irá iterar sobre cada servidor / dispositivo no arquivo e executar esse comando remotamente sobre ssh. Este é um exemplo muito simples, claro, mas você pode estender para redirecionar scripts locais ou outros comandos úteis. A linguagem de scripting Bash é suficientemente rica para que você possa realizar a maioria das tarefas de administração remota usando-a. Você também pode estendê-lo com outras aplicações que você baixar para o WSL ou os computadores remotos.

E se quiser usar os ficheiros e recursos locais do Windows com o seu fluxo de trabalho com outros computadores Linux? Ou, e se você não usar o Linux de todo? Bash é capaz de trabalhar com arquivos e recursos locais do Windows, ou é um ambiente completamente isolado?

trabalhar com ficheiros Windows

a WSL tem acesso ao sistema de ficheiros do seu PC através de /mnt/<drive letter>/ directories (ou mount points). Por exemplo, os seus diretórios de raiz C: E D: no Windows estariam disponíveis através de /mnt/c/ e /mnt/d/ respectivamente no WSL. Isso pode ser útil quando você quiser incorporar seus arquivos de Projeto Windows, downloads ou outros arquivos em um fluxo de trabalho baseado em Linux/Bash.

Esses mapa para o SSD e o acionamento mecânico eu tenho no PC:

Estas são lógicas guarnições, para que eles não aparecem quando você usar os comandos como o monte no shell. Mas funcionam como se espera. Por exemplo, de dentro do Windows, eu coloquei um arquivo de texto chamado test.txt na raiz do meu disco C. Eu posso acessá-lo a partir de WSL como este:

Durante a Turnê, queríamos ter certeza de que as demonstrações todo trabalhado sem acesso à internet (você nunca sabe que tipo de local de rede como vai ser). Assim, para garantir que a demo Bash / WSL funcionaria para a parte Git, e para demonstrar o acesso aos arquivos do Windows no PC local, eu configurei um repo local no C:gitNetHack no Windows PC. Para clonar isso dentro do WSL, executei o seguinte:

$ git –clone file://mnt/c/git/NetHack

que a linha de comandos disse ao git para usar o ficheiro:/ /protocol e clonar o repo localizado em/mnt/c/git / NetHack. Você pode acessar todos os seus arquivos Windows de uma forma semelhante.

Aviso: tal como acontece com qualquer consola, pode modificar/apagar ficheiros no seu sistema de ficheiros Windows da Bash se não tiver cuidado. Por exemplo, você pode fazer algo como o abaixo e acabar limpando um bom pedaço de sua instalação do Windows, assumindo que a conta do Windows que você está executando tem direitos para fazê-lo:

$ rm -rf /mnt/c/ <forte></strong>

eu trazer isso porque o Linux comandos são novos para muitos de nós, enquanto que o Windows comandos de console não são.

a magia que faz com que a integração deste sistema de arquivos aconteça é chamada DrvFs. Se você quiser saber mais sobre o sistema de arquivos e como ele funciona no WSL, a equipe do WSL montou um grande post no blog com todos os detalhes.

claro, o acesso ao sistema de arquivos é apenas parte da história. Muitas tarefas de desenvolvimento envolvem o acesso a recursos remotos através de HTTP ou outros protocolos de rede.

fazer pedidos HTTP

é muitas vezes útil fazer um descanso ou outra chamada HTTP (ou FTP) a partir de um programa ou linha de comando, em vez de um programa compilado ou página web. Assim como a maioria dos distros Linux, WSL inclui utilitários padrão como curl e wget para fazer HTTP e outras chamadas de rede. Por exemplo, aqui está o resto chamada para o GitHub para obter as informações do meu perfil, usando curl:

pode combinar isto com a programação Bash para criar clientes de teste rápido para as APIs de descanso, ou utilitários para contactar páginas web em servidores e relatar o estado de volta. Ele também é ótimo apenas para baixar um arquivo da web, você pode simplesmente redirecionar a saída para um arquivo ao invés de exibi-lo na tela:

$ curl-i https://api.github.com/users/Psychlist1972> pete.json

também sou um usuário PowerShell, e até mesmo criaram algumas extensões interessantes para usar o Windows 10 MIDI em PowerShell e também para corrigir alguma corrupção de arquivos que estava acontecendo com os usuários de determinado hardware de gravação de som. Como um desenvolvedor de longa data. net e fã, eu vou continuar a usar e estender PowerShell como faz sentido para os meus projetos. Mas o PowerShell não é o ambiente certo para executar todos aqueles utilitários de código aberto focados no Bash e Linux e exemplos na web de hoje. Eu quero usar a maneira mais fácil e livre de fricção para realizar qualquer tarefa, e às vezes, isso significa fazê-lo em Bash.

eu mal arranhei a superfície aqui na Bash, bash scripting, e as tarefas que você pode realizar a partir da shell. Até agora, tenho falado de trabalho útil, mas acessório ao desenvolvimento. E sobre fazer o desenvolvimento real e Compilação de dentro do WSL? Eu demonstrei isso como parte da turnê Build.

Bash at the Build Tour – NetHack

no início deste verão, os palestrantes da Microsoft foram ao redor do mundo demonstrando algumas das novas funcionalidades do cool developer no Windows e na Microsoft Cloud. Como parte disso, queríamos demonstrar o WSL de uma forma divertida, mas também de uma forma com a qual os desenvolvedores se relacionassem.

eu pessoalmente queria mostrar usando git e algumas ferramentas tradicionais de desenvolvimento de consoles. Quando eu escrevi a demo Bash, eu incluí o básico (“Hello World” em Python e Ruby), mas queria mostrar algo um pouco mais fora do caminho batido.I thought back to my time in college, when we bounced back and forth between Unix (DEC Ultrix and SunOS) and VAX/VMS. Na época, o Unix era quase exclusivamente um primeiro ambiente de linha de comando. Na minha escola, a maioria dos usuários do X no punhado de estações de trabalho gráficos acabou de abrir várias sessões de terminal em diferentes janelas, mas com papel de parede de fase super-legal lua no fundo. A maioria dos alunos usou terminais VT-220 para suas sessões (a escola não estava longe de Boston, então tínhamos um monte de equipamentos DEC).

Na época, havia dois grandes jogos que todos os cursos de ciência da computação estavam jogando: MUDs (lpMUD e o novo, no momento DikuMUD, principalmente) e NetHack. NetHack e outros Roguelikes têm sido considerados alguns dos jogos mais influentes da história, sendo os precursores de muitos dungeon crawl e RPGs que gostamos hoje.

NetHack tem uma longa história e hoje contém mais de cem mil linhas de décadas de idade *código nix, bem como adições modernas. O jogo em si usa maldições (ou suas substituições) para interação terminal, requer lex e yacc (ou flex e bison) e cc (ou gcc), e uma série de outras ferramentas de desenvolvimento para construir.

é escrito em C e inclui uma série de utilitários de configuração fortemente programados escritos para o shell Bourne. Achei que seria um bom e divertido teste para exercitar as capacidades de desenvolvimento do WSL e Bash no Windows 10. Devido ao uso de maldições (libncurses em Linux e WSL), também ajudaria a demonstrar as capacidades da emulação de terminal construída na janela do Windows 10 console.no passado, construir NetHack a partir da fonte levou uma eternidade no nosso servidor de Ultrix fatiado no tempo. Agora demora um minuto no meu PC e está tudo feito. Adoro o progresso. Existem formas fáceis e difíceis de configurar e compilar NetHack no Linux ou WSL. Para te poupar tempo, vou guiar-te pela abordagem fácil.

pré-requisitos

primeiro, actualize o seu ambiente WSL para se certificar de que está a apontar para o catálogo mais recente de software e também tenha a instalação base actualizada. Geralmente é uma boa idéia fazer isso antes de instalar novos pacotes.

$ sudo apt update
$ sudo apt upgrade

então, instale as ferramentas essenciais de desenvolvimento. A maneira mais fácil de fazer isso é usar o pacote build-essential. Isso inclui quase todos os programas de console que um desenvolvedor Linux precisaria para criar aplicativos em C/C++.

$ sudo apt install build-essential

isto levará alguns minutos. Se você quiser ser mais cirúrgico, você pode instalar separadamente gcc, gdb, make, flex, bison e as outras ferramentas chamadas nos docs NetHack. Mas se você é um desenvolvedor, você provavelmente vai querer as outras ferramentas em algum momento. O pacote build-essential tira a adivinhação da instalação do conjunto de ferramentas.

A seguir, instalar o git. Como você pode imaginar, é tão fácil como:

$ sudo apt instalar git

tal como no Linux, você pode adicionar um GIT PPA para obter uma versão mais recente, mas este vai fazer pelo que estamos fazendo aqui.

E, finalmente, queremos ter maldições (ncurses, na verdade) instaladas para a interacção do ecrã da consola:

$ sudo apt instalar libncurses-dev

Depois de ter completado esses passos, está pronto para começar a construir NetHack.

edifício NetHack

o repo Oficial NetHack está em GitHub. Primeiro, pegamos nisso e colocamo-lo numa subpasta da nossa pasta pessoal.

$ cd ~
$ git clone http://github.com/NetHack/NetHack

Devido a NetHack oferece suporte para vários sistemas operacionais, você precisará fazer algumas configurações básicas para dizer a ele que estamos usando Linux na linha de comando e substituindo livre e ferramentas de código aberto para Unix clássicos, como o gcc para cc.

Como eu tinha mencionado, há uma série de maneiras de fazer isso. Alguém foi atencioso o suficiente para encapsular grande parte da configuração em um arquivo de dicas. Confie em mim Aqui, usar o arquivo de dicas vai lhe poupar horas de dor de cabeça em Configuração versus os passos descritos no repo GitHub. Não é imediatamente óbvio como usar as dicas, se você olhar para os arquivos LEIAME ou outra documentação, então aqui vai:

$ cd NetHack/sys/unix
$ ./setup.sh dicas/linux

Que irá definir o makefile para usar as ferramentas certas, as bibliotecas e os caminhos para Linux. Os scripts de configuração são scripts shell não-triviais que fazem muita configuração; estou feliz em relatar que eles funcionam perfeitamente em WSL. Se você está curioso sobre shell scripting, certifique-se de abri-los em seu editor favorito.

então, a compilação final:

$ cd ~/NetHack
$ make all

Após a compilação, você vai querer criar a instalação. Isto trata-se apenas de copiar o executável para uma localização conhecida:

$ make install

que irá deixá-lo com uma pasta chamada ~/nh. Nethack está localizado no diretório ~/nh/install / games e é simplesmente chamado nethack. Para executá-lo, navegue para essa pasta (ou digite a localização completa) e digite:

$ cd ~/nh/install/games
$ nethack

Uma vez que fizer isso, o ecrã irá limpar e ser-lhe-á pedido para começar a jogar NetHack. Note que tudo o que foi feito aqui é exatamente como seria feito em uma instalação do vanilla Ubuntu Linux; nada específico do Windows foi necessário.

jogando NetHack

dadas as limitações de um jogo de console e a complexidade de NetHack, pode levar um pouco para entrar nele. Dizer que é um pouco enigmático no início seria um eufemismo, mas nunca conheci um desenvolvedor que se esquivasse de um bom desafio.

As chaves de navegação são as mesmas que as usadas em VI (M), por isso HJKL para esquerda, para baixo, para cima e para direita, respectivamente. Para sair, você pode encontrar as escadas acima do nível superior e usá-los, ou pressione Control-C para forçar a saída do jogo.

em NetHack, você é o símbolo@. Cada nível é composto por quartos, corredores, portas e escadas para cima e para baixo. Monstros, tesouros e itens são representados como vários personagens ASCII que você vai se familiarizar com como você jogar. Como é normal com Roguelikes, não há salvação e você só tem uma vida. Se você morrer e jogar novamente, o calabouço é gerado aleatoriamente e os itens ficam baralhados.

O ponto de NetHack é sobreviver às masmorras, recolher ouro e itens e matar o maior número de monstros possível. Há objetivos muito além disso, mas você vai precisar Jogar por um tempo (ou ler para cima) para descobri-los. As regras seguem vagamente Dungeons & Dragons rules for weapons, skills, etc.aqui está uma imagem de NetHack com três quartos e dois corredores visíveis. As escadas acima estão no quarto superior esquerdo, e eu estou atualmente no quarto superior direito, junto com alguns tesouros e outros itens.

Se você não precisa de cor na sua versão, crie um arquivo chamado ~/.nethackrc and put the following in it:

OPTIONS=color: true, dark_room: true, menucolor: true

Aside: Se os gráficos de personagens ASCII não são a sua coisa, mas você gosta do conceito, procurar “roguelike” na Loja Microsoft e desfrutar dos jogos mais visuais neste gênero popular.

claro, NetHack é uma base de código antiga, mais querida para aqueles de nós de uma certa idade. No entanto, a sua construção exerce um número significativo de importantes ferramentas de desenvolvimento e características de sistemas operacionais *nix, e também a emulação terminal. É ótimo ver que tudo isso, desde gcc, gdb, make, bison, e flex para git mais moderno, funciona na WSL hoje.

Se você gostaria de ver a demo acima como feito na Build Tour, assista a esta introdução da Build Tour Canada. A demonstração da WSL começa por volta das 6: 20. (E sim, é o sistema Windows Para Linux, apesar do que eu disse naquele vídeo.)

https://channel9.msdn.com/Events/Build/Build-Tour-2016-Toronto/Keynote

espero que goste da sua excursão às masmorras de NetHack!

C E C++ são ótimos, assim como todas essas ferramentas clássicas de desenvolvimento. Você pode até fazer muito com o Plain Bash scripting. Mas muitas tarefas de desenvolvimento envolvem linguagens de script como Python.

Python

pode encontrar exemplos de programas Python por toda a web, o que implica que o Python é popular e útil para muitos programadores. A maioria desses exemplos, é claro, assume que você está executando Linux. No passado, isso significava executá-los em uma instalação Linux ou em outra máquina, uma opção VM ou boot, ou fazer quaisquer alterações necessárias para executá-los usando as distribuições Windows do Python.

estes não são problemas intransponíveis por qualquer alongamento, mas no dia-a-dia de um desenvolvedor, pequenos pedaços de fricção como este somam-se. Com o WSL, você sempre tem um subsistema compatível com Python e shell disponível para você, sem ter que sair de sua zona.

Para instalar a última versão de desenvolvimento do Python e python package installer “pip,” executar o seguinte no prompt do shell Bash:

$ sudo apt install python-pip python-dev
$ sudo pip install –atualização pip

Agora que o Python está instalado, eu queria mostrar como você pode pegar uma típica Linux, Python exemplo de um site e trabalhar com ele diretamente. Fui ao site de receitas Activestate Python e escolhi o exemplo de topo Python. Está bem, menti. O de cima é para imprimir nomes de inteiros, e isso não soou super emocionante, então eu escolhi o segundo: Tetris. Pensei que todos vissem Python prático suficiente todos os dias, por isso vou jogar outro jogo.

eu abri o nano, copiou a 275 linhas de código Python direito da página em meu navegador no Windows, colou-los em nano em minha WSL janela de console, salvo como tetris.py e, em seguida, simplesmente executadas:

$ python tetris.py

que limpou imediatamente a tela e trouxe uma aplicação básica de Tetris. Como foi o caso de NetHack, você usa as mesmas chaves de movimento VI-padrão. (Nos dias antes das teclas WASD e mouse para o movimento, a mão direita estava nas teclas hjkl do teclado.)

Como eu mencionei, é claro que você pode executar o Python no Windows, sem WSL. No entanto, para utilitários rápidos e amostras, ser capaz de executar um exemplo Linux Python sem mudanças simplesmente colando em algum código de uma fonte conhecida é um grande impulso de produtividade para os desenvolvedores.a questão é essa. Não se trata de substituir outras ferramentas nativas do Windows, como Python, PowerShell, C# e muito mais. Trata-se de remover o atrito quando você só precisa fazer as coisas de forma rápida e eficiente em um fluxo de trabalho de desenvolvimento moderno.

entre Bash, Python e todas as ferramentas nativas de desenvolvimento Linux de linha de comando, WSL tem minhas necessidades de fluxo de trabalho Linux Cobertas. Não é um servidor Linux ou mesmo um cliente Linux completo. Em vez disso, é exatamente o que eu preciso para reduzir algum atrito dia-a-dia e tornar o desenvolvimento nas janelas ainda mais produtivo e agradável.a reiniciar o seu ambiente WSL

Sinta-se à vontade para experimentar. Se você danificar a sua instalação WSL, é fácil o suficiente para reinstalar. Certifique-se de manter cópias de qualquer coisa importante.

C: > lxrun.exe / desinstall / full
C:> lxrun.exe/install

como está a usar o Bash e o WSL?

esperamos ter WSL, e Bash em particular, no Windows 10 ajuda você a ser um pouco mais eficiente e remove um pouco de fricção de suas tarefas de desenvolvimento do dia-a-dia.como está a usar o WSL no Windows 10? Gostavas de usá-lo?

a equipe está fazendo um monte de trabalho para garantir que WSL é uma grande ferramenta de console para desenvolvedores. Se você tem feedback ou se deparar com problemas, recomendamos verificar a página de questões do GitHub, bem como o Feedback do UserVoice e o site de votação. Gostaríamos muito de ter notícias suas.

Referências adicionais e Leitura Adicional

Linux shell scripting é um tópico enorme e há muitos grandes tutoriais na web. Se você ainda não está familiarizado com ele e quer aprender mais, a maioria dos tutoriais Bash irão funcionar para você. Aqui está um para começar.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *