22Jul

Wat is het verschil tussen Bash-, Zsh- en andere Linux-shells?

De meeste Linux-distributies bevatten de bash-shell standaard, maar u kunt ook overschakelen naar een andere shell-omgeving. Zsh is een bijzonder populair alternatief en er zijn andere shells, zoals ash, dash, fish en tcsh. Maar wat is het verschil, en waarom zijn er zoveel?

Wat doen schelpen?

Wanneer u inlogt op de opdrachtregel of een terminalvenster op Linux start, start het systeem het shell-programma. Shells bieden een standaard manier om de opdrachtregelomgeving uit te breiden. Je kunt de standaardshell omwisselen voor een andere shell, als je wilt.

De eerste shell-omgeving was de Thompson Shell, ontwikkeld bij Bell Labs en uitgebracht in 1971. Shell-omgevingen bouwen sindsdien voort op het concept en voegen een verscheidenheid aan nieuwe functies, functionaliteit en snelheidsverbeteringen toe.

Bash biedt bijvoorbeeld de voltooiing van opdrachten en bestandsnamen, geavanceerde scriptingfuncties, een opdrachthistorie, configureerbare kleuren, opdrachtaliassen en een aantal andere functies die niet beschikbaar waren in 1971 toen de eerste shell werd vrijgegeven.

De shell wordt ook op de achtergrond gebruikt door verschillende systeemservices. Linux-distributies bevatten veel functies die zijn geschreven als shellscripts. Deze scripts zijn commando's en andere geavanceerde shell scripting-functies lopen door de shell-omgeving.

-shells die naar Bash leiden: sh, csh, tsh en ksh

De meest prominente voorloper van moderne shells is de Bourne-shell - ook bekend als "sh" - die is genoemd naar de maker Stephen Bourne die bij AT & T's Bell werkteLabs. Uitgebracht in 1979, werd het de standaardopdracht-interpreter in Unix vanwege de ondersteuning voor opdrachtsubstitutie, piping, variabelen, conditietests en looping, samen met andere functies. Het bood niet veel aanpassingsmogelijkheden voor gebruikers, en ondersteunde dergelijke moderne niceties niet als aliassen, opdrachtafronding en shell-functies( hoewel deze laatste uiteindelijk werd toegevoegd).

De C-shell, oftewel "csh", is eind jaren 70 ontwikkeld door Bill Joy aan de University of California, Berkley. Het voegde veel interactieve elementen toe waarmee gebruikers hun systemen konden beheren, zoals aliassen( snelkoppelingen voor lange opdrachten), mogelijkheden voor taakbeheer, opdrachtgeschiedenis en meer. Het was gemodelleerd uit de programmeertaal C, waarin het Unix-besturingssysteem zelf was geschreven. Dit betekende ook dat gebruikers van de Bourne-shell C moesten leren zodat ze daarin opdrachten konden invoeren. Bovendien had csh nogal wat bugs die zowel door gebruikers als videomakers over een lange periode moesten worden opgelost. Mensen gebruikten de Bourne-shell uiteindelijk voor scripts omdat het niet-interactieve commando's beter hanteerde, maar bleef hangen bij de C-shell voor normaal gebruik.

Na verloop van tijd hebben veel mensen bugs opgelost en functies toegevoegd aan de C-shell, met als hoogtepunt een verbeterde versie van csh, bekend als "tcsh".Maar csh was nog steeds de standaard op Unix-gebaseerde computers en had een aantal niet-standaard functies toegevoegd. David Korn van Bell Labs werkte aan de KornShell, of "ksh", die probeerde de situatie te verbeteren door achterwaarts compatibel te zijn met de taal van de Bourne shell maar veel functies uit de csh-shell toe te voegen. Het werd uitgebracht in 1983, maar onder een gepatenteerde licentie. Het was geen gratis software tot de jaren 2000, toen het werd vrijgegeven onder verschillende open-source licenties.

De geboorte van bash

De draagbare besturingssysteeminterface voor Unix of POSIX was een ander antwoord op de hectische gepatenteerde csh-implementaties. Het creëerde met succes een standaard voor opdrachtinterpretatie( onder andere) en uiteindelijk weerspiegelde het veel van de functies in de KornShell. Tegelijkertijd probeerde het GNU-project een gratis, Unix-compatibel besturingssysteem te maken. Het GNU Project ontwikkelde een gratis softwareschil om deel uit te maken van zijn gratis besturingssysteem en noemde het de "Bourne Again Shell" of "bash".

Bash is verbeterd in de decennia sinds de eerste release in 1989, maar het is nog steeds de standaard shell op de meeste Linux-distributies van vandaag. Het is ook de standaardshell op Apple's macOS en is beschikbaar voor installatie op Microsoft Windows 10.

Nieuwere shells: ash, dash, zsh en fish

Terwijl de Linux-gemeenschap zich in de jaren daarna op Bash heeft gevestigd, stopten de ontwikkelaars niethet creëren van nieuwe shells toen Bash voor het eerst 28 jaar geleden werd uitgebracht.

Kenneth Almquist heeft een Bourne shell-kloon gemaakt die bekend staat als Almquish shell, A Shell, "ash" of soms gewoon "sh".het was ook POSIX-compatibel en werd de standaardshell in BSD, een andere tak van Unix. De ash shell is lichter dan bash, waardoor deze populair is in embedded Linux-systemen. Als je een geroote Android-telefoon hebt met BusyBox geïnstalleerd - of een ander apparaat met de BusyBox-suite met software - gebruikt het code van as.

Debian ontwikkelde een shell-omgeving op basis van as en noemde deze "streepje".Het is ontworpen om POSIX-compatibel en lichtgewicht te zijn, dus het is sneller dan Bash, maar heeft niet alle functies. Ubuntu gebruikt de dash-shell als de standaard shell voor niet-interactieve taken, waardoor shell-scripts en andere taken op de achtergrond worden versneld. Ubuntu maakt nog steeds gebruik van bash voor interactieve shells, dus gebruikers hebben nog steeds de volledig functionele interactieve omgeving.

Een van de meest populaire nieuwere shells is Z-shell of "zsh".Geschreven door Paul Falstad in 1990, is zsh een shell in Bourne-stijl die de functies bevat die je in bash vindt, plus nog meer. Zo heeft zsh spellingcontrole, de mogelijkheid om logins / logouts te bekijken, enkele ingebouwde programmeerfuncties zoals bytecode, ondersteuning voor wetenschappelijke notatie in syntaxis, drijvende-komma- rekenkundige bewerkingen en meer functies.

Een andere nieuwere shell is de Friendly Interactive Shell, oftewel 'fish', die in 2005 is uitgebracht. Deze heeft een unieke syntaxis voor de opdrachtregel die is ontworpen om iets eenvoudiger te leren te zijn, maar is niet afgeleid van de Bourne-shell of de C-shell. Het is een interessant idee, maar wat je leert door het gebruik van vis, hoeft niet per se te helpen bij het gebruik van bash en andere van Bourne afkomstige schelpen.

Welke moet u kiezen?(en waarom Zsh populair is)

U hoeft geen shell te kiezen. Uw besturingssysteem kiest uw standaard shell voor u, en die keuze is bijna altijd bash. Ga voor een Linux-distributie zitten, of zelfs een Mac, en je hebt bijna altijd een bash-shell-omgeving. Bash heeft nogal wat geavanceerde functies, maar je zult ze waarschijnlijk niet gebruiken tenzij je shell-scripts programmeert.

Op embedded Linux-systemen of BSD-systemen, kom je uit bij de as-shell. Maar ash is een op Bourne gebaseerde shell en is grotendeels compatibel met bash. Alle kennis die je hebt bij het gebruik van bash zal worden overgedragen naar het gebruik van een ash of dash shell, hoewel sommige geavanceerde scripting-functies niet beschikbaar zijn in deze lichtgewicht shell.

Vrijwel elke shell die je tegenkomt is Bourne-gebaseerd en werkt op dezelfde manier, inclusief zsh.

Daarom is zsh populair. Deze nieuwere shell is compatibel met bash, maar bevat meer functies. De zsh-shell biedt ingebouwde spellingcorrectie, verbeterde voltooiing van de opdrachtregel, laadbare modules die fungeren als plug-ins voor je shell, globale aliassen waarmee je aliasbestandsnamen kunt maken of iets anders op de opdrachtregel in plaats van alleen maar opdrachten, enmeer ondersteuning voor thema's. Het is net bash, maar met veel extra's, extra functies en configureerbare opties die je misschien op prijs stelt als je veel tijd op de opdrachtregel doorbrengt.

Als u bekend bent met bash, kunt u overschakelen naar zsh zonder een andere syntaxis te leren - u krijgt gewoon extra functies.als u bekend bent met zsh, kunt u overschakelen naar bash zonder een andere syntaxis te leren - u hebt gewoon geen toegang tot deze functies.

"Oh My ZSH" is een tool die je helpt zsh plug-ins gemakkelijker in te schakelen en te switchen tussen vooraf ingestelde thema's, snel je zsh shell aan te passen zonder uren te besteden aan het aanpassen van dingen.

Er zijn ook andere shells. De tcsh-shell is bijvoorbeeld nog steeds in de buurt en is nog steeds een optie. FreeBSD gebruikt tsch als zijn standaard rootshell en as als zijn standaard interactieve shell. Als u de C-programmering regelmatig gebruikt, is tsch wellicht beter geschikt voor u. Het komt echter niet in de buurt, zoals vaak wordt gebruikt als bash of zsh.

Schakelen tussen shells

Het is gemakkelijk om over te schakelen naar een nieuwe shell om het uit te proberen. Installeer de shell vanuit de pakketbeheerder van je Linux-distributie en typ de opdracht om de shell te starten.

Laten we bijvoorbeeld zeggen dat je Zsh op Ubuntu wilt proberen. U voert de volgende opdrachten uit om te installeren en start deze vervolgens:

sudo apt install zsh zsh

U zou dan in een zsh-shell zitten. Type "exit" bij de shell om het te verlaten en terug te keren naar je huidige shell.

Dit is slechts tijdelijk. Wanneer u een nieuw terminalvenster opent of bij uw systeem aanmeldt op de opdrachtregel, ziet u uw standaardshell. Als u de shell wilt wijzigen die wordt weergegeven wanneer u zich aanmeldt, ook bekend als uw inlogshell, kunt u meestal de opdracht chsh of de opdracht 'Shell wijzigen' gebruiken.

Als u deze opdracht wilt gebruiken, moet u eerst het volledige pad naar uw shell vinden met de opdracht. Laten we bijvoorbeeld zeggen dat we wilden veranderen naar de shell van zsh. We zouden de volgende opdracht uitvoeren:

welke zsh

is op Ubuntu, dit vertelt ons dat het zsh binary is opgeslagen op /usr/bin/ zsh.

Voer de volgende opdracht uit, voer uw wachtwoord in en u wordt gevraagd om een ​​nieuwe login-shell te kiezen:

chsh

Volgens het bovenstaande commando zouden we /usr/bin/ zsh invoeren. De zsh-shell is dan onze standaard totdat we de opdracht chsh hebben uitgevoerd en deze hebben teruggezet.