Aan de slag met Bash in Windows 10

© PXimport

Aan de slag met Bash in Windows 10

Geplaatst: 28 juli 2016 - 03:04

Aangepast: 24 november 2022 - 12:04

Koen Vervloesem

Microsoft maakt het in de Anniversary Update in Windows 10 mogelijk om Bash te draaien. Eigenlijk is dit een hele Ubuntu-installatie ín Windows. Daarmee krijg je in Windows toegang tot een heleboel Linux-programma's. We tonen je in dit artikel hoe Bash werkt en hoe je taken automatiseert.

Om met de Bash-shell onder Windows 10 te werken, heb je minimaal build 14316 van een 64bit-versie van Windows 10 nodig. Bij het naar de drukker gaan van deze editie van Computer!Totaal was Bash nog niet beschikbaar in de publieke Windows 10-versie, maar moest je een Technical Preview draaien. Daarvoor moet je Windows Insider zijn. Let op: je draait dan een experimentele versie van Windows die niet altijd even stabiel is! Draai je al de Anniversary Update van Windows 10? Sla dan stap 1 over. Lees ook: 15 manieren om met Linux aan de slag te gaan.

01 Upgraden naar Technical Preview

Om een previewversie van Windows 10 te draaien, meld je je aan voor het Windows Insider-programma. Klik daar op Aan de slag en voer het e-mailadres in waarmee je ook bij Windows 10 aanmeldt. Ga akkoord met de voorwaarden en klik op Verzenden.

Open daarna de instellingen van Windows en ga naar Bijwerken en beveiliging. Klik bij Windows Update onderaan op Geavanceerde opties. Onderaan klik je bij Insider Preview-versies ontvangen op Aan de slag. Na de waarschuwing dat het om pre-release software gaat, klik je op Volgende om te bevestigen dat je weet wat je doet en bevestig daarna nog eens met Bevestigen. Daarna herstart je je pc.

Ga weer naar Bijwerken en beveiliging en klik op Zoeken naar updates. Windows downloadt nu een Technical Preview. Herstart je computer nog eens om de update te installeren. Je draait nu een previewversie van Windows 10. Kijk in het programma Systeeminformatie of bij je Windows-versie minimaal build 14316 staat.

Is je versie niet recent genoeg, ga dan weer naar Bijwerken en beveiliging in de instellingen en klik weer op Geavanceerde opties. Wijzig je Insider-niveau van Release Preview naar Slow of Fast en zoek opnieuw naar updates. Zo krijg je sneller een nieuwere previewversie, maar je systeem zal er ook minder stabiel door worden omdat de nieuwste previewversies nog niet zo uitgebreid zijn getest. Tijdens de redactiesluiting moesten we Insider-niveau Fast instellen om de goede build te krijgen. Het duurt overigens even voordat Windows de updates voor je nieuwe Insider-niveau vindt, bij ons duurde het een uur of zes.

Aan de slag met Bash in Windows 10-15082296

© CIDimport

01 Meld je aan voor het Windows Insider-programma.

Waarom ondersteunt Microsoft Linux?

Je zult je wel de vraag stellen waarom Microsoft Linux-programma's ondersteunt onder Windows. Nog maar vijftien jaar geleden noemde toenmalig Microsoft-CEO Steve Ballmer Linux een kanker. Wat is er dan veranderd? In de tussentijd is Microsoft in ieder geval veel opener geworden tegenover concurrerende platforms. Maar Bash op Windows is geen liefdadigheidswerk.

Microsoft beseft dat ontwikkelaars liever met OS X of Linux werken omdat die platforms veel vriendelijker zijn voor ontwikkelaars en eenvoudig toegang geven tot allerlei krachtige tools. Door Ubuntu en alle bijbehorende commandline-software in Windows toegankelijk te maken, geeft Microsoft ontwikkelaars nu ook onder Windows de mogelijkheid om eenvoudig programmeertalen zoals Ruby, Python en PHP en compilers zoals GCC te draaien, een webserver zoals Apache of een editor zoals vim of Emacs. En uiteraard hoopt Microsoft dat de ontwikkelaars uiteindelijk hun toepassing op het cloudplatform Azure gaan draaien. Bash op Windows is dus vooral bedoeld om ontwikkelaars te paaien.

02 Bash installeren

Om Bash te installeren, ga je naar Bijwerken en beveiliging en klik je onderaan links op het onderdeel Voor ontwikkelaars. Kies voor Modus voor ontwikkelaars. Bevestig dat je de beveiligingsrisico's daarvan begrijpt. Nu je Windows in de modus voor ontwikkelaars draait, zijn de ontwikkelaarstoepassingen te installeren, waaronder Bash valt. Ga daarvoor in het Configuratiescherm naar Programma's en onderdelen. Klik links op Windows-onderdelen in- of uitschakelen. Vink daarna in de lijst Windows-subsysteem voor Linux (bèta) aan en klik op OK. Herstart je computer.

Zoek nu in je startmenu naar 'bash' en klik op het resultaat om de bash-opdracht uit te voeren. Je krijgt de melding dat de opdracht Ubuntu op Windows installeert. Druk op Y om te bevestigen. De opdracht downloadt Ubuntu uit de Windows Store en installeert het Ubuntu-subsysteem op je Windows-schijf. Na de installatie geef je een UNIX-gebruikersnaam op en een wachtwoord voor je Linux-gebruiker. Nadien roep je de Bash-shell op met de app 'Bash on Ubuntu on Windows'.

Aan de slag met Bash in Windows 10-15082296

© CIDimport

02 Activeer de modus voor ontwikkelaars om Bash te installeren.

Geen virtualisatie

Het Windows-subsysteem voor Linux werkt niet met virtualisatie, maar emuleert de Linux-kernel. Daardoor kun je ongewijzigde Linux-software in Windows draaien. Als je Bash op Windows 10 installeert, installeert die eenvoudigweg een minimale Ubuntu-image. Je draait dus exact dezelfde Linux-programma's als je rechtstreeks in Ubuntu zou draaien. Als een Linux-programma een systeemfunctie van de Linux-kernel aanroept, vertaalt het Windows-subsysteem voor Linux dit on-the-fly naar de overeenkomstige Windows-systeemfunctie. Door die vertaalslag kan de hele laag boven de Linux-kernel identiek blijven. En dat zonder het performanceverschil van virtualisatie. Wat Wine doet om Windows-programma's onder Linux te draaien, doet het Windows-subsysteem voor Linux dus om Linux-programma's onder Windows te draaien.

03 Bash-venster

Als je een Bash-venster opent, is dat leeg met linksboven de 'prompt'. Die toont standaard je gebruikersnaam en de naam van je computer, afgescheiden door een @-teken. Daarna komt een dubbele punt, de map waarin je zit en een $-teken. Als je in de persoonlijke map van je Linux-systeem zit (/home/[gebruikersnaam]), krijg je als map de verkorte naam ~ te zien.

04 Werken met mappen

Je draait nu exact dezelfde Bash-shell als in elke Linux-distributie. Dat betekent dat je ook alle Bash-opdrachten kunt uitvoeren. Enkele belangrijke opdrachten gaan over bestanden en mappen. Met cd [mapnaam] ga je naar een map in de huidige map, waarbij [mapnaam] natuurlijk de naam van de betreffende map is, bijvoorbeeld cd users. Met cd .. ga je naar de bovenliggende map. Let op: Linux scheidt bestanden en mappen in een pad met een / in plaats van een \.

Al je Windows-schijfletters zijn in Bash beschikbaar via het commando /mnt. Zo ga je eenvoudig naar je persoonlijke documenten met cd /mnt/c/Users/Koen/Documents. Als je overigens ooit vanuit een ander Windows-programma toegang wilt tot je Ubuntu-systeem, is dat ook mogelijk: het hele systeem is te vinden in C:\Users\[Gebruikersnaam]\AppData\Local\Lxss\rootfs. Helaas bleek dat tijdens onze test nog niet betrouwbaar te werken.

Met de opdracht ls bekijk je de inhoud van de huidige map en met ls [mapnaam] die van een andere map in de huidige map. Met ls -lh krijg je per bestand en map meer informatie te zien, zoals de bestandsgrootte en datum en tijdstip van de laatste wijziging. Bash vervolledigt overigens een padnaam die je aan het intypen bent als je op de Tab-toets drukt. Dat bespaart je heel wat typewerk als je in een diepe mappenstructuur duikt. Een nieuwe map aanmaken in de huidige map gaat eenvoudig met mkdir [mapnaam].

Aan de slag met Bash in Windows 10-15082296

© CIDimport

04 Heel wat basisopdrachten in Bash gaan over bestanden en mappen

05 Kopiëren en verwijderen

Een bestand kopiëren doe je met de opdracht cp [bestand1] [bestand2], waarbij bestand1 de naam van het originele bestand is en bestand2 de naam van de kopie. Beide bestanden kunnen zich in een andere map bevinden. De opdracht mv [bestand1] [bestand2] werkt hetzelfde, maar verplaatst bestand1 naar bestand2: het originele bestand wordt verwijderd. Als beide bestanden zich in dezelfde map bevinden, geeft deze opdracht bestand1 een andere naam, namelijk bestand2. Als beide bestanden zich in een andere map bevinden, wordt bestand1 verplaatst.

Een bestand verwijderen doe je met rm [bestand]. Maar let op: Bash werkt niet met een prullenbak, dus met rm verwijder je het bestand onmiddellijk. Een map verwijderen doe je met rmdir [mapnaam], maar dat werkt alleen als die map leeg is. Verwijder dus eerst de bestanden en submappen in die map. Of gebruik de opdracht rm -r [mapnaam], waarbij je de map en alle onderliggende mappen en bestanden in één keer verwijdert. Kijk altijd goed na of je met de juiste map te maken hebt voor je die opdracht invoert!

Geen PuTTY meer nodig

Als je vanaf je Windows-computer op een Linux-computer zoals een Raspberry Pi inlogt, doe je dat traditioneel met het programma PuTTY. Maar met Bash op Windows heb je geen PuTTY meer nodig: je gebruikt eenvoudigweg de opdracht ssh in de Bash-shell. Wil je bijvoorbeeld op je Raspberry Pi inloggen met IP-adres 192.168.0.101, geef dan de opdracht ssh -l pi 192.168.0.101. Je krijgt dan de vraag of je de vingerafdruk van de sleutel vertrouwt en geeft daarna het wachtwoord van gebruiker pi op je Raspberry Pi in. Zodra je ingelogd bent, kun je op je Pi opdrachten invoeren.

Aan de slag met Bash in Windows 10-15082296

© CIDimport

Dankzij ssh in Bash heb je geen PuTTY meer nodig om op Linux-computers in te loggen.

06 Updaten

Net zoals onder Windows is het belangrijk dat je onder Linux je software up-to-date houdt, zodat je beschermd bent tegen de nieuwste gevonden beveiligingsfouten. Omdat Bash op Windows een volledig Ubuntu-systeem is, doe je dat updaten met Ubuntu-opdrachten. Twee opdrachten moet je daarvoor onthouden. Met sudo apt update download je de lijst met nieuwste versies van alle pakketten. De opdracht vraagt je om je wachtwoord in te voeren. Daarna geef je met sudo apt upgrade de opdracht om het hele Ubuntu-systeem te upgraden naar de nieuwste versie. Maak er een gewoonte van om beide opdrachten regelmatig in te voeren. Dat kan ook in één regel, met sudo apt update && sudo apt upgrade.

Aan de slag met Bash in Windows 10-15082296

© CIDimport

06 Software in je Ubuntu-systeem upgraden verloopt eenvoudig.

07 Programma's beheren

Heb je Bash op Windows geïnstalleerd, dan krijg je standaard een minimaal Ubuntu-systeem met heel wat basissoftware. Maar als je er intensief mee aan de slag gaat, zul je al snel extra software willen installeren. Dat is gelukkig eenvoudig dankzij de ingebouwde pakketbeheerder apt. Met de opdracht apt search [zoekterm] zoek je naar een programma in de lijst met beschikbare software. Je krijgt dan een (soms lange) lijst met beschikbare pakketten. In de eerste kolom beschrijft een letter de toestand van elk pakket: een pakket met een p staat niet op het systeem, een pakket met een c is ondertussen verwijderd maar heeft nog configuratiebestanden, en een pakket met een i is geïnstalleerd. Met apt show [pakket] krijg je meer informatie over het pakket te zien.

Een pakket installeren gaat daarna eenvoudig met de opdracht sudo apt install [pakketnaam]. De pakketnaam vind je in de tweede kolom van de uitvoer van je apt search-opdracht. Bash installeert nu het pakket en alle pakketten die voor de werking nodig zijn. Je voert het geïnstalleerd pakket uit door de naam van het programma in de Bash-shell in te voeren. Heb je een programma niet meer nodig, verwijder het dan met sudo apt remove [pakketnaam] of sudo apt purge [pakketnaam]. Die laatste opdracht verwijdert ook de configuratiebestanden van het programma.

08 Interessante Linux-programma's

Welke programma's je onder Bash zult draaien, hangt uiteraard af van waarvoor je Bash gaat gebruiken. Ben je ontwikkelaar, dan heb je nu eenvoudig toegang tot programmeertalen zoals Ruby, Python en PHP en tools zoals de compilercollectie GCC. En je kunt deelnemen aan de ontwikkeling van opensourceprojecten met versiebeheersystemen zoals Git. En als je websites ontwikkelt, test je ze eenvoudig lokaal met een webserver zoals Apache.

Ook voor huis-, tuin- en keukengebruik is Bash op Windows interessant, al loop je dan tegen enkele beperkingen aan. Zo zijn grafische programma's niet ondersteund. Er bestaat wel een workaround door een X Server op Windows te installeren, maar het resultaat is niet zo stabiel. Wie het eens wil proberen, kan Xming X Server installeren. Geef de grafische programma's daarna toegang tot de X Server met de opdracht export DISPLAY=:0. Installeer dan het grafische programma dat je wilt draaien onder Bash (bijvoorbeeld sudo apt install firefox) en voer de volgende opdracht in Bash uit: firefox&. Als alles goed gaat, krijg je het grafische programma nu te zien, al reageert het wat traag.

Maar zelfs met de beperking tot commandline-programma's is er heel wat handigs te vinden. Met tree bekijk je de inhoud van een map in een boomstructuur, terwijl mc (Midnight Commander) een kloon is van de oude Norton Commander, de bekende bestandsbeheerder voor DOS. Het programma task (Taskwarrior) leidt je taken in goede banen. Met imagemagick (ImageMagick) haal je een boel tools in huis om afbeeldingen te manipuleren. En chat je nog op IRC, probeer dan zeker het programma irssi eens uit.

Aan de slag met Bash in Windows 10-15082296

© CIDimport

08 Het programma tree geeft een map in een boomstructuur weer.

09 Bash-scripts

Een ander handigheidje van Bash op Windows is dat je daarmee ook Bash-scripts kunt uitvoeren, het Linux-equivalent van de Windows-batchbestanden. Terwijl een Windows-batchbestand de extensie bat heeft, is dat bij een Bash-script sh, hoewel dat niet verplicht is. Je kunt een Bash-script in principe in elke tekstverwerker aanmaken. Let dan wel op dat je het resultaat als platte tekst opslaat. Gebruik bijvoorbeeld Kladblok.

Tijdens de redactiesluiting werkte dat echter nog niet stabiel. Gelukkig zijn bestanden ook volledig in Bash aan te maken, met het programma nano. Open het nieuwe script dan met nano [scriptnaam].sh. Helaas bleek het in Bash nog niet mogelijk om speciale tekens in te typen. Loop je ook tegen dat probleem aan, maak dan je script eerst in Kladblok aan, kopieer de tekst volledig en plak ze dan in nano met een rechtsklik op de menubalk van Bash / Bewerken / Paste. Daaraan is te zien dat Bash op Windows nog experimenteel is.

Aan de slag met Bash in Windows 10-15082296

© CIDimport

09 Bash-scripts zijn krachtig, maar ze in Windows 10 aanmaken gaat nog omslachtig.

10 Bash-scripts maken

De eerste regel van een Bash-script is altijd iets als #!/bin/bash. De #! noemen we een 'shebang', en erna komt het programma dat het script interpreteert. De volgende regels bevatten het script zelf. Elke opdracht die Bash kent, kun je ook in het script zetten. Als je merkt dat je bepaalde opdrachten vaak na elkaar uitvoert, zet ze dan in een script om ze te automatiseren.

We maken een klein scriptje om te controleren of een bepaalde poort op een computer open is. Handig om bijvoorbeeld te controleren of je webserver down is. Dat doen we met de opdracht netcat. De eerste regel van het script is dan netcat -z $1 $2. De $1 en $2 zijn de eerste en tweede parameters die je in Bash doorgeeft aan het script, we verwachten daar een IP-adres respectievelijk een poortummer. In de volgende regel testen we de exitcode van de netcat-opdracht: if [ "$?" = 0 ]. Daarna zeggen we dat de computer online of offline is, afhankelijk van de exitcode: then, echo $1 online, else, echo $1 offline, fi.

Als het script af is, sla het dan op en sluit je tekstverwerker af. In nano gaat dat respectievelijk met Ctrl+O en Ctrl+X. Daarna moet je het script nog uitvoerbaar maken. Dat gaat met de opdracht chmod +x [scriptnaam].sh. Daarna voer je het eenvoudig uit met ./[scriptnaam].sh [parameters], zoals ./online.sh 192.168.0.101 8080. De ./ is nodig om aan te geven dat je het script in de huidige map wilt uitvoeren.

11 En verder

Dit zijn maar enkele voorbeelden van het gebruik van Bash in Windows 10. Het leuke is dat je met Bash (en dan vooral met de scripts) eindeloze mogelijkheden hebt. Wat je met Bash in Windows 10 kunt doen, hangt dus alleen maar af van je inspiratie. Wil je meer weten over Bash, lees dan de Commandline Howto op de wiki van Ubuntu. Daar vind je ook meer informatie over het schrijven van Bash-scripts.

Deel dit artikel
Voeg toe aan favorieten