Op Build 2016 introduceerde Microsoft het Windows Subsystem for Linux (Beta) , waarmee ontwikkelaars native Ubuntu user-mode console binaries kunnen draaien via de Bash shell in Windows 10. Als u in het Windows Insider-programma bent, hebt u de mogelijkheid gehad om deze functie uit te proberen met behulp van de nieuwste Windows Anniversary Update Insider Builds.
webontwikkelaars zijn gewend om moeilijke keuzes te maken op welke tools en bibliotheken ze kunnen gebruiken op basis van het besturingssysteem waar ze actief aan werken. De WSL is ontworpen en gebouwd door het Windows Kernel Team en geleverd in samenwerking met Canonical, om te helpen Windows 10 ontwikkelaars gebruik maken van de rijke Linux Ontwikkelaar ecosysteem en tools naast de grote tools die ze al gebruiken in Windows, zonder op te starten in een ander besturingssysteem of VM. Dit is zeker een “door ontwikkelaars, voor ontwikkelaars” Windows 10-functie, speciaal ontworpen om een beetje wrijving uit de dagelijkse workflow van ontwikkelaars te verwijderen.
in dit bericht, Ik ga u een paar van de functies van WSL die ik persoonlijk zeer interessant vinden, evenals wijzen u op een aantal middelen om u te helpen meer te leren. Ten eerste zal ik de integratie van nietje commando ‘ s zoals ssh voor het werken met Linux servers en apparaten. Ten tweede zal ik de mogelijkheid demonstreren om Bash scripting te gebruiken om taken op een zeer natuurlijke manier te automatiseren. Ten derde, Ik zal een beetje plezier hebben met de grote command-line compilers, andere tools en de * nix Compatibiliteit aangeboden, en speel een beetje NetHack. Tot slot zal ik je laten zien de mogelijkheid om bestaande Python en andere scripts beschikbaar op het web te gebruiken.
Windows is mijn primaire besturingssysteem en ontwikkelomgeving, en is sinds Windows 3.0 op mijn eerste 286. Niettemin, Ik heb altijd Linux servers of apparaten schoppen rond mijn plaats. Van IoT-apparaten zoals de Raspberry Pi en dedicated router / gateway-apparaten naar Minecraft-servers, ze hebben de neiging om te verzamelen op de planken en hoeken in mijn kantoor. Een ding dat ik altijd moet doen is het beheren en configureren van deze Linux-computers gemakkelijk vanaf mijn belangrijkste werkstation.
Servers en apparaten beheren
Ik run momenteel een headless Ubuntu Minecraft server vanuit mijn huis. Het was het afgelopen jaar mijn kerstcadeau voor mijn 10-jarige zoon, maar het is net zo goed mijn speeltje geworden als het zijne (ok, meer mijn speeltje). Ik gebruikte om een paar client apps te gebruiken om het te beheren vanaf mijn primaire Windows 10 PC, maar nu gebruik ik gewoon command-line ssh vanuit Bash op Windows 10. Met behulp van apps zoals PuTTY en Tera Term zijn prima natuurlijk, net als het gebruik van de grote tools die worden geleverd met Cygwin, maar ik wilde een echt native en natuurlijke ervaring die net goed stroomde. Cygwin vond het altijd een beetje als roerbakken bestellen bij een pizzeria. Het was prima, maar de uitvoering voelde gewoon niet goed voor de omgeving.
Ik heb de publieke / private sleutelparen ingesteld met behulp van ssh-keygen en SSH-copy-id van de WSL, dus naar ssh typ ik gewoon:
$ ssh <gebruikersnaam><server>
Ik heb een alias gemaakt die dat sneller maakt. Dit is een standaard Linux/Bash feature:
$ alias mc=’ssh <user><server>’
nu, om naar de Minecraft server te komen typ gewoon “MC” op de bash prompt in Windows 10.
deze zelfde aanpak werkt natuurlijk met alle Linux-gebaseerde web-of databaseservers of zelfs Raspberry Pi en soortgelijke IoT-apparaten die u gebruikt als onderdeel van uw oplossing.
de mogelijkheid om de shell netjes te beveiligen vanaf een console prompt is slechts EEN gemak en een voorkeur. Echter, als je eenmaal gewend bent om direct in de shell te werken, in een volledige omgeving die nietjes zoals apt, node, Ruby, Python en anderen omvat, open je allerlei mogelijkheden voor automatisering.
Remote Scripting
stel dat je een hele hoop Linux apparaten of servers hebt, en je wilt er een remote commando op Uitvoeren. Ervan uitgaande dat je al je publieke/private sleutelparen hebt ingesteld, kun je eenvoudig remote SSH commando ‘ s van Bash uitvoeren.
bijvoorbeeld, om te zien wanneer de laatste herstarttijd op een externe server was, typt u dit:
$ ssh <gebruiker><server> ‘last-x/grep reboot’
die shells beveiligen naar de server en het last-x commando uitvoeren, en zoekt naar de regels die het woord “Reboot.”Als ik het gebruik tegen mijn Ubuntu Minecraft server, krijg ik dit resultaat:
reboot system boot 4.4.0-28-generic do Jul 7 08:14 nog steeds draaien
dat is een enkele server. Als je een lijst met servers hebt, kun je dat deel ook automatiseren. Ik heb een bestand gemaakt met de naam servers.txt in mijn home directory op WSL. Het bevat een stel Linux server / apparaat namen-een per regel. Ik lees dan dat bestand uit een script dat ik gemaakt in mijn home directory op WSL.
Na jaren werken met apparaten zoals de Raspberry Pi, ik ben een nano soort man (op VMS was ik een LSEdit persoon), dus dit is hoe het script eruit ziet in mijn favoriete console editor:
u kunt natuurlijk gebruik maken van vim of Emacs of een andere editor die werkt in een ubuntu console sessie.
De gebruikte taal is Bash script (ook wel Bash shell script genoemd). Om het script uit te voeren, typ ik gewoon:
$ ./foreachserver.sh ‘last-x / grep reboot’
en het zal itereren over elke server/apparaat in het bestand en dat commando op afstand uitvoeren via ssh. Dit is een heel eenvoudig voorbeeld, natuurlijk, maar je kunt uitbreiden om te redirect in lokale scripts of andere nuttige commando ‘ s. De bash scripttaal is rijk genoeg, zodat u de meeste beheertaken op afstand kunt uitvoeren met behulp van het. U kunt het ook uitbreiden met andere toepassingen die u downloadt naar de WSL of de externe computers.
Wat als u lokale Windows-bestanden en bronnen wilt gebruiken met uw workflow met andere Linux-computers? Of, wat als je helemaal geen Linux gebruikt? Is Bash in staat om te werken met lokale Windows-bestanden en bronnen, of is het een volledig geïsoleerde omgeving?
werken met Windows-bestanden
de WSL heeft toegang tot het bestandssysteem van uw PC via/mnt/<stationsletter> / mappen (of koppelpunten). Bijvoorbeeld, je C: en D: root directory ‘ s in Windows zouden beschikbaar zijn via respectievelijk /mnt/c/ en /MNT/d/ in de WSL. Dit kan handig zijn wanneer u uw Windows-projectbestanden, downloads of andere bestanden wilt opnemen in een Linux/Bash-gebaseerde workflow.
Deze kaart naar de SSD en mechanische aandrijving heb ik op de PC:
Dit zijn de logische garnituren, zodat ze niet op dit moment weergegeven wanneer u commando ‘ s zoals de berg in de shell. Maar ze werken zoals je zou verwachten. Bijvoorbeeld, vanuit Windows, Ik plaatste een tekstbestand met de naam test.txt in de root van mijn C-schijf. Ik kan het als volgt benaderen vanuit WSL: