Homepage » come » Qual è la differenza tra Bash, Zsh e altre shell Linux?

    Qual è la differenza tra Bash, Zsh e altre shell Linux?

    La maggior parte delle distribuzioni Linux include la shell bash per impostazione predefinita, ma è anche possibile passare a un altro ambiente shell. Zsh è un'alternativa particolarmente popolare e ci sono altre shell, come ash, dash, fish e tcsh. Ma qual è la differenza, e perché ci sono così tanti?

    Cosa fanno le conchiglie?

    Quando si accede alla riga di comando o si avvia una finestra di terminale su Linux, il sistema avvia il programma di shell. Le conchiglie offrono un modo standard per estendere l'ambiente della riga di comando. Puoi scambiare la shell predefinita con un'altra, se preferisci.

    Il primo ambiente di shell era la Thompson Shell, sviluppata presso i Bell Labs e pubblicata nel 1971. Da allora gli ambienti Shell hanno iniziato a costruire il concetto, aggiungendo una serie di nuove funzionalità, funzionalità e miglioramenti di velocità.

    Ad esempio, Bash offre il completamento di comandi e nomi di file, funzionalità di scripting avanzate, una cronologia dei comandi, colori configurabili, alias dei comandi e una varietà di altre funzionalità che non erano disponibili nel 1971 quando fu rilasciata la prima shell.

    La shell viene anche utilizzata in background da vari servizi di sistema. Le distribuzioni Linux includono molte funzioni scritte come script di shell. Questi script sono comandi e altre funzioni avanzate di scripting della shell eseguite attraverso l'ambiente shell.

    Conchiglie che portano a Bash: sh, csh, tsh e ksh

    Il più importante progenitore di shell moderne è la shell Bourne, conosciuta anche come "sh", che prende il nome dal suo creatore Stephen Bourne che ha lavorato presso i Bell Labs di AT & T. Rilasciato nel 1979, divenne il comando-interprete predefinito in Unix grazie al suo supporto per la sostituzione di comandi, piping, variabili, test delle condizioni e looping, insieme ad altre funzionalità. Non offriva molta personalizzazione per gli utenti, e non supportava le sottigliezze moderne come alias, il completamento dei comandi e le funzioni di shell (sebbene quest'ultima sia stata infine aggiunta).

    La shell C, o "csh", fu sviluppata alla fine degli anni '70 da Bill Joy all'Università della California, a Berkley. Aggiungeva molti elementi interattivi con cui gli utenti potevano controllare i loro sistemi, come alias (scorciatoie per comandi lunghi), capacità di gestione dei lavori, cronologia dei comandi e altro. È stato modellato sul linguaggio di programmazione C, su cui è stato scritto il sistema operativo Unix stesso. Ciò significava anche che gli utenti della shell Bourne dovevano imparare C in modo da poter immettere comandi in esso. Inoltre, csh aveva alcuni bug che dovevano essere risolti da utenti e creatori per un lungo periodo di tempo. Le persone hanno finito per utilizzare la shell Bourne per gli script perché gestiva meglio i comandi non interattivi, ma rimaneva bloccato con la shell C per l'uso normale.

    Nel corso del tempo, molte persone hanno risolto bug e aggiunto funzionalità alla shell C, culminando in una versione migliorata di csh nota come "tcsh". Ma csh era ancora l'impostazione predefinita nei computer basati su Unix e aveva aggiunto alcune funzionalità non standard. David Korn dei Bell Labs ha lavorato su KornShell, o "ksh", che ha cercato di migliorare la situazione essendo compatibile con le versioni precedenti del linguaggio della shell Bourne ma aggiungendo molte funzionalità dalla shell csh. È stato rilasciato nel 1983, ma con una licenza proprietaria. Non era un software libero fino agli anni 2000, quando fu rilasciato sotto varie licenze open source.

    La nascita di bash

    L'interfaccia Portable Operating System per Unix, o POSIX, è stata un'altra risposta alle frenetiche implementazioni proprietarie di csh. Ha creato con successo uno standard per l'interpretazione dei comandi (tra le altre cose) e infine ha rispecchiato molte delle funzionalità di KornShell. Allo stesso tempo, il progetto GNU stava tentando di creare un sistema operativo libero compatibile con Unix. Il progetto GNU ha sviluppato una shell software gratuita per far parte del suo sistema operativo libero e lo ha battezzato "Bourne Again Shell", o "bash".

    Bash è stato migliorato nei decenni successivi alla sua prima versione nel 1989, ma è ancora la shell predefinita nella maggior parte delle distribuzioni Linux oggi. È anche la shell predefinita su macOS di Apple ed è disponibile per l'installazione su Microsoft Windows 10.

    Conchiglie più recenti: cenere, lineetta, zsh e pesce

    Mentre la comunità Linux si è basata su Bash negli anni successivi, gli sviluppatori non hanno smesso di creare nuove shell quando Bash è stato rilasciato per la prima volta 28 anni fa.

    Kenneth Almquist ha creato un clone di Bourne shell noto come guscio di Almquish, A Shell, "cenere" o talvolta solo "sh". era anche compatibile con POSIX e divenne la shell di default in BSD, un ramo diverso di Unix. Il guscio di cenere è più leggero di bash, il che lo rende popolare nei sistemi Linux embedded. Se hai un telefono Android con root con BusyBox installato o qualsiasi altro dispositivo con la suite di software BusyBox, utilizza il codice dalla cenere.

    Debian ha sviluppato un ambiente shell basato su ash e lo ha chiamato "dash". È progettato per essere conforme a POSIX e leggero, quindi è più veloce di Bash, ma non ha tutte le sue funzionalità. Ubuntu usa la dash dash come shell predefinita per attività non interattive, velocizzando gli script della shell e altre attività in esecuzione in background. Ubuntu usa ancora bash per le shell interattive, tuttavia, così gli utenti hanno ancora l'ambiente interattivo completo.

    Una delle shell più recenti più popolari è la shell Z, o "zsh". Creato da Paul Falstad nel 1990, zsh è una shell in stile Bourne che contiene le funzionalità che troverai in bash, e anche di più. Ad esempio, zsh ha il controllo ortografico, la capacità di guardare gli accessi / logout, alcune funzioni di programmazione incorporate come il bytecode, il supporto per la notazione scientifica nella sintassi, consente l'aritmetica a virgola mobile e altre funzionalità.

    Un'altra shell più recente è la Friendly Interactive Shell, o "fish", rilasciata nel 2005. Ha una sintassi della riga di comando che è stata progettata per essere un po 'più facile da imparare, ma non è derivata né dalla shell Bourne né dalla shell C. È un'idea interessante, ma ciò che impari usando il pesce non ti aiuterà necessariamente ad usare bash e altre shell derivate da Bourne.

    Quale dovresti scegliere? (e perché Zsh è popolare)

    Non è necessario scegliere una shell. Il tuo sistema operativo sceglie la tua shell predefinita per te, e quella scelta è quasi sempre bash. Siediti davanti a una distribuzione Linux o persino a un Mac e avrai quasi sempre un ambiente bash shell. Bash ha alcune funzionalità avanzate, ma probabilmente non le userai a meno che tu non programmi gli script della shell.

    Su sistemi Linux embedded o sistemi BSD, finirai con la shell di ash. Ma ash è una shell basata su Bourne ed è ampiamente compatibile con bash. Qualsiasi conoscenza acquisita dall'uso di bash verrà trasferita all'utilizzo di una shell ash o dash, sebbene alcune funzioni di scripting avanzate non siano disponibili in questa shell leggera.

    Quasi tutte le shell che incontrerai sono basate su Bourne e funzionano in modo simile, incluso zsh.

    Ecco perché zsh è popolare. Questa nuova versione è compatibile con bash, ma include più funzionalità. La shell zsh offre correzione ortografica integrata, completamento della riga di comando migliorato, moduli caricabili che fungono da plug-in per la shell, alias globali che consentono di alias nomi di file o qualsiasi altra cosa sulla riga di comando anziché solo comandi, e più supporto tematico. È come bash, ma con molti extra, funzionalità aggiuntive e opzioni configurabili che potresti apprezzare se passi molto tempo alla riga di comando.

    Se hai familiarità con bash, puoi passare a zsh senza imparare una sintassi diversa: otterrai solo funzionalità aggiuntive. se hai familiarità con zsh, puoi passare a bash senza imparare una sintassi diversa, semplicemente non avrai accesso a tali funzioni.

    "Oh My ZSH" è uno strumento che ti aiuta a abilitare più facilmente i plug-in zsh e passa tra i temi premade, personalizzando rapidamente la tua shell zsh senza spendere ore a modificare le cose.

    Ci sono anche altre shell. Ad esempio, la shell tcsh è ancora in giro ed è ancora un'opzione. FreeBSD usa tsch come shell di default e ash come sua shell interattiva predefinita. Se usi regolarmente la programmazione C, tsch potrebbe essere più adatto a te. Tuttavia, non è neanche lontanamente usato come bash o zsh.

    Come passare da un guscio all'altro

    È facile passare a una nuova shell per provarlo. Basta installare la shell dal gestore di pacchetti della tua distribuzione Linux e digitare il comando per avviare la shell.

    Ad esempio, supponiamo di voler provare zsh su Ubuntu. Dovresti eseguire i seguenti comandi per installarlo e quindi avviarlo:

    sudo apt installa zsh zsh

    Saresti quindi seduto a un guscio zsh. Genere " Uscita "Alla shell di lasciarlo e tornare alla shell corrente.

    Questo è solo temporaneo. Ogni volta che apri una nuova finestra di terminale o accedi al tuo sistema dalla riga di comando, vedrai la tua shell predefinita. Per cambiare la shell che vedi al momento dell'iscrizione, nota come shell di accesso, generalmente puoi utilizzare chsh , o "Cambia shell", comando.

    Per usare questo comando, devi prima trovare il percorso completo della tua shell con il comando which. Ad esempio, supponiamo di voler passare alla shell zsh. Avremmo eseguito il seguente comando:

    quale zsh

    Su Ubuntu, questo ci dice che il file binario zsh è memorizzato in / usr / bin / zsh.

    Esegui il seguente comando, inserisci la tua password e ti verrà richiesto di scegliere una nuova shell di login:

    chsh

    Secondo il comando sopra, entreremmo / Usr / bin / zsh . La shell zsh sarebbe quindi il nostro valore predefinito finché non avessimo eseguito il chsh comando e cambiato di nuovo.