På Build 2016 , microsoft introdusert til verden Windows Subsystem For Linux (Beta), som gjør det mulig for utviklere å kjøre innfødte Ubuntu brukermodus konsoll binærfiler gjennom Bash shell I Windows 10. Hvis Du er I Windows Insider-programmet, har du hatt muligheten til å prøve denne funksjonen ved hjelp Av de nyeste Windows Anniversary Update Insider-Byggene.webutviklere er vant til å gjøre vanskelige valg på hvilke verktøy og biblioteker de kan bruke basert på operativsystemet de jobber aktivt med. WSL ble designet Og bygget Av Windows – Kjerneteamet og levert i samarbeid med Canonical, for å hjelpe Windows 10-utviklere å bruke det rike Linux-utviklerens økosystem og verktøy sammen med de flotte verktøyene de allerede bruker I Windows, uten å måtte starte opp i et annet operativsystem eller VM. Dette er definitivt En «av utviklere, for utviklere» Windows 10-funksjon, spesielt designet for å fjerne litt friksjon fra utviklernes daglige arbeidsflyt.
I dette innlegget skal jeg vise deg noen av funksjonene I WSL som jeg personlig finner veldig interessant, samt peke deg på noen ressurser for å hjelpe deg med å lære mer. Først vil jeg vise integrasjonen av stiftkommandoer som ssh for å jobbe Med Linux-servere og enheter. For det andre vil jeg demonstrere evnen til å bruke Bash scripting for å automatisere oppgaver på en veldig naturlig måte. For det tredje vil jeg ha det litt gøy med de store kommandolinjekompilatorene, andre verktøy og *nix-kompatibiliteten som tilbys, og spill Litt NetHack. Til slutt vil jeg vise deg muligheten til å bruke Eksisterende Python og andre skript tilgjengelig på nettet.Windows Er mitt primære operativsystem og utviklingsmiljø, og har vært Siden Windows 3.0 på min første 286. Likevel har Jeg alltid hatt Linux-servere eller enheter som sparker rundt mitt sted. Fra Iot-enheter som Raspberry Pi og dedikerte router/gateway-enheter Til Minecraft-servere, har de en tendens til å samle seg på hyllene og hjørnene på kontoret mitt. En ting jeg alltid trenger å gjøre er å administrere og konfigurere Disse Linux-datamaskinene enkelt fra min hovedarbeidsstasjon.
Administrere Servere og Enheter
jeg kjører for tiden en hodeløs Ubuntu Minecraft-server fra huset mitt. Det var Min Julegave til min 10 år gamle sønn det siste året, men det har vist seg å være min leke så mye som hans (ok, mer min leke). Jeg pleide å bruke noen få klientapper til å administrere den fra min primære Windows 10-PC, men nå bruker jeg bare kommandolinje ssh fra Bash På Windows 10. Bruke apps som PuTTY Og Tera Term er greit selvfølgelig, som bruker de store verktøyene som følger Med Cygwin, men jeg ønsket en virkelig innfødt og naturlig opplevelse som bare strømmet godt. Cygwin alltid føltes for meg litt som bestiller wok på en pizza sted. Det var greit, men utførelsen føltes bare ikke riktig for miljøet.jeg har de offentlige/private nøkkelparene satt opp ved hjelp av ssh-keygen og ssh-copy-id FRA WSL, så til ssh skriver jeg bare:
$ ssh <brukernavn ><server>
jeg opprettet et alias som gjør det raskere. Dette er en Standard Linux/Bash-funksjon:
$ alias mc=’ssh <bruker><server>’
nå, For å Komme til minecraft-serveren, skriver jeg bare «mc» på bash-spørringen i windows 10.
Denne samme tilnærmingen fungerer selvfølgelig med Alle Linux-baserte web-eller databaseservere eller Til Og Med Raspberry Pi og lignende iot-enheter du kan bruke som en del av løsningen din.
Å kunne sikre skallet rent fra en konsollprompt er bare en bekvemmelighet og en preferanse. Men når du blir vant til å jobbe direkte i skallet, i et fullt miljø som inkluderer stifter som apt, node, Ruby, Python og andre, åpner du opp alle slags muligheter for automatisering.
Remote Scripting
La oss si at du har En hel haug Med Linux-enheter eller servere, og du vil utføre en ekstern kommando på dem. Forutsatt at du allerede har satt opp dine offentlige / private nøkkelpar, kan du bare utføre eksterne ssh-kommandoer fra Bash.
hvis du for eksempel vil se når siste omstart var på en ekstern server, skriver du dette:
$ ssh <bruker><server> ‘last-x|grep reboot’
som sikrer skjellene til server og utfører kommandoen last-x, og søker etter linjene som inneholder ordet «reboot.»Når jeg kjører den mot Min Ubuntu Minecraft server, får jeg dette resultatet:
reboot system boot 4.4.0-28-generic To Jul 7 08: 14 kjører fortsatt
Det er en enkelt server. Hvis du har en liste over servere, kan du automatisere den delen også. Jeg har opprettet en fil som heter servere.txt i min hjemmekatalog PÅ WSL. Den inneholder En haug Med Linux server / enhetsnavn-en per linje. Jeg leste den filen fra et skript jeg opprettet i hjemmekatalogen MIN PÅ WSL.
etter år med å jobbe med enheter som Raspberry Pi, jeg er en nano slags fyr (PÅ VM jeg Var En lsedit person), så dette er hva skriptet ser ut i min favoritt konsoll editor:
du kan selvfølgelig bruke Vim eller emacs eller annen redaktør som fungerer i EN UBUNTU-konsolløkt.
Språket som brukes Er Bash script (Også kalt Bash shell script). For å utføre skriptet skriver jeg bare:
$. / foreachserver.sh ‘last-x / grep reboot’
og det vil iterere over hver server / enhet i filen og utføre den kommandoen eksternt over ssh. Dette er et veldig enkelt eksempel, selvfølgelig, men du kan utvide til å omdirigere i lokale skript eller andre nyttige kommandoer. Bash skriptspråk er rik nok slik at du kan utføre de fleste eksterne administrasjonsoppgaver ved hjelp av den. Du kan også utvide den med andre programmer du laster NED TIL WSL eller eksterne datamaskiner.
Hva om du vil bruke lokale Windows-filer og ressurser med arbeidsflyten din med Andre Linux-datamaskiner? Eller hva om Du ikke bruker Linux i Det hele tatt? Er Bash i stand til å jobbe med lokale Windows-filer og ressurser, eller er Det et helt isolert miljø?
Arbeide Med Windows-filer
WSL har tilgang til PC-ens filsystem gjennom / mnt / < stasjonsbokstav > / kataloger (eller monteringspunkter). For eksempel vil C: og d: root-katalogene i Windows være tilgjengelige gjennom henholdsvis /mnt/c/ og /mnt/d/ i WSL. Dette kan være nyttig når Du vil innlemme Windows-prosjektfiler, nedlastinger eller andre filer i En Linux / Bash – basert arbeidsflyt.
de kart TIL SSD og mekanisk stasjon jeg har PÅ PC:
under Byggeturen ønsket vi å sørge for at demoene alle fungerte uten internett-tilgang (du vet aldri hvilken arena nettverk vil være). Så for Å sikre At Bash / WSL-demoen ville fungere For Git-delen, og for å demonstrere Tilgang Til Windows-filer på den lokale PCEN, satte jeg opp en lokal repo På c:gitNetHack på Windows-PCEN. For å klone det i WSL, utførte jeg følgende:
$ git –clone file: / / / mnt / c / git / NetHack
den kommandolinjen fortalte git å bruke filen: / / protocol og å klone repo som ligger i / mnt/c / git / NetHack. Du kan få tilgang til Alle Windows-filer på en lignende måte.Advarsel: Som med alle konsoller, kan du endre / slette filer I windows-filsystemet Fra Bash hvis Du ikke er forsiktig. For eksempel kan du gjøre noe som nedenfor og ende opp med å tørke ut En god Del Av Windows-installasjonen, forutsatt At Windows-kontoen du kjører under, har rettigheter til å gjøre det:
$ rm-rf /mnt/c/ <sterk></sterk>
Jeg tar opp Dette Fordi Linux kommandoer er nye for mange av oss, mens windows-konsollkommandoer ikke er.
magien som gjør denne filsystemintegrasjonen skje kalles DrvFs. HVIS DU vil lære mer om filsystemet og hvordan DET fungerer I WSL, setter wsl-teamet sammen et flott blogginnlegg med alle detaljer.
selvfølgelig er filsystemtilgang bare en del av historien. Mange utviklingsoppgaver innebærer tilgang til eksterne ressurser VIA HTTP eller andre nettverksprotokoller.
HTTP-Forespørsler
DET er ofte nyttig å foreta ET REST-eller ANNET HTTP – (ELLER FTP -) anrop fra et skript eller en kommandolinje i stedet for fra et kompilert program eller en nettside. AKKURAT som De Fleste Linux distros, WSL inkluderer standard verktøy som curl og wget for Å LAGE HTTP og andre nettverk samtaler. For EKSEMPEL, HER ER RESTEN ringe Til GitHub å få min profilinformasjon, bruke curl:
du kan kombinere Dette Med Bash-skripting for å opprette raske testklienter FOR REST-Api-Er, eller verktøy for å pinge nettsider på servere og rapportere tilbake status. Det er også flott å bare laste ned en fil fra nettet; du kan ganske enkelt omdirigere utdataene til en fil i stedet for å se den på skjermen:
$ curl-i https://api.github.com/users/Psychlist1972> pete.json
jeg er Også En PowerShell-bruker, og har til og med opprettet noen interessante utvidelser for Å bruke Windows 10 MIDI I PowerShell, og også å fikse noen filkorrupsjon som skjedde med brukere av visse lydopptaksmaskinvare. NET utvikler OG fan, vil jeg fortsette å bruke Og utvide PowerShell som det er fornuftig for mine prosjekter. Men PowerShell er ikke det rette miljøet for å kjøre alle De Bash-og Linux-fokuserte open source-verktøyene og eksemplene ute på nettet i dag. Jeg vil bruke den enkleste og mest friksjonsfrie måten å utføre en oppgave på, og noen ganger betyr det å gjøre Det I Bash.
jeg har knapt riper overflaten her på Bash, Bash scripting, Og oppgavene du kan oppnå fra skallet. Så langt har jeg snakket om verktøyarbeid som er nyttig, men hjelpemiddel til utvikling. Hva med å gjøre faktisk utvikling og kompilering fra WSL? Jeg viste det som en Del Av Build Tour.
Bash På Build Tour-NetHack
tidligere i sommer gikk høyttalere Fra Microsoft rundt i verden og demonstrerte noen av de kule nye utviklerfunksjonene I Windows og Microsoft Cloud. Som en del av DET ønsket vi å demonstrere WSL på en morsom måte, men også på en måte som utviklere ville forholde seg til.
jeg personlig ønsket å vise ved hjelp av git og noen tradisjonelle konsoll utviklingsverktøy. Da Jeg skrev Bash-demoen, inkluderte jeg det grunnleggende («Hello World» I Python og Ruby), men ønsket å vise noe litt mer utenfor banket banen.jeg tenkte tilbake til min tid på college, da vi sprang frem og tilbake Mellom Unix (DEC Ultrix Og SunOS) og VAX/VMS. På Den Tiden Var Unix nesten utelukkende et kommandolinjemiljø. På skolen min, De Fleste x-brukere på håndfull grafikk arbeidsstasjoner nettopp åpnet flere terminal økter i forskjellige vinduer, men med super-kul månefase tapet i bakgrunnen. De fleste elevene brukte vt-220 terminaler for sine økter (skolen var ikke langt fra Boston, så vi hadde mye DEC-utstyr).på den tiden var det to store spill som alle datavitenskapene spilte: MUDs( lpMUD og den splitter nye På Den Tiden DikuMUD, primært) og NetHack. NetHack og Andre Roguelikes har vært ansett for å være noen av de mest innflytelsesrike spillene i historien, å være forløperne til de mange dungeon crawl og rollespill vi liker i dag.NetHack Har en lang historie og inneholder i dag mer enn hundre tusen linjer med tiår gammel * nix-kode ,samt moderne tillegg. Spillet selv bruker forbannelser (eller dets erstatninger) for terminal interaksjon, krever lex og yacc (eller flex og bison) og cc (eller gcc), og en rekke andre utviklerverktøy å bygge.
Den er skrevet I C og inneholder en rekke tungt skriptede konfigurasjonsverktøy skrevet for Bourne-skallet. Jeg skjønte det ville være en god og morsom test for å utøve utvikleregenskapene TIL WSL og Bash På Windows 10. På grunn av bruken av forbannelser (libncurses På Linux og WSL), vil det også bidra til å demonstrere evnen til terminalemuleringen som er innebygd I windows 10-konsollvinduet.
Tilbake i dag, bygge NetHack fra source tok alltid på vår tids skiver Ultrix server. Nå tar DET et minutt på PCEN min, og det er alt gjort. Jeg elsker fremgang. Det er enkle måter og harde måter å konfigurere Og kompilere NetHack På Linux eller WSL. For å spare deg litt tid, vil jeg gå deg gjennom den enkle tilnærmingen.
Forutsetninger
først må du oppdatere wsl-miljøet for å sikre at DU peker på den nyeste programvarekatalogen og også ha baseinstallasjonen oppdatert. Det er generelt en god ide å gjøre dette før du installerer nye pakker.
$ sudo apt update
$ sudo apt upgrade
installer deretter de essensielle utviklerverktøyene. Den enkleste måten å gjøre dette på er å bruke build-essential-pakken. Dette inkluderer nesten alle konsollprogrammer En Linux-utvikler trenger for å bygge apper I C / C++.
$ sudo apt install build-essential
Dette vil ta noen minutter. Hvis du vil være mer kirurgisk, kan du separat installere gcc, gdb, make, flex, bison og de andre verktøyene som kreves i NetHack docs. Men hvis du er en utvikler, vil du sannsynligvis ha de andre verktøyene på et tidspunkt. Build-essential pakken tar gjetting ut av verktøysett installasjon.
neste, installer git. Som Du kan forestille deg, er det så enkelt som:$ sudo apt install git
Akkurat som Med Linux, kan du legge til en git PPA for å få en nyere versjon, men denne vil gjøre for det vi gjør her.
og til slutt vil vi ha forbannelser (ncurses, faktisk) installert for konsollskjerminteraksjonen:
$ sudo apt install libncurses-dev
Når du har fullført disse trinnene, er du klar til å bygge NetHack.
Bygge NetHack
den offisielle NetHack repo er På GitHub. Først tar vi det og legger det i en undermappe utenfor hjemmekatalogen vår.
$ cd ~
$ git klone http://github.com/NetHack/NetHack
Fordi NetHack støtter så mange forskjellige operativsystemer, må du gjøre noen grunnleggende konfigurasjon for å fortelle det at vi bruker linux på kommandolinjen og erstatte gratis og åpen kildekode verktøy for unix klassikere som gcc for cc.
som jeg hadde nevnt, er det flere måter å gjøre dette på. Noen var gjennomtenkt nok til å kapsle mye av konfigurasjonen i en hintsfil. Stol på meg her, ved hjelp av hintsfilen, sparer du timer med hodepine i konfigurasjon i forhold til trinnene som er beskrevet på GitHub repo. Det er ikke umiddelbart åpenbart hvordan du bruker hintene hvis DU ser PÅ README-filene eller annen dokumentasjon, så her går du: $ cd NetHack/sys / unix$ ./setup.sh hint/linux
Som vil sette opp makefile å bruke de riktige verktøyene, biblioteker og baner For Linux. Oppsettskriptene er ikke-trivielle skallskript som gjør mye konfigurasjon; jeg er glad for å rapportere at de fungerer perfekt I WSL. Hvis du er nysgjerrig på shell scripting, sørg for å knekke dem åpne i din favoritt editor.
deretter vil den endelige bygningen:
$ cd ~ / NetHack
$ make all
Etter byggingen vil du opprette installasjonen. Dette handler egentlig bare om å kopiere kjørbar til et kjent sted:
$ make install
Som vil forlate deg med en mappe som heter ~/nh. Nethack ligger i katalogen ~ / nh / install / games og kalles ganske enkelt nethack. For å kjøre den, naviger til den katalogen (eller skriv inn hele banen) og skriv:
$ cd ~/nh/install/games
$ nethack
når du gjør det, vil skjermen tømme og du blir bedt om å begynne å spille NetHack. Merk at alt gjort her er akkurat som det ville bli gjort på en vanilje Ubuntu Linux-installasjon; ingenting Windows-spesifikt var nødvendig.
Spille NetHack
Gitt begrensningene i et konsollspill og kompleksiteten Til NetHack, kan Det ta litt å komme inn i det. Å si at det er litt kryptisk i begynnelsen, ville være en underdrivelse, men jeg har aldri møtt en utvikler som skvatt bort fra en god utfordring.
navigasjonstastene er de samme som de som brukes I VI (M), SÅ HJKL for Henholdsvis Venstre, Ned, Opp og høyre. For å avslutte, kan du finne trappen opp på øverste nivå og bruke dem, eller trykk Control-C for å tvinge avslutte spillet.
I NetHack er du @ – symbolet. Hvert nivå består av rom, korridorer, dører og begge trapper opp og ned. Monstre, skatter og gjenstander er representert som FORSKJELLIGE ASCII-tegn som du vil bli kjent med når du spiller. Som er normen Med Roguelikes, det er ingen lagring, og du får bare ett liv. Hvis du dør og spiller igjen, blir fangehullet tilfeldig generert og elementene blir kryptert.Nethacks poeng er å overleve fangehullene, samle gull og gjenstander og drepe så mange monstre som mulig. Det er mål langt utover det, men du må spille en stund (eller lese opp) for å oppdage dem. Regler følger løst Dungeons & Dragons regler for våpen, ferdigheter, etc.
Her er et skjermbilde Av NetHack med tre rom og to korridorer synlige. Trappene opp er i øverste venstre rom, og jeg er for tiden i øverste høyre rom, sammen med noen skatter og andre gjenstander.
hvis du ikke har farge i din versjon, kan du opprette en fil med navnet ~/.nethackrc og legg følgende i DET:
ALTERNATIVER=farge: true, dark_room: true, menucolors:true
Til Side: HVIS ASCII-tegngrafikk ikke er din ting, men du liker konseptet, søk etter» roguelike » I Microsoft Store og nyt de mer visuelle spillene i denne populære sjangeren.Visst, NetHack er en gammel kodebase, mest kjære for de av oss i en viss alder. Men bygge det utøver et betydelig antall viktige utviklerverktøy og funksjoner i *nix operativsystemer, og også terminalemuleringen. Det er flott å se at alt, fra gcc, gdb, make, bison og flex til mer moderne git, fungerer PÅ WSL i dag.
hvis du vil se demoen ovenfor som gjort på Build Tour, kan du se denne keynoten Fra Build Tour Canada. Wsl-demoen starter rundt 6: 20 i. (Og ja, Det Er Windows Subsystem For Linux, til tross for det jeg sa i den videoen.)
https://channel9.msdn.com/Events/Build/Build-Tour-2016-Toronto/Keynote
jeg håper du liker din utflukt i Fangehullene I NetHack!
C og C++ er flotte, som alle disse klassiske utviklerverktøyene. Du kan til og med gjøre mye med vanlig Bash scripting. Men mange utvikleroppgaver involverer skriptspråk som Python.
Python
du kan finne Eksempel Python-skript over hele nettet, noe som innebærer At Python er både populært og nyttig for mange utviklere. De fleste av disse eksemplene antar selvfølgelig at Du kjører Linux. Tidligere betydde dette å kjøre Dem i En Linux-installasjon, enten på en annen maskin, ET VM-eller oppstartsalternativ, eller gjøre nødvendige endringer som er nødvendige for å kjøre Dem ved Hjelp Av Windows-distribusjonene Av Python.Dette er ikke uoverstigelige problemer av noen strekk, men i det daglige livet til en utvikler, legger små biter av friksjon som dette opp. MED WSL har du alltid et kompatibelt Python-kompatibelt delsystem og skall tilgjengelig for deg, uten å måtte gå ut av sonen din.
for å installere Den nyeste utviklingsversjonen Av Python og python package installer «pip», utfør følgende På Bash shell prompt:
$ sudo apt install python-pip python-dev
$ sudo pip install-upgrade pip
Nå Som Python er installert, ønsket jeg å vise hvordan du kan ta et Typisk Linux Python-eksempel fra et nettsted og jobbe med det direkte. Jeg gikk over Til Activestate Python oppskrift stedet og plukket toppen Python eksempel. Ok, jeg løy. Den øverste er for å skrive ut navn på heltall, og det hørtes ikke super spennende, så jeg plukket den andre: Tetris. Jeg skjønte at dere alle ser nok praktisk Python hver dag, så jeg skal gå for et annet spill.
jeg åpnet nano, kopierte De 275 Linjene Python-kode rett fra siden i nettleseren Min På Windows, limte dem inn i nano i wsl-konsollvinduet, lagret som tetris.py og så bare utført:
$ python tetris.Py
som umiddelbart ryddet skjermen og brakt opp en grunnleggende Tetris søknad. Som det var tilfelle Med NetHack, bruker du de samme VI-standard bevegelsestastene. (Tilbake i dagene før musen og WASD-tastene for bevegelse var høyre hånd PÅ tastaturet HJKL-tastene.)
som jeg nevnte, kan Du selvfølgelig kjøre Python På Windows uten WSL. Men for raske verktøy og prøver, å kunne kjøre Et Linux Python-eksempel uten endringer, bare ved å lime inn noen kode fra en kjent kilde, er det en stor produktivitetsforhøyelse for utviklere.
Det er poenget, egentlig. Det handler ikke om å erstatte Andre windows-innfødte verktøy som Python, PowerShell, C# og mer. Det handler om å fjerne friksjon når du bare trenger å få ting gjort raskt og effektivt i en moderne utviklingsarbeidsflyt.Mellom Bash, Python og alle de innfødte kommandolinje Linux utviklingsverktøy, HAR WSL Mine Linux arbeidsflyt behov dekket. Det er ikke En Linux-server eller en full Linux-klient. I stedet er det akkurat det jeg trenger for å redusere litt daglig friksjon og gjøre utviklingen på Windows enda mer produktiv og hyggelig.
Tilbakestille Wsl-Miljøet
du er velkommen til å eksperimentere. Hvis DU skader WSL-installasjonen, er det enkelt nok å installere på nytt. Sørg for å beholde kopier av noe viktig.
c: > lxrun.exe / avinstaller / full
C: > lxrun.exe/install
Hvordan bruker Du Bash og WSL?
vi håper Å ha WSL, Og Bash spesielt, på Windows 10 hjelper deg å være litt mer effektiv og fjerner litt friksjon fra dine daglige utviklingsoppgaver.
Hvordan bruker DU WSL På Windows 10? Hvordan vil du bruke den?teamet gjør mye arbeid for Å sikre AT WSL er et flott konsollverktøy for utviklere. Hvis du har tilbakemelding eller støter på problemer, anbefaler vi at du sjekker github-siden, Samt Uservoice-Tilbakemeldings-og stemmesiden. Vi vil gjerne høre fra deg.
Flere Referanser og Videre Lesing
Linux shell scripting er et stort tema, og det er mange flotte tutorials på nettet. Hvis du ikke allerede er kjent med det og vil lære mer, vil de fleste Bash-opplæringen fungere for deg. Her er en til å begynne med.