GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Bash è ovunque (nella maggior parte se non in tutte le distribuzioni Linux)?

Cronologia (acquisita non attraverso la ricerca ma trascorrendo troppo tempo in giro con le persone dei Bell Labs):

  1. All'inizio (se si considera che l'inizio è Unix versione 7) c'era la shell Bourne. Steve Bourne fu il primo a dimostrare che la shell che controllava l'interazione dell'utente poteva essere un programma utente e non una parte speciale del sistema operativo. Una svolta storica. La shell stessa era relativamente pulita per lo scripting, ma non aveva la modifica della riga di comando o il controllo del lavoro. Introduzione alla Unix Shell di Bourne è ancora utile per gli utenti principianti oggi.

    Modifica :Ho ignorato un po' di "preistoria" di Ken Thompson e John Mashey, anche loro di Multics. Sono sicuro che Bourne era a conoscenza di tutto questo lavoro (era nello stesso laboratorio, 1127, presso i Bell Labs), ma il guscio di Bourne era definitivo e il lavoro precedente ebbe poca influenza se non come interpretato da Steve Bourne. Ad esempio, sebbene Ken in seguito abbia scritto il compilatore Plan 9 C e sia stato molto influente su Plan 9, l'articolo di Tom Duff sulla shell Plan 9 (rc) menziona solo la shell di Bourne, non quella di Thompson.

  2. La shell è solo un programma utente, quindi chiunque può scriverne uno. Mentre Unix versione 7 veniva creato nel New Jersey, Berkeley Unix veniva creato in California. Bill Joy a Berkeley ha scritto csh , la shell C. Joy ha aggiunto il controllo del lavoro e la cronologia, e successivamente l'editing della riga di comando, ma non era a conoscenza del lavoro di Bourne e quindi ha basato il suo linguaggio sulla shell Thompson (che ho considerato "preistorico" nel punto precedente). La comunità Unix amava il job control, ma amava anche il linguaggio di Bourne. Per una polemica non particolarmente positiva contro il linguaggio csh, vedere Csh Programming Considered Harmful. Per un certo periodo, molte persone hanno usato csh in modo interattivo per le sue caratteristiche di controllo del lavoro e cronologia, ma utilizzava il sh di Bourne scrivere sceneggiature. Questa situazione era tutt'altro che ideale.

    Modifica :Grazie a DigitalRoss per avermi chiarito la cronologia di csh . Dato che ho ricevuto la mia istruzione da persone che si riferiscono a BSD come "l'eresia di Berkeley", ero piuttosto a corto di fatti.

  3. Dave Korn dei Bell Labs ha eseguito una brillante reingegnerizzazione della shell Bourne per produrre la shell Korn (ksh). Era completamente retrocompatibile con la shell Bourne sh ma ha fornito un carico di miglioramenti inestimabili. ksh è diventato la base di uno standard POSIX ed è stato fornito come standard con il software Sun. (Questo nonostante il fatto che Bill Joy abbia lasciato Berkeley per aiutare a fondare Sun ed è stato uno dei loro principali ragazzi del software.)

  4. Bell Labs e AT&T stupidamente non riescono a fare ksh fonte aperta. ksh88 è ampiamente utilizzato, ma avere fonti non è legale. Alcune persone diventano così dipendenti da diventare criminali digitali.

    Modifica :Era davvero così stupido? Difficile da sapere. Berkeley stava già dando via Unix, e presto sarebbero seguite altre società, ma questa era ancora l'era in cui i Corporate Masters credevano nel far pagare Unix. Ma i risultati:AT&T Unix è morto, dopo essere stato svenduto a varie parti un numero qualsiasi di volte. BSD e i suoi derivati ​​sono vivi e vegeti, ma queste nuove cose chiamate "Linux" e "GNU" hanno un'enorme frazione di mindshare che un tempo apparteneva ai Bell Labs.

  5. La Free Software Foundation fa un'implementazione "clean-room", da zero di una shell POSIX, prendendo tutte le idee di Dave Korn come attuali, oltre al solito stile FSF aggiungendo nuove funzionalità proprie, come il completamento programmabile. La chiamano shell "Bourne again", o bash .

  6. A metà degli anni '90 AT&T open source ksh93 , ma ormai è troppo tardi per un'adozione diffusa. L'accordo di licenza è stranamente non standard. bash e ksh divergere e ksh non raggiunge mai una quota di mercato proporzionata al suo posto nella storia.

Lezioni:

  • Vince il primo prodotto adeguato da immettere sul mercato (sh).

  • Le persone adorano le nuove funzionalità (controllo dei processi, completamento dei comandi), ma le amano ancora di più quando i loro vecchi script continuano a funzionare.

  • Modifica :I professori di ingegneria dovrebbero lasciare la storia agli storici della scienza :-)


Bash ha due cose completamente diverse.

  1. È un bel guscio. È forse una delle 2 shell (l'altra è zsh) che integrano alcuni dei fantastici csh funzioni come ! sostituzione della storia nella sintassi posix. Ha molte estensioni, inclusi gli array.

  2. È la shell FSF/GNU. Nel mondo open source, questo gli conferisce una sorta di prestigio.

Dovrei anche aggiungere che non è sempre l'impostazione predefinita. ash è spesso usato come /bin/sh in modo che mentre bash potrebbe essere la shell interattiva, ash è la shell "basta eseguire il file di comando". Questo perché ash è più piccolo e più veloce e contiene le funzionalità posix, quindi è un sottoinsieme appropriato. Usando ash come shell interattiva a volte è problematico. Su, diciamo, NetBSD, funziona bene, perché lì è costruito con tutte le funzionalità. È una specie della loro unica shell mentre bash è un pacchetto esterno. Ma su Linux ash è solitamente considerato non interattivo, quindi lo compilano senza la cronologia e senza la (importante) modifica della riga sulla teoria che è usato solo per eseguire quegli enormi gnu configure script.

Racconto di due conchiglie

La vera storia della conchiglia

AGGIORNAMENTO: C'è una cronologia imprecisa della shell che viene copiata da un posto all'altro sul web e le persone ci credono comprensibilmente. Cercherò di fornire una versione accurata e fornirò alcuni link per sostenerla qui.

  1. La prima shell non era certamente la shell Bourne, ma è stata scritta dallo stesso Ken Thompson e distribuita in V6, che è la versione che AT&T ha inviato a varie università e laboratori governativi. Questo è ciò che ha messo Unix sulla mappa. Aveva tutte le basi, <, >, >>, |, & , ma conteneva semplicemente goto controllare la sintassi tramite un programma esterno che ha cercato sullo standard input. Allora non c'erano script di shell complessi. Le shell successive aprirebbero l'input del comando su un fd separato. Può sembrare semplice oggi, ma nel film horror che era l'informatica degli anni '70 era la cosa migliore sulla terra. Che tu ci creda o no, questa antica conchiglia ha oggi il suo stream Twitter e, naturalmente, una home page.
  2. La seconda shell era csh , scritto (come era vi ) di Bill Joy alla UCB. Questo era prima di GNU readline e NetBSD editline, quindi deve essere sembrato perfettamente ragionevole fare la storia con il ! sintassi. Csh ha aggiunto la maggior parte delle funzionalità della shell odierne ma con la sintassi csh. csh non ha modificato alcuna sintassi , gratuitamente o in altro modo. In realtà era retrocompatibile con la shell Thompson e originariamente includeva il codice sorgente di TS.
  3. La terza shell era la shell Bourne, con una sintassi diversa. Unix veniva sviluppato in parallelo presso UCB e AT&T. Questa shell aveva uno strano allocatore di memoria (penso che usasse solo più memoria, intrappolasse SIGSEGV, facesse un nuovo brk(2) e poi riprovasse) che rendeva difficile l'esecuzione sui nuovi port Unix, quindi osh e csh rimase popolare per qualche tempo. Non c'era internet e c'era una licenza SW, quindi in quell'ambiente è possibile che Stephen Bourne non sapesse della shell di Joy e certamente Joy non sapesse di Bourne. È possibile che le due shell si siano incontrate per la prima volta quando UCB ha ottenuto un VAX e una versione preliminare dell'ormai dimenticato Unix/32V. Ricordo che Bill si lamentava dell'allocazione della memoria. Nota che entrambe le shell erano retrocompatibili con la shell V6 , hanno semplicemente esteso la sintassi in direzioni diverse.
  4. Ora c'erano davvero più shell incompatibili, a cui AT&T ha aggiunto la ksh compatibile con Bourne . Alla fine, csh aveva un codice sorgente semi-disponibile, ma era coinvolto in una causa legale tra AT&T e l'Università della California. Tuttavia, questi erano i giorni di gloria di BSD Unix poiché le aziende sofisticate che potevano permettersi la quota di $ 50.000 acquistavano la licenza AT&T ma installavano le distribuzioni 4.x BSD e le università la ricevevano gratuitamente.
  5. In questa situazione con molti problemi legali e tecnici, sono state intraprese varie implementazioni indipendenti. Almeno altrettanti sono andati con il csh sintassi come è andata con la sintassi della shell Bourne, e alcuni hanno unito i due. Hai avuto almeno tcsh , zsh , bash e ash . La sintassi Bourne era "ufficiale", essendo parte dei rilasci di AT&T, ma a quei tempi BSD era piuttosto importante, e Sun, inizialmente BSD, distribuiva una buona parte del SW Unix che il mondo incontrava.
  6. In parte a causa della causa USL, la FSF e Linux avevano un campo aperto. Nel frattempo, AT&T era riuscita a litigare con una delle poche entità sulla terra più grandi di loro (Lo Stato della California) e alla fine non vinsero la causa, e così alla fine la distribuzione BSD era su una solida base legale piede. Ma a quel punto Linux e bash erano ovunque, e quindi oggi BSD è una nicchia.
  7. Infine, bash è una buona shell (sebbene apparentemente rinnegata privatamente dal suo autore originale) e merita pienamente il merito del proprio successo. csh sarebbe stato eclissato da tcsh e zsh anche se ash, bash e ksh non avessero vinto la guerra della sintassi.

Da aggiungere a quanto detto da @DigitalRoss

  • Bash è un sostituto completo di superset per posix-sh, al punto che se chiamato come /bin/sh emulerà completamente posix-sh. Posix-sh era lo "standard" per i sistemi unix commerciali come shell a denominatore comune. Quindi, qualcosa che inizia lì e si basa su di esso inizia con molto.

Linux
  1. Le 5 migliori distribuzioni Linux più stabili nel 2022

  2. Linux – Perché usiamo Su – e non solo Su?

  3. Perché il file di traduzione Bash non contiene tutti i testi di errore?

  4. Linux – Perché Setuid non funziona??

  5. Linux:perché Rsync su Linux non conserva tutti i timestamp (ora di creazione)?

Come utilizzare il comando Declare in Linux Bash Shell

Come installare Linux Bash Shell su Windows 10

Risoluzione dei problemi di errore "Bash:comando non trovato" in Linux

Linux:perché Apt Autoremove non rimuove tutti i vecchi pacchetti del kernel in una volta?

Esegui tutti gli script della shell nella cartella

perché eliminare la cronologia di bash non è sufficiente?