De meeste Linux-distributies bevatten standaard de bash-shell, maar je kunt ook overschakelen naar een andere shell-omgeving. Zsh is een bijzonder populair alternatief en er zijn andere schelpen, zoals as, streepje, vis en tcsh. Maar wat is het verschil, en waarom zijn er zo veel?
Wat doen schelpen?
Wanneer u zich aanmeldt op de opdrachtregel of een terminalvenster start op Linux, start het systeem het shell-programma. Shells bieden een standaardmanier om de opdrachtregelomgeving uit te breiden. U kunt de standaard shell vervangen door een andere, als u dat wilt.
De eerste shell-omgeving was de Thompson Shell, ontwikkeld bij Bell Labs en uitgebracht in 1971. Shell-omgevingen hebben sindsdien voortgebouwd op het concept en een verscheidenheid aan nieuwe functies, functionaliteit en snelheidsverbeteringen toegevoegd.
Bash biedt bijvoorbeeld het aanvullen van opdracht- en bestandsnamen, geavanceerde scriptfuncties, een opdrachtgeschiedenis, configureerbare kleuren, opdrachtaliassen en een verscheidenheid aan andere functies die niet beschikbaar waren in 1971 toen de eerste shell werd uitgebracht.
De shell wordt ook op de achtergrond gebruikt door verschillende systeemservices. Linux-distributies bevatten veel functies die zijn geschreven als shell-scripts. Deze scripts zijn opdrachten en andere geavanceerde shell-scriptfuncties die door de shell-omgeving worden uitgevoerd.
Shells in de aanloop naar Bash: sh, csh, tsh en ksh
VERWANT: Wat is Unix en waarom is het belangrijk?
De meest prominente stamvader van moderne schelpen is de Bourne-schelp – ook bekend als “sh” – die is vernoemd naar de maker Stephen Bourne die bij AT & T’s Bell Labs werkte. Het werd uitgebracht in 1979 en werd de standaard command-interpreter in Unix vanwege de ondersteuning voor commandosubstitutie, piping, variabelen, condition testing en looping, samen met andere functies. Het bood niet veel maatwerk voor gebruikers, en ondersteunde niet zulke moderne details als aliassen, opdrachtaanvulling en shell-functies (hoewel deze laatste uiteindelijk werd toegevoegd).
De C-shell, of “csh”, werd eind jaren zeventig ontwikkeld door Bill Joy van de University of California, Berkley. Het voegde veel interactieve elementen toe waarmee gebruikers hun systemen konden besturen, zoals aliassen (snelkoppelingen voor lange opdrachten), mogelijkheden voor taakbeheer, opdrachtgeschiedenis en meer. Het was gemodelleerd naar de programmeertaal C, waarin het Unix-besturingssysteem zelf was geschreven. Dit betekende ook dat gebruikers van de Bourne-shell C moesten leren om er opdrachten in te kunnen invoeren. Bovendien had csh nogal wat bugs die gedurende een lange periode door zowel gebruikers als makers moesten worden opgelost. Mensen gebruikten uiteindelijk de Bourne-shell voor scripts omdat het niet-interactieve commando’s beter afhandelde, maar bij normaal gebruik bij de C-shell bleef.
In de loop van de tijd hebben veel mensen bugs gerepareerd 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-computers en had enkele niet-standaard functies toegevoegd. David Korn van Bell Labs werkte aan de KornShell, of “ksh”, die de situatie probeerde te verbeteren door achterwaarts compatibel te zijn met de taal van de Bourne-shell, maar door veel functies van de csh-shell toe te voegen. Het werd uitgebracht in 1983, maar onder een eigen licentie. Het was geen gratis software tot de jaren 2000, toen het werd uitgebracht onder verschillende open-source licenties.
De geboorte van bash
De Portable Operating System Interface voor Unix, of POSIX, was een ander antwoord op de hectische eigen csh-implementaties. Het creëerde met succes een standaard voor onder andere opdrachtinterpretatie en weerspiegelde uiteindelijk veel van de functies in de KornShell. Tegelijkertijd probeerde het GNU-project een gratis, Unix-compatibel besturingssysteem te creëren. Het GNU-project ontwikkelde een vrije softwareschil als onderdeel van zijn gratis besturingssysteem en noemde deze de “Bourne Again Shell” of “bash”.
Bash is verbeterd in de decennia sinds de eerste release in 1989, maar het is nog steeds de standaardshell op de meeste Linux-distributies. Het is ook de standaardshell op Apple’s macOS en is beschikbaar voor installatie op Microsoft Windows 10.
Nieuwere schelpen: as, streepje, zsh en vis
Hoewel de Linux-gemeenschap zich in de jaren daarna op Bash heeft gevestigd, zijn ontwikkelaars niet gestopt met het maken van nieuwe shells toen Bash 28 jaar geleden voor het eerst werd uitgebracht.
Kenneth Almquist creëerde een Bourne-shell-kloon 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-schaal is lichter dan bash, waardoor deze populair is in embedded Linux-systemen. Als je een geroote Android-telefoon hebt waarop BusyBox is geïnstalleerd, of een ander apparaat met de BusyBox-softwarepakket, gebruikt deze code van ash.
Debian ontwikkelde een shell-omgeving op basis van ash en noemde deze “dash”. Het is ontworpen om POSIX-compatibel en licht van gewicht te zijn, dus het is sneller dan Bash, maar heeft niet alle functies. Ubuntu gebruikt de dash-shell als de standaardshell voor niet-interactieve taken, waardoor shell-scripts en andere taken die op de achtergrond worden uitgevoerd, worden versneld. Ubuntu gebruikt echter nog steeds bash voor interactieve shells, dus gebruikers hebben nog steeds de volledige interactieve omgeving.
Een van de meest populaire nieuwere shells is Z-shell, of “zsh”. Zsh, gemaakt door Paul Falstad in 1990, is een shell in Bourne-stijl die de functies bevat die je in bash vindt, plus zelfs meer. Zsh heeft bijvoorbeeld spellingcontrole, de mogelijkheid om te kijken naar logins / logouts, enkele ingebouwde programmeerfuncties zoals bytecode, ondersteuning voor wetenschappelijke notatie in syntaxis, maakt drijvende-kommaberekeningen mogelijk en meer functies.
Een andere nieuwere shell is de Friendly Interactive Shell, of “fish”, uitgebracht in 2005. Het heeft een unieke opdrachtregelsyntaxis die is ontworpen om iets gemakkelijker te leren, 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, helpt niet noodzakelijkerwijs bij het gebruik van bash en andere van Bourne afkomstige schelpen.
Welke moet je kiezen? (en waarom Zsh populair is)
U hoeft geen schaal te kiezen. Uw besturingssysteem kiest uw standaardshell voor u, en die keuze is bijna altijd bash. Ga zitten voor een Linux-distributie – 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, krijg je de ash-shell. Maar as is een op Bourne gebaseerde schaal en is grotendeels compatibel met bash. Alle kennis die je hebt van het gebruik van bash wordt overgedragen naar het gebruik van een ash- of dash-shell, hoewel sommige geavanceerde scriptfuncties niet beschikbaar zijn in deze lichtgewicht shell.
Bijna elke shell die je tegenkomt, is gebaseerd op Bourne 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 opdrachtregelaanvulling, laadbare modules die fungeren als plug-ins voor je shell, globale aliassen waarmee je bestandsnamen of iets anders op de opdrachtregel kunt aliassen in plaats van alleen opdrachten, en meer thema-ondersteuning. Het is net als bash, maar met veel extra’s, extra functies en configureerbare opties die je misschien op prijs stelt als je veel tijd achter de opdrachtregel doorbrengt.
Als je bekend bent met bash, kun je overschakelen naar zsh zonder een andere syntaxis te leren – je krijgt alleen extra functies. als je bekend bent met zsh, kun je naar bash overschakelen zonder een andere syntaxis te leren – je hebt gewoon geen toegang tot die functies.
“Oh My ZSH” is een tool waarmee je gemakkelijker zsh-plug-ins kunt inschakelen en kunt schakelen tussen vooraf ingestelde thema’s, waarbij je snel je zsh-shell kunt aanpassen zonder uren te besteden aan het aanpassen van dingen.
Er zijn ook andere schelpen. De tcsh-shell is bijvoorbeeld nog steeds aanwezig en is nog steeds een optie. FreeBSD gebruikt tsch als zijn standaard rootshell en ash als zijn standaard interactieve shell. Als u de C-programmering regelmatig gebruikt, is tsch misschien beter geschikt voor u. Het wordt echter lang niet zo vaak 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 gewoon de shell vanuit de pakketbeheerder van je Linux-distributie en typ de opdracht om de shell te starten.
Stel dat u bijvoorbeeld zsh op Ubuntu wilt proberen. U zou de volgende opdrachten uitvoeren om het te installeren en vervolgens te starten:
sudo apt install zsh zsh
Je zou dan bij een zsh-schaal zitten. Type ‘ exit
”Bij de shell om deze te verlaten en terug te keren naar je huidige shell.
Dit is slechts tijdelijk. Telkens wanneer u een nieuw terminalvenster opent of inlogt op uw systeem op de opdrachtregel, ziet u uw standaardshell. Om de shell te wijzigen die u ziet wanneer u zich aanmeldt — bekend als uw login-shell — kunt u doorgaans de chsh
, of “Shell wijzigen”, commando.
Om dit commando te gebruiken, moet je eerst het volledige pad naar je shell vinden met het welke commando. Laten we bijvoorbeeld zeggen dat we wilden veranderen naar de zsh-shell. We zouden het volgende commando uitvoeren:
which zsh
Op Ubuntu vertelt dit ons dat het zsh-binaire bestand is opgeslagen in / 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 binnenkomen /usr/bin/zsh
. De zsh-shell zou dan onze standaard zijn totdat we het chsh
commando en veranderde het terug.