Wat is Shell?

Een programma dat de commando's leest en interpreteert die een gebruiker intypt, programma's start en de resultaten toont. Op Linux worden bash en zsh veel gebruikt. Het biedt expansie van wildcards, variabelen, omleiding en pipes, en jobbeheer, en het kan ook bestanden met commando's (shellscripts) uitvoeren om werk te automatiseren. De naam komt van de rol als „schil” rond de kernel, het hart van het besturingssysteem, tussen de kernel en de gebruiker in.

Japanse benaming: シェル

“Shell” komt voor in 10 oefenvragen uit 2 onderwerpen, bijv. Basis van Linux en de opdrachtregel, Linker, loader en uitvoerbare formaten.

Vakgebied: Basis van Linux en de opdrachtregel

Tot een commando wordt uitgevoerd

De shell leest een invoerregel, expandeert variabelen en wildcards (globbing) en verwerkt aanhalingstekens, en splitst de regel dan in een commandonaam en argumenten. Als de commandonaam geen slash bevat, voert de shell een ingebouwd commando uit of het eerste uitvoerbare bestand dat wordt gevonden door op volgorde de directory's in de omgevingsvariabele PATH te doorzoeken. Standaardinvoer, standaarduitvoer en standaardfout omzetten volgens de opgegeven omleidingen en pipes hoort ook bij het werk van de shell.

Shellscripts

Als een bestand met commando's op de eerste regel een shebang zoals #!/bin/bash heeft en uitvoerrecht krijgt, kan het net als een programma worden uitgevoerd. Argumenten worden aangeduid met $1 en $2, hun aantal met $# en de exitstatus van het vorige commando met $?, en met if, for en while worden vertakkingen en lussen geschreven. Scripts worden vaak gebruikt om vaste procedures te automatiseren, zoals simulaties in batch draaien of logs samenvatten.

Verschillende shells

Naast bash, dat op Linux veel wordt gebruikt, zijn er zsh en fish met uitgebreide interactieve functies, en dash, dat licht is en snel start. Scripts die alleen de sh-syntaxis uit de POSIX-standaard gebruiken, werken in veel shells. Scripts voor het instellen van de omgeving van EDA-tools zijn soms nog steeds in de syntaxis van de csh-familie (csh, tcsh) geschreven, en een instellingenbestand dat met source wordt ingelezen, moet passen bij het soort shell.

Nu oefenen: vragen over Shell

touch maakt een nieuw bestand vanuit 666 en mkdir een nieuwe directory vanuit 777, met de bits van de umask verwijderd. Welke combinatie van rechten is juist als een nieuw bestand en een nieuwe directory worden gemaakt in een shell met umask 027?

  1. ABestand 637, directory 750
  2. BBestand 640, directory 750
  3. CBestand 750, directory 750
Antwoord en toelichting tonen

Antwoord: B. Bestand 640, directory 750

De umask geeft de rechtenbits die bij nieuw gemaakte bestanden en directory's „weggehaald” worden. 027 haalt schrijven (2) weg bij de groep en lezen, schrijven en uitvoeren (7) bij de overigen, dus een bestand wordt rw-r----- (640) vanuit 666 en een directory rwxr-x--- (750) vanuit 777. Dit is geen octale aftrekking maar het bitsgewijs weghalen van bits (666 AND NOT 027). Met de veelgebruikte umask 022 geeft dezelfde berekening 644 voor bestanden en 755 voor directory's.

Veelgestelde vragen

Wat is het verschil tussen een shell en een terminal?

Een terminal (terminalemulator) is een programma dat dienstdoet als venster dat tekens toont en toetsenbordinvoer ontvangt. De shell draait daarin en interpreteert de ontvangen tekenreeksen als commando's en voert ze uit. In dezelfde terminal kun je bijvoorbeeld van bash naar zsh overschakelen.

Wat is het verschil tussen „source bestand” en „./bestand”?

Met ./bestand voert een nieuw shellproces het script uit, dus variabelen of de huidige directory die daarin worden gewijzigd, blijven na afloop niet bewaard in de oorspronkelijke shell. source (of .) voert de inhoud van het bestand uit in de huidige shell, dus instellingen zoals omgevingsvariabelen blijven behouden. Daarom worden instellingenbestanden die de omgeving van een tool voorbereiden, met source ingelezen.

“Shell” in de toelichting

Vragen met “Shell” (10)

  1. touch maakt een nieuw bestand vanuit 666 en mkdir een nieuwe directory vanuit 777, met de bits van de umask verwijderd. Welke combinatie van rechten is juist als een nieuw bestand en een nieuwe directory worden gemaakt in een shell met umask 027?
  2. Welke tekens worden getoond als de bovenstaande twee regels in een shell worden uitgevoerd?
  3. Wat gebeurt er in het algemeen met de waarde 3 als de C-functie main eindigt met „return 3;”?
  4. In de homedirectory toont „ls” alleen notes.txt, terwijl „ls -a” „.”, „..”, „.bashrc” en „notes.txt” toont. Welke verklaring van dit resultaat is juist?
  5. Een directory bevat zes bestanden: a1.txt, a2.txt, a10.txt, b1.txt, c1.txt en a1.csv. Hoeveel bestanden worden getoond als in deze directory „ls [ab]?.txt” wordt uitgevoerd?
  6. Welke beschrijving van de bestanden die worden gevonden als „find /data -name "*.log" -mtime +7 -size +100M” met GNU find wordt uitgevoerd, is juist?
  7. Op een server die via SSH is bereikt, werd een langdurige taak gestart met „./run.sh &”, en toen de verbinding werd verbroken, stopte de taak ook. Wat is de meest geschikte manier om de taak te starten zodat die blijft draaien nadat de verbinding is verbroken?
  8. Wat is de uitvoer van de twee echo-commando's als de bovenstaande commando's in volgorde worden uitgevoerd?
  9. Een uitvoerbaar script run.sh in de huidige directory geeft „command not found” als het wordt gestart door „run.sh” te typen, maar wordt wel uitgevoerd als „./run.sh” wordt getypt. Wat is de reden?
  10. Wat is de combinatie van de uitvoer van de twee bash -c-commando's als de bovenstaande commando's in volgorde worden uitgevoerd?

Verwante termen

Variabele Omgevingsvariabele (environment variable) Retourwaarde (return value) Bestandsrechten (permissies) SSH Omleiding van invoer en uitvoer (I/O redirection) Argument cron Git grep

Naar de woordenlijst