Care este diferența dintre Bash, Zsh și alte shell-uri Linux?

Publicat: 2022-01-29

Majoritatea distribuțiilor Linux includ în mod implicit shell-ul bash, dar puteți trece și la un alt mediu shell. Zsh este o alternativă deosebit de populară și există și alte scoici, cum ar fi cenușa, liniuța, peștele și tcsh. Dar care este diferența și de ce sunt atât de multe?

Ce fac scoicile?

Când vă conectați la linia de comandă sau lansați o fereastră de terminal pe Linux, sistemul lansează programul shell. Shell-urile oferă o modalitate standard de a extinde mediul liniei de comandă. Puteți schimba shell-ul implicit cu altul, dacă doriți.

Primul mediu shell a fost Thompson Shell, dezvoltat la Bell Labs și lansat în 1971. Mediile Shell s-au bazat pe concept de atunci, adăugând o varietate de noi caracteristici, funcționalități și îmbunătățiri de viteză.

De exemplu, Bash oferă completarea comenzilor și a numelui fișierului, funcții avansate de scriptare, un istoric al comenzilor, culori configurabile, aliasuri de comandă și o varietate de alte caracteristici care nu erau disponibile în 1971, când a fost lansat primul shell.

Shell-ul este folosit și în fundal de diverse servicii de sistem. Distribuțiile Linux includ multe funcții scrise ca scripturi shell. Aceste scripturi sunt comenzi și alte funcții avansate de scripting shell rulate prin mediul shell.

Shell-uri care duc până la Bash: sh, csh, tsh și ksh

LEGATE: Ce este Unix și de ce contează?

Cel mai proeminent progenitor al shell-urilor moderne este shell-ul Bourne – cunoscut și sub numele de „sh” – care a fost numit după creatorul său Stephen Bourne, care a lucrat la Bell Labs de la AT&T. Lansat în 1979, a devenit interpretul implicit de comandă în Unix datorită suportului său pentru înlocuirea comenzilor, conducte, variabile, testare de condiție și buclă, împreună cu alte caracteristici. Nu a oferit prea multă personalizare pentru utilizatori și nu a acceptat astfel de subtilități moderne precum aliasuri, completarea comenzilor și funcții shell (deși aceasta din urmă a fost adăugată în cele din urmă).

Publicitate

Shell-ul C, sau „csh”, a fost dezvoltat la sfârșitul anilor 1970 de Bill Joy la Universitatea din California, Berkley. A adăugat o mulțime de elemente interactive cu care utilizatorii își puteau controla sistemele, cum ar fi aliasuri (comenzi rapide pentru comenzi lungi), abilități de gestionare a sarcinilor, istoricul comenzilor și multe altele. A fost modelat după limbajul de programare C, în care a fost scris sistemul de operare Unix. Acest lucru însemna, de asemenea, că utilizatorii shell-ului Bourne trebuiau să învețe C pentru a putea introduce comenzi în el. În plus, csh a avut destul de multe erori care au trebuit să fie rezolvate de utilizatori și creatori deopotrivă pe o perioadă mare de timp. Oamenii au ajuns să folosească shell-ul Bourne pentru scripturi, deoarece a gestionat mai bine comenzile non-interactive, dar au rămas cu shell-ul C pentru utilizare normală.

De-a lungul timpului, mulți oameni au remediat erori și au adăugat caracteristici la shell-ul C, culminând cu o versiune îmbunătățită a csh cunoscută sub numele de „tcsh”. Dar csh era încă implicit în computerele bazate pe Unix și adăugase unele caracteristici non-standard. David Korn de la Bell Labs a lucrat la KornShell, sau „ksh”, care a încercat să îmbunătățească situația fiind compatibil cu limbajul shell-ului Bourne, dar adăugând multe caracteristici din shell-ul csh. A fost lansat în 1983, dar sub o licență proprietară. Nu a fost software gratuit până în anii 2000, când a fost lansat sub diferite licențe open-source.

Nașterea lui bash

Interfața sistemului de operare portabil pentru Unix, sau POSIX, a fost un alt răspuns la implementările agitate de proprietate csh. A creat cu succes un standard pentru interpretarea comenzilor (printre altele) și, în cele din urmă, a reflectat multe dintre caracteristicile din KornShell. În același timp, Proiectul GNU încerca să creeze un sistem de operare gratuit, compatibil cu Unix. Proiectul GNU a dezvoltat un shell de software gratuit pentru a face parte din sistemul său de operare gratuit și l-a numit „Bourne Again Shell” sau „bash”.

Bash a fost îmbunătățit în deceniile de la prima sa lansare în 1989, dar este încă shell-ul implicit pe majoritatea distribuțiilor Linux astăzi. Este, de asemenea, shell-ul implicit pe macOS de la Apple și este disponibil pentru instalare pe Windows 10 de la Microsoft.

Scoici mai noi: cenușă, liniuță, zsh și pește

În timp ce comunitatea Linux s-a stabilit pe Bash în anii de după, dezvoltatorii nu au încetat să creeze noi shell-uri când Bash a fost lansat pentru prima dată acum 28 de ani.

Publicitate

Kenneth Almquist a creat o clonă de coajă Bourne cunoscută sub numele de coajă Almquish, A Shell, „cenusa”, sau uneori doar „sh”. a fost, de asemenea, compatibil POSIX și a devenit shell-ul implicit în BSD, o ramură diferită a Unix. Carcasa de cenușă este mai ușoară decât bash, ceea ce o face populară în sistemele Linux încorporate. Dacă aveți un telefon Android rootat cu BusyBox instalat sau orice alt dispozitiv cu suita de software BusyBox, acesta folosește codul de la ash.

Debian a dezvoltat un mediu shell bazat pe ash și l-a numit „liniuță”. Este conceput pentru a fi compatibil POSIX și ușor, deci este mai rapid decât Bash, dar nu va avea toate caracteristicile sale. Ubuntu folosește dash shell ca shell implicit pentru sarcini non-interactive, accelerând scripturile shell și alte sarcini care rulează în fundal. Ubuntu încă folosește bash pentru shell-uri interactive, totuși, astfel încât utilizatorii au încă mediul interactiv cu funcții complete.

Una dintre cele mai populare shell-uri mai noi este Z shell sau „zsh”. Creat de Paul Falstad în 1990, zsh este un shell în stil Bourne care conține caracteristicile pe care le veți găsi în bash, plus chiar mai multe. De exemplu, zsh are verificarea ortografică, capacitatea de a urmări autentificare/deconectare, unele funcții de programare încorporate, cum ar fi codul octet, suport pentru notație științifică în sintaxă, permite aritmetica în virgulă mobilă și mai multe caracteristici.

Un alt shell mai nou este Friendly Interactive Shell, sau „pește”, lansat în 2005. Are o sintaxă unică de linie de comandă care este concepută pentru a fi puțin mai ușor de învățat, dar nu este derivată nici din shell-ul Bourne, nici din shell-ul C. Este o idee interesantă, dar ceea ce înveți folosind peștele nu te va ajuta neapărat să folosești bash și alte scoici derivate din Bourne.

Pe care ar trebui să alegi? (și de ce Zsh este popular)

Nu trebuie să alegeți o coajă. Sistemul dvs. de operare alege shell-ul implicit pentru dvs., iar această alegere este aproape întotdeauna bash. Stați în fața unei distribuții Linux - sau chiar a unui Mac - și aproape întotdeauna veți avea un mediu bash shell. Bash are destul de multe funcții avansate, dar probabil că nu le veți folosi decât dacă programați scripturi shell.

Pe sistemele Linux încorporate sau sistemele BSD, veți ajunge cu shell-ul de cenușă. Dar ash este un shell pe bază de Bourne și este în mare măsură compatibil cu bash. Orice cunoștințe pe care le aveți de la utilizarea bash se vor transfera la utilizarea unui shell ash sau dash, deși unele caracteristici avansate de scripting nu sunt disponibile în acest shell ușor.

Publicitate

Aproape fiecare shell pe care îl veți întâlni este bazat pe Bourne și funcționează în mod similar, inclusiv zsh.

De aceea zsh este popular. Acest shell mai nou este compatibil cu bash, dar include mai multe funcții. Shell-ul zsh oferă corecție de ortografie încorporată, completare îmbunătățită a liniei de comandă, module încărcate care acționează ca plug-in-uri pentru shell-ul dvs., aliasuri globale care vă permit să creați alias nume de fișiere sau orice altceva pe linia de comandă în loc de doar comenzi și mai mult suport tematic. Este ca bash, dar cu o mulțime de extra, caracteristici suplimentare și opțiuni configurabile, ați putea aprecia dacă petreceți mult timp la linia de comandă.

Dacă sunteți familiarizat cu bash, puteți trece la zsh fără a învăța o altă sintaxă - veți obține doar funcții suplimentare. dacă sunteți familiarizat cu zsh, puteți trece la bash fără a învăța o sintaxă diferită - pur și simplu nu veți avea acces la acele caracteristici.

„Oh My ZSH” este un instrument care vă ajută să activați mai ușor plug-in-urile zsh și să comutați între temele prefabricate, personalizând rapid shell-ul zsh fără a petrece ore întregi modificând lucrurile.

Există și alte scoici. De exemplu, shell-ul tcsh există încă și este încă o opțiune. FreeBSD folosește tsch ca shell rădăcină implicit și ash ca shell interactiv implicit. Dacă utilizați programarea C în mod regulat, tsch ar putea fi mai potrivit pentru dvs. Cu toate acestea, nu este nici pe departe la fel de folosit ca bash sau zsh.

Cum să comutați între Shell

Este ușor să treci la un nou shell pentru a-l încerca. Doar instalați shell-ul din managerul de pachete al distribuției dvs. Linux și introduceți comanda pentru a lansa shell-ul.

Publicitate

De exemplu, să presupunem că doriți să încercați zsh pe Ubuntu. Ați rula următoarele comenzi pentru a instala și apoi ați lansa-l:

 sudo apt install zsh

zsh

Atunci ai fi așezat la o coajă zsh. Tastați „ exit ” la shell pentru a-l părăsi și a reveni la shell-ul curent.

Acest lucru este doar temporar. De fiecare dată când deschideți o nouă fereastră de terminal sau vă conectați la sistemul dvs. la linia de comandă, veți vedea shell-ul implicit. Pentru a schimba shell-ul pe care îl vedeți când vă conectați, cunoscut sub numele de shell-ul dvs. de conectare, puteți utiliza, în general, comanda chsh sau „Change Shell”.

Pentru a utiliza această comandă, mai întâi va trebui să găsiți calea completă către shell-ul dvs. cu comanda which. De exemplu, să presupunem că am vrut să trecem la shell-ul zsh. Am rula următoarea comandă:

 care zsh

Pe Ubuntu, acest lucru ne spune că binarul zsh este stocat la /usr/bin/zsh.

Rulați următoarea comandă, introduceți parola și vi se va solicita să alegeți un nou shell de conectare:

 chsh
Publicitate

Conform comenzii de mai sus, am introduce /usr/bin/zsh . Shell-ul zsh ar fi apoi implicit până când vom rula comanda chsh și o vom schimba înapoi.