Build 2016, Microsoft představil světu Windows Subsystém pro Linux (Beta) , který umožňuje vývojářům spouštět nativní Ubuntu user-mode console binární soubory přes Bash shell v systému Windows 10. Pokud jste v programu Windows Insider, měli jste možnost vyzkoušet tuto funkci pomocí nejnovějších sestav Windows Anniversary Update Insider.
Weboví vývojáři jsou zvyklí dělat obtížná rozhodnutí o tom, které nástroje a knihovny mohou používat na základě operačního systému, na kterém aktivně pracují. WSL byl navržen a postaven na Windows Kernel Tým a vydal v partnerství s Canonical, pomoci Windows 10, vývojáři používat bohaté Linux developer ekosystém a nástroje vedle skvělé nástroje, které se již používají v systému Windows, bez nutnosti bootovat do jiného operačního systému, nebo VM. Toto je určitě funkce“ od vývojářů, pro vývojáře “ Windows 10, Speciálně navržená tak, aby odstranila trochu tření z každodenního pracovního postupu vývojářů.
V tomto příspěvku, já vám ukážu pár funkcí WSL, že jsem osobně velmi zajímavé, stejně jako bod, který jste na některé zdroje, které vám pomohou dozvědět se více. Nejprve ukážu integraci základních příkazů, jako je ssh pro práci se servery a zařízeními Linux. Za druhé, budu demonstrovat schopnost používat Bash skriptování automatizovat úkoly ve velmi přirozeným způsobem. Za třetí, budu se trochu bavit s velkými kompilátory příkazového řádku, dalšími nástroji a nabízenou kompatibilitou * nix a hrát trochu NetHack. Nakonec vám ukážu schopnost používat existující Python a další skripty dostupné na webu.
Windows je můj primární operační systém a vývojové prostředí a byl od Windows 3.0 na mém prvním 286. Nicméně, vždycky jsem měl Linuxové servery nebo zařízení kopající kolem mého místa. Od zařízení IoT, jako jsou Raspberry Pi a dedikovaná zařízení routeru / brány, až po servery Minecraft, mají tendenci se shromažďovat na policích a rozích v mé kanceláři. Jedna věc, kterou vždy musím udělat, je spravovat a konfigurovat tyto počítače Linux snadno z mé hlavní pracovní stanice.
správa serverů a zařízení
v současné době provozuji Bezhlavý server Ubuntu Minecraft z mého domu. Byl to můj vánoční dárek mému 10letému synovi minulý rok, ale ukázalo se, že je to moje hračka stejně jako jeho (ok, více moje hračka). Používal jsem několik klientských aplikací pro správu z mého primárního počítače se systémem Windows 10, ale teď používám příkazový řádek ssh z Bash v systému Windows 10. Používání aplikací jako PuTTY a Tera Term je samozřejmě v pořádku, stejně jako používání skvělých nástrojů, které přicházejí s Cygwinem, ale chtěl jsem opravdu nativní a přirozený zážitek, který právě tekl dobře. Cygwin mi vždycky připadal trochu jako objednání smažit na pizzerii. Bylo to v pořádku, ale poprava se prostě necítila dobře pro životní prostředí.
mám páry veřejných/soukromých klíčů nastavené pomocí ssh-keygen a ssh-copy-id z WSL, takže do ssh jednoduše napíšu:
$ ssh <uživatelské jméno><server>
jsem vytvořil alias, který dělá to rychlejší. Jedná se o standardní Linux/Bash funkce:
$ alias mc=’ssh <uživatel><server>‘
Nyní, jak získat Minecraft server jsem prostě typ „mc“ v Bash řádku v systému Windows 10.
Tento stejný přístup funguje, samozřejmě, s případnými Linux-based webových nebo databázových serverů, nebo dokonce Raspberry Pi a podobná zařízení internetu Věcí, které můžete používat jako součást vašeho řešení.
schopnost čistě zabezpečit shell z výzvy konzoly je jen pohodlí a preference. Jakmile si však zvyknete pracovat přímo v shellu, v plném prostředí, které zahrnuje sponky jako apt, node, Ruby, Python a další, otevíráte nejrůznější možnosti automatizace.
vzdálené skriptování
řekněme, že máte spoustu linuxových zařízení nebo serverů a chcete na nich spustit vzdálený příkaz. Za předpokladu, že jste již nastavili páry veřejných / soukromých klíčů, můžete jednoduše spustit vzdálené příkazy ssh z Bash.
Chcete-li například zjistit, kdy byl poslední čas restartu na vzdáleném serveru, zadejte toto:
$ ssh <uživatel><server> ‚poslední -x|grep restartovat‘
bezpečné skořápky na server a provede poslední -x příkaz a hledá řádky obsahující slovo „reboot.“Když ji spustím proti mému serveru Ubuntu Minecraft, dostanu tento výsledek:
restartujte systém boot 4.4.0-28-generic Thu Jul 7 08: 14 stále běží
to je jediný server. Pokud máte seznam serverů, můžete tuto část také automatizovat. Vytvořil jsem soubor s názvem servery.txt v mém domovském adresáři na WSL. Obsahuje spoustu názvů serverů / zařízení Linux-jeden na řádek. Pak jsem si přečetl tento soubor ze skriptu, který jsem vytvořil v domovském adresáři na WSL.
Po letech práce s zařízení, jako je Raspberry Pi, jsem nano typ chlapa (na VMS, byl jsem LSEdit osobu), takže tohle je to, co skript vypadá to, že v mé oblíbené konzole editor:
můžete, samozřejmě, používat vim nebo emacs, nebo jakýkoliv jiný editor, který funguje v Ubuntu relace konzoly.
použitý jazyk je bash script (také nazývaný Bash shell script). Spusťte skript, jsem prostě typ:
$ ./foreachserver.sh poslední -x|grep restartovat‘
A to bude iterovat přes každý server/zařízení v souboru a to spustit na dálku přes ssh. Toto je samozřejmě velmi jednoduchý příklad, ale můžete rozšířit přesměrování v místních skriptech nebo jiných užitečných příkazech. Skriptovací jazyk Bash je dostatečně bohatý, takže pomocí něj můžete provádět většinu úkolů vzdálené správy. Můžete jej také rozšířit o další aplikace, které stáhnete do WSL nebo vzdálených počítačů.
Co když chcete používat místní soubory a zdroje systému Windows s pracovním postupem s jinými počítači se systémem Linux? Nebo, co když nepoužíváte Linux vůbec? Je Bash schopen pracovat s místními soubory a prostředky systému Windows, nebo je to zcela izolované prostředí?
Práce s soubory systému Windows
WSL má přístup k vašemu PC systému souborů přes /mnt/<písmeno>/ adresáře (nebo přípojné body). Například vaše kořenové adresáře C: A D: ve Windows by byly k dispozici prostřednictvím /mnt/c/ a /mnt/d/ ve WSL. To může být užitečné, pokud chcete začlenit soubory projektu Windows, soubory ke stažení nebo jiné soubory do pracovního postupu založeného na Linuxu/Bash.
Ty mapy na SSD a mechanický disk mám na PC:
Tyto jsou logické úchytky, takže nemají v současné době ukázat, když budete používat příkazy jako mount in the shell. Ale fungují tak, jak byste očekávali. Například z Windows jsem umístil textový soubor s názvem test.txt v kořenovém adresáři mé jednotky C. Mohu přistupovat z WSL, jako je tento:
v Průběhu Turné, chtěli jsme se ujistit, dema, vše funguje bez přístupu k internetu (nikdy nevíte, co se místo sítí bude podobně). Abych se ujistil, že demo Bash / WSL bude fungovat pro část Git a demonstrovat přístup k souborům Windows na místním počítači, nastavil jsem místní repo na C: gitNetHack v počítači se systémem Windows. Na klon, který ve WSL, provedl jsem následující:
$ git clone file:///mnt/c/git/NetHack
příkazový řádek řekl git pomocí protokolu file:// a klonovat repo nachází v /mnt/c/git/NetHack. Můžete přistupovat ke všem souborům systému Windows podobným způsobem.
varování: stejně jako u jakékoli konzoly můžete upravovat / mazat soubory v systému souborů Windows z Bash, pokud si nejste opatrní. Můžete například udělat něco jako níže a nakonec vymazat dobrou část instalace systému Windows, za předpokladu, že účet Windows, který používáte, má k tomu práva:
$ rm -rf /mnt/c/ <silný></strong>
chci, aby to, protože Linux příkazy jsou nové pro mnohé z nás, vzhledem k tomu, že Okna konzoly příkazy nejsou.
kouzlo, které způsobuje integraci tohoto systému souborů, se nazývá DrvFs. Pokud se chcete dozvědět více o souborovém systému a o tom, jak funguje ve WSL, tým WSL sestavil skvělý blogový příspěvek se všemi detaily.
přístup k souborovému systému je samozřejmě pouze částí příběhu. Mnoho vývojových úkolů zahrnuje přístup ke vzdáleným zdrojům přes HTTP nebo jiné síťové protokoly.
Vytváření HTTP Požadavků
To je často užitečné, aby se ZBYTEK nebo jiné (HTTP nebo FTP) volat ze skriptu nebo příkazového řádku, spíše než z zkompilovaný program nebo webové stránky. Stejně jako většina linuxových distribucí obsahuje WSL standardní nástroje jako curl a wget pro vytváření HTTP a dalších síťových hovorů. Například, zde je zbytek volání na GitHub a získejte informace o mém profilu, pomocí curl:
můžete to kombinovat s skriptováním Bash a vytvořit rychlé testovací klienty pro REST API nebo nástroje pro ping webové stránky na serverech a hlášení stavu zpět. Je to také skvělé jen o stažení souboru z webu; můžete jednoduše přesměrovat výstup do souboru, spíše než zobrazení na displeji:
$ curl-i https://api.github.com/users/Psychlist1972> pete.json
jsem také PowerShell uživatele, a vytvořili i několik zajímavých rozšíření pomocí systému Windows 10 MIDI v prostředí PowerShell a také pro opravu některých souborů, korupce, která se děje, aby se uživatelé některých záznam zvuku hardwaru. Jako dlouholetý vývojář a fanoušek. Net budu i nadále používat a rozšiřovat PowerShell, protože to má smysl pro mé projekty. PowerShell však není tím správným prostředím pro spuštění všech těchto open source nástrojů a příkladů zaměřených na Bash a Linux na webu dnes. Chci použít nejjednodušší a nejvíce bez tření způsob, jak splnit jakýkoli úkol, a někdy, to znamená dělat to v Bash.
sotva jsem poškrábal povrch zde na Bash, Bash skriptování a úkoly, které můžete splnit z shellu. Zatím jsem mluvil o užitkové práci, která je užitečná, ale pomocná pro rozvoj. A co dělat skutečný vývoj a kompilaci z WSL? Předvedl jsem to v rámci turné Build.
Bash na Build Tour – NetHack
letos v létě, reproduktory od společnosti Microsoft šel po celém světě demonstrovat některé ze skvělých nových funkcí pro vývojáře v systému Windows a Microsoft Cloud. V rámci toho jsme chtěli ukázat WSL zábavným způsobem, ale také způsobem, s nímž by se vývojáři vztahovali.
osobně jsem chtěl ukázat pomocí git a některých tradičních nástrojů pro vývoj konzoly. Když jsem napsal demo Bash, zahrnul jsem základy („Hello World“ v Pythonu a Ruby), ale chtěl jsem ukázat něco trochu víc mimo vyšlapanou cestu.
vzpomněl jsem si na svůj čas na vysoké škole, když jsme se skákali sem a tam mezi Unixem (DEC Ultrix a SunOS) a VAX / VMS. V té době byl Unix téměř výlučně prvním prostředím příkazového řádku. V mé škole většina uživatelů X na hrstce grafických pracovních stanic právě otevřela několik terminálových relací v různých oknech, ale s super-cool měsíční fází tapety na pozadí. Většina studentů používala pro své sezení terminály VT-220 (škola nebyla daleko od Bostonu ,takže jsme měli hodně vybavení DEC).
v té době existovaly dvě velké hry, které hrály všechny obory informatiky: Mud (lpMUD a zbrusu nový v té době DikuMUD, především) a NetHack. NetHack a další Roguelikes byly považovány za jedny z nejvlivnějších her v historii, jsou prekurzory mnoha dungeon crawl a role-playing hry, jsme si dnes.
NetHack má dlouhou historii a dnes obsahuje více než sto tisíc řádků desetiletí starého * Nix kódu ,stejně jako moderní doplňky. Samotná hra používá kletby (nebo jejich nahrazení) pro terminální interakci, vyžaduje lex a yacc (nebo flex a bison) a cc (nebo gcc) a spoustu dalších vývojářských nástrojů k sestavení.
je napsán v jazyce C a obsahuje řadu silně skriptovaných konfiguračních nástrojů napsaných pro Bourne shell. Myslel jsem, že to bude dobrý a zábavný test na cvičení developer schopnosti WSL a Bash na Windows 10. Díky použití kletby (libncurses na Linuxu a WSL) by také pomohlo demonstrovat schopnosti emulace terminálu zabudované do okna konzoly Windows 10.
zpět v den, budování NetHack ze zdroje trvalo věčnost na našem časově nakrájeném serveru Ultrix. Teď to trvá minutu na mém PC a je to všechno hotovo. Miluju pokrok. Existují jednoduché způsoby a těžké způsoby, jak konfigurovat a kompilovat NetHack na Linuxu nebo WSL. Abych vám ušetřil čas, provedu vás snadným přístupem.
předpoklady
nejprve aktualizujte prostředí WSL, abyste se ujistili, že ukazujete na nejnovější katalog softwaru a také máte aktuální instalaci základny. Obecně je dobré to udělat před instalací nových balíčků.
$ sudo apt update
$ sudo apt upgrade
poté nainstalujte základní vývojářské nástroje. Nejjednodušší způsob, jak toho dosáhnout, je použít balíček build-essential. To zahrnuje téměř každý konzolový program, který by vývojář Linuxu potřeboval k vytváření aplikací v c / c++.
$ sudo apt install build-essential
bude to trvat několik minut. Pokud chcete být více chirurgických, můžete samostatně nainstalovat gcc, gdb, make, flex, bison a další nástroje v NetHack docs. Ale pokud jste vývojář, budete pravděpodobně chtít další nástroje v určitém okamžiku. Balíček build-essential odstraňuje dohady z instalace sady nástrojů.
dále nainstalujte git. Jak si dokážete představit, je to stejně snadné jako:
$ sudo apt install git
Stejně jako s Linuxem, můžete přidat git PPA dostat novější verzi, ale tohle bude dělat za to, co tady děláme.
A konečně, chceme mít kletby (ncurses, vlastně) instalované pro konzole screen interakce:
$ sudo apt install libncurses-dev
po dokončení těchto kroků, jste připraveni, aby se budova NetHack.
Building NetHack
oficiální NetHack repo je na Githubu. Nejprve to uchopíme a vložíme do podsložky z našeho domovského adresáře.
$ cd ~
$ git clone http://github.com/NetHack/NetHack
Protože NetHack podporuje mnoho různých operačních systémů, budete muset udělat nějaké základní konfiguraci říct to, že používáme Linux na příkazovém řádku a dosazením zdarma a open source nástrojů pro systém Unix klasiky, jako je gcc pro cc.
jak jsem již zmínil, existuje řada způsobů, jak toho dosáhnout. Někdo byl natolik přemýšlivý, aby zapouzdřil většinu konfigurace do souboru s nápovědami. Věřte mi, že použití souboru rady vám ušetří hodiny bolesti hlavy v konfiguraci oproti krokům popsaným na repo Githubu. To není okamžitě zřejmé, jak použít rady, pokud se podíváte na README soubory, nebo jiné dokumentaci, tak tady to máte:
$ cd NetHack/sys/unix
$ ./setup.sh rady/linux
, bude nastavení makefile používat správné nástroje, knihovny a cesty pro Linux. Instalační skripty jsou netriviální shell skripty, které dělají hodně konfigurace; jsem rád, že zpráva, že fungují perfektně ve WSL. Pokud jste zvědaví na skriptování shellu, nezapomeňte je otevřít ve svém oblíbeném editoru.
pak konečná sestava:
$ cd ~ / NetHack
$ make all
po sestavení budete chtít vytvořit instalaci. Jedná se opravdu jen o kopírování spustitelného souboru na známé místo:
$ make install
, které vám pak zanechá složku s názvem ~/nh. Nethack se nachází v adresáři ~/nh/install/games a jednoduše se nazývá nethack. Spustit, přejděte do tohoto adresáře (nebo zadejte úplnou cestu) a zadejte:
$ cd ~/nh/install/hry
$ nethack
Jakmile to uděláte, obrazovka se smaže a dostanete vyzváni k začít hrát NetHack. Všimněte si, že vše, co se zde děje, je stejně jako u instalace vanilla Ubuntu Linux; nebylo potřeba nic specifického pro Windows.
Hrát NetHack
Vzhledem k omezení herní konzole a složitost NetHack, to může trvat trochu se do toho dostat. Říci, že je to zpočátku trochu záhadné, by bylo podcenění, ale nikdy jsem nepotkal vývojáře, který se vyhnul dobré výzvě.
navigační klávesy jsou stejné jako klávesy používané v VI(M), takže HJKL pro vlevo, dolů, nahoru a vpravo. Chcete-li ukončit, můžete najít schody nahoru na nejvyšší úrovni a použít je, nebo hit Control-C vynutit ukončení hry.
V Nethacku jste symbolem@. Každá úroveň se skládá z místností, chodeb, dveří a obou schodů nahoru a dolů. Monstra, poklad a předměty jsou reprezentovány jako různé postavy ASCII, se kterými se při hraní seznámíte. Jak je u Roguelikes normou, nedochází k žádné záchraně a dostanete pouze jeden život. Pokud zemřete a hrajete znovu, dungeon je náhodně znovu generován a položky se míchají.
smyslem Nethacku je přežít dungeony, sbírat zlato a předměty a zabít co nejvíce příšer. Existují cíle daleko za to, ale budete muset hrát na chvíli (nebo si přečíst) je objevit. Pravidla volně následovat Dungeons & Dragons pravidla pro zbraně, dovednosti, atd.
zde je snímek obrazovky Nethacku se třemi místnostmi a dvěma chodbami viditelnými. Schody nahoru jsou v levém horním rohu místnosti, a já jsem v současné době v pravém horním pokoji, spolu s nějakým pokladem a dalšími předměty.
Pokud nemáte barvy ve vaší verzi, vytvořte soubor s názvem ~/.nethackrc a vložte do něj následující:
OPTIONS=color: true, dark_room:true,menucolors: true
stranou: Pokud grafika znaků ASCII není vaše věc, ale koncept se vám líbí, vyhledejte v Microsoft Store „roguelike“ a užijte si více vizuálních her v tomto populárním žánru.
jistě, NetHack je starověká kódová základna, nejdražší pro ty z nás určitého věku. Budování it však využívá značné množství důležitých vývojářských nástrojů a funkcí operačních systémů *nix a také emulace terminálu. Je skvělé vidět, že to všechno, od gcc, gdb, make, bison a flex po modernější git, dnes funguje na WSL.
Pokud byste chtěli vidět výše uvedené demo jako na Build Tour, podívejte se na tuto keynote z Build Tour Canada. Demo WSL začíná kolem 6: 20 v. (A ano, je to Windows subsystém pro Linux, navzdory tomu, co jsem řekl v tomto videu.)
https://channel9.msdn.com/Events/Build/Build-Tour-2016-Toronto/Keynote
doufám, že si užijete výlet do sklepení Nethacku!
C A C++ jsou skvělé, stejně jako všechny tyto klasické vývojářské nástroje. Můžete dokonce udělat hodně s prostým Bash skriptování. Ale mnoho úkolů pro vývojáře zahrnuje skriptovací jazyky, jako je Python.
Python
příklady skriptů Pythonu najdete na celém webu, což znamená, že Python je populární a užitečný pro mnoho vývojářů. Většina z těchto příkladů samozřejmě předpokládá, že používáte Linux. V minulosti to znamenalo jejich spuštění v instalaci Linuxu buď na jiném počítači, VM nebo bootovací možnosti, nebo provedení jakýchkoli požadovaných změn nezbytných pro jejich spuštění pomocí Windows distribucí Pythonu.
to nejsou nepřekonatelné problémy žádným úsekem, ale v každodenním životě vývojáře se malé kousky tření, jako je tento, sčítají. S WSL máte vždy k dispozici kompatibilní subsystém a shell schopný Pythonu, aniž byste museli vystoupit ze své zóny.
nainstalovat nejnovější vývojová verze Python a python package installer „pip,“ spustit následující Bash shell řádku:
$ sudo apt install python-pip, python-dev
$ sudo pip nainstalovat –upgrade pip
Nyní, že Python je nainstalován, chtěl jsem ukázat, jak si můžete dát typické Linux Python příklad z webu, a pracovat s ním přímo. Šel jsem na web s receptem ActiveState Python a vybral jsem nejlepší příklad Pythonu. Dobře, lhal jsem. Horní je pro tisk názvů celých čísel, a to neznělo super vzrušující, tak jsem si vybral druhý: Tetris. Myslel jsem, že každý den vidíte dost praktického Pythonu, takže půjdu na další hru.
otevřela jsem nano, kopírovat 275 řádky Python kódu přímo ze stránky v prohlížeči na Windows, vložit je do nano v mém WSL okno konzole, uložit jako tetris.py a pak jednoduše popraveni:
$ python tetris.PY
, který okamžitě vyčistil obrazovku a vyvolal základní aplikaci Tetris. Stejně jako v případě Nethacku používáte stejné pohybové klávesy VI-standard. (Zpět ve dnech před myší a klávesami WASD pro pohyb byla pravá ruka na klávesách hjkl klávesnice.)
Jak jsem již zmínil, můžete samozřejmě spustit Python na Windows bez WSL. Pro rychlé nástroje a vzorky je však možnost spustit příklad Linux Python beze změn pouhým vložením nějakého kódu ze známého zdroje pro vývojáře velkým zvýšením produktivity.
o to vlastně jde. Nejde o nahrazení jiných nativních nástrojů systému Windows, jako jsou Python, PowerShell, C# a další. Jde o odstranění tření, když potřebujete rychle a efektivně udělat věci v moderním vývojovém pracovním postupu.
mezi Bash, Python a všechny nativní příkazového řádku Linux vývojové nástroje, WSL má mé Linux workflow potřeby pokryty. Není to linuxový server ani úplný linuxový klient. Místo toho je to přesně to, co potřebuji snížit každodenní tření a učinit vývoj na Windows ještě produktivnějším a příjemnějším.
resetování prostředí WSL
neváhejte experimentovat. Pokud poškodíte instalaci WSL, je snadné ji znovu nainstalovat. Nezapomeňte si ponechat kopie všeho důležitého.
C:> lxrun.exe / uninstall/full
C:> lxrun.exe / install
jak používáte Bash a WSL?
doufáme, že WSL a zejména Bash v systému Windows 10 vám pomohou být trochu efektivnější a odstraní trochu tření z vašich každodenních vývojových úkolů.
jak používáte WSL v systému Windows 10? Jak byste to chtěl použít?
tým dělá hodně práce, aby zajistil, že WSL je skvělý konzolový nástroj pro vývojáře. Pokud máte zpětnou vazbu nebo narazíte na problémy, doporučujeme zkontrolovat stránku s problémy GitHub, stejně jako zpětnou vazbu a hlasovací web UserVoice. Opravdu bychom rádi slyšeli od vás.
další odkazy a další čtení
skriptování linuxového shellu je obrovské téma a na webu je spousta skvělých tutoriálů. Pokud si nejste již obeznámeni s ním a chcete se dozvědět více, Většina Bash tutorial bude pracovat pro vás. Tady je jeden pro začátek.