www.wikidata.de-de.nina.az
Bash auch BASH oder bash die Bourne again shell ist eine freie Unix Shell unter GPL Bash The Bourne again shellBeispiel einer bash SitzungBasisdatenMaintainer Chet RameyEntwickler ursprunglich Brian FoxErscheinungsjahr 8 Juni 1989Aktuelle Version 5 2 21 1 9 November 2023 Betriebssystem verschiedeneProgrammiersprache C 2 Kategorie KommandozeileninterpreterLizenz GNU General Public License Version 3 0 oder spater 3 deutschsprachig jawww gnu org software bash Als Shell ist Bash eine Mensch Maschine Schnittstelle die eine Umgebung englisch environment bereitstellt in der zeilenweise Texteingaben und ausgaben moglich sind Letzteres erfolgt uber die Befehlszeile in die Befehle eingetippt und durch Betatigen der Eingabetaste eingegeben werden Gleichzeitig ist Bash eine Skriptsprache die schon beim Booten vieler Linux Distributionen zum Einsatz kommt Bash ist elementarer Bestandteil des unixahnlichen Betriebssystems GNU und gehort zum GNU Projekt Auch bei den meisten auf GNU Linux aufbauenden Betriebssystemen ist Bash die voreingestellte Shell Daruber hinaus war Bash 3 x von 2003 bis 2019 die voreingestellte Shell in macOS von Apple 10 3 10 14 wurde allerdings aus lizenzrechtlichen Grunden nie auf Version 4 0 oder hoher aktualisiert Der Name Bash ist im Englischen mehrdeutig to bash the bash und erfuhr im Laufe der Zeit weitere meist humoristische Bedeutungen Inhaltsverzeichnis 1 Geschichte 2 Funktionalitat 2 1 Vergleich mit anderen Shells 2 2 Subshell 2 3 Login Shell 2 4 Konfiguration 2 5 Eingebaute Befehle 2 6 Platzhalter 2 7 Ein und Ausgabe Umleitung 2 8 set Optionen 2 9 Umgebungsvariablen 2 10 Eigene Umgebungsvariablen 2 11 Programmierung 3 Sicherheit 4 Literatur 5 Weblinks 6 EinzelnachweiseGeschichte BearbeitenBrian Fox schrieb die Bash 1987 fur das GNU Projekt und wurde dabei von der FSF bezahlt 4 1990 wurde das Projekt von Chet Ramey ubernommen Version 3 erschien am 27 Juli 2004 Version 4 erschien am 20 Februar 2009 und brachte einige Neuerungen mit sich Darunter sind eine neue Ausgabeumleitung assoziative Arrays und eine neue Wildcard 5 6 Am 7 Januar 2019 folgte Bash 5 zu den Neuerungen zahlten diesmal etliche erganzte Shellvariablen eine flexiblere Handhabung der Historie und die Moglichkeit die Werte lokaler Variablen aus einem ubergeordneten Scope zu ubernehmen 7 Funktionalitat BearbeitenVergleich mit anderen Shells Bearbeiten Die Shell ist weitgehend kompatibel zur Bourne Shell sh und beherrscht zusatzlich sowohl die meisten Funktionen der Kornshell ksh als auch Teile der C Shell Syntax wie zum Beispiel die Historie zuvor eingegebener Befehle die RANDOM Variable und die POSIX Form der Befehlssubstitution wurden ubernommen Einige Elemente wie etwa die Wildcard wurden von der Z shell zsh ubernommen Auch wurde sie um Funktionen wie z B die Ganzzahlarithmetik ohne die Ausfuhrung externer Prozesse und Vereinfachung der I O Umleitungen erweitert Bash bietet anhand ihrer benutzerspezifischen Konfigurationsdatei bashrc ausserdem die Moglichkeit jedem Benutzer eigene Einstellungen wie eine individuelle Gestaltung der Eingabeaufforderung Prompt sitzungsubergreifend zu ermoglichen Subshell Bearbeiten Eine Subshell ist ein Shellprozess der von einer Shell erzeugt wurde Programme die durch Eingabe eines Kommandos in eine Shell zur Ausfuhrung gebracht werden werden betriebssystembedingt in einer Subshell gestartet Bevor die Shell ein Programm als Kindprozess starten kann muss sie einen Shellprozess erzeugen Bei der Ausfuhrung eines Programms aus der grafischen Benutzeroberflache heraus ist jedoch keine Shell oder Subshell involviert Subshells werden automatisch bei der Verwendung einer Reihe von Bashfeatures erzeugt Beispielsweise werden alle Befehle einer Pipeline in einer eigenen Subshell ausgefuhrt Shells in grafischen Oberflachen wie kterm oder gnome terminal sind keine Subshells da ihr Elternprozess keine Shell ist Login Shell Bearbeiten Wird die Bash mit einem Programm gestartet das der Anmeldung an der Konsole dient wie z B login su ssh o a oder mit der Option laufgerufen fungiert sie als interaktive Login Shell Die Verwendung der Bash als Login Shell fur einen Benutzer wird durch den entsprechenden Benutzereintrag in der etc passwd festgelegt Das Verhalten einer Login Shell weicht von dem einer Nicht Login Shell ab Wie jede Shell liest die Bash zunachst die systemweite Konfigurationsdatei etc profile und fuhrt die darin enthaltenen Anweisungen aus danach sucht sie im Benutzerverzeichnis des angemeldeten Benutzers der Reihe nach bash profile bash login profile wobei nur die erste gefundene Datei gelesen wird Mit dem Beenden der Login Shell wird der angemeldete Benutzer abgemeldet logout oder exit oder D CTRL D oder auf der deutschen Tastatur STRG D Bei der Abmeldung wird sofern vorhanden die bash logout ausgefuhrt Konfiguration Bearbeiten Die Bash wird durch eine Reihe von Konfigurationsdateien konfiguriert Hierbei ist zu unterscheiden zwischen systemweiter und benutzerspezifischer Konfiguration Die systemweiten Einstellungen der Bash werden je nach Distribution in der etc bash bashrc oder der etc bashrc gespeichert Die systemweite etc profile wird schon durch die Login Shell ausgewertet Das Shell Profil wird jedes Mal ausgefuhrt wenn eine Shell Instanz startet also auch aber nicht nur dann wenn eine Login Shell gestartet wird Im Verzeichnis etc skel werden Schablonen der Konfigurationsdateien bereitgestellt die in das Heimatverzeichnis eines neu erstellten Benutzers kopiert werden Eingebaute Befehle Bearbeiten Die Bash enthalt zahlreiche eingebaute Befehle und reservierte Worter Zu den eingebauten Befehlen zahlen beispielsweise a href Alias Unix html title Alias Unix alias a a href Cd Kommandozeilenbefehl html title Cd Kommandozeilenbefehl cd a a href Echo Kommando html class mw redirect title Echo Kommando echo a exit help a href Kill Unix html title Kill Unix kill a logout oder a href Pwd Unix html title Pwd Unix pwd a und zu den reservierten Wortern zahlen die fur die Bash Programmierung notigen Schlusselworter wie case for function oder while Platzhalter Bearbeiten Als Platzhalter verwendet die Bash den fur beliebig viele Zeichen also auch keines und das fur genau ein Zeichen Mit lassen sich auch Zeichenmengen und mit sogenannte Klammerexpansion angeben Beispiele user1 blablubb test ls datei datei datei1 datei2 datei3 datei4 datei5 datei6 Auch datei ohne Nummer user1 blablubb test ls datei datei1 datei2 datei3 datei4 datei5 datei6 user1 blablubb test ls datei 1 3 Wertebereich datei1 datei2 datei3 user1 blablubb test ls datei 135 Wertemenge datei1 datei3 datei5 user1 blablubb test touch test 1 5 Wertebereich fur Klammerexpansion user1 blablubb test ls test test1 test2 test3 test4 test5 user1 blablubb test Ein und Ausgabe Umleitung Bearbeiten Wie in Unix ublich unterstutzt die Bash die Umlenkung der drei Standard Datenstrome auch Standardkanale die mittels der sogenannten Dateideskriptoren gehandhabt werden Es sind dies die Standardeingabe stdin Kanal 0 die Standardausgabe stdout Kanal 1 und die Standardfehlerausgabe stderr Kanal 2 Ein in der Bash ausgefuhrtes Programm liest von der Standardeingabe ublicherweise die Tastatur und gibt das Ergebnis an die Standardausgabe weiter ublicherweise der Bildschirm Gewohnlich werden Fehlermeldungen uber die Standardfehlerausgabe stderr auf der Standardausgabe stdout also am Bildschirm ausgegeben wie das folgende Beispiel verdeutlicht user blablubb test ls l root test home user test insgesamt 0 rw r r 1 user1 users 0 Feb 11 20 03 datei1 rw r r 1 user1 users 0 Feb 11 20 03 datei2 ls Offnen von Verzeichnis root nicht moglich Keine Berechtigung Die Kanale konnen auch kurzer uber ihre Nummern angesprochen werden Die Standardkanale konnen auch umgeleitet werden indem hinter dem jeweiligen Kommando die Umlenkzeichen lt Kanal 0 gt Kanal 1 und Verkettung von Ein und Ausgabe verwendet werden In obigem Beispiel wurde die Fehlermeldung zusammen mit der Standardausgabe auf dem Bildschirm ausgegeben Will man Fehler und Standardausgabe trennen und in verschiedenen Dateien speichern kann man das mittels der Kanalnummern tun user blablubb test ls l root test gt ls txt 2 gt ls err txt Nachfolgend wird die Standardausgabe von ls txt in die Datei verzeichnis info umgeleitet und danach von less als Standardeingabe eingelesen user blablubb test ls txt gt verzeichnis info user blablubb test less lt verzeichnis info Mit der Pipe lassen sich Kommandos verketten indem die Ausgabe des ersten mit der Eingabe des zweiten Kommandos verbunden wird was sich fast beliebig verlangern lasst user blablubb test ls l etc grep d wc l Der Mechanismus der Umlenkung der Standardkanale und die Pipe sind keine Besonderheit der Bash set Optionen Bearbeiten Die Bash verfugt uber 27 Optionen mit denen ein anderer Betriebsmodus eingestellt werden kann Alle moglichen Einstellungen konnen mit user set o aufgelistet werden wobei mit der Option o die Modi gelistet werden bzw gesetzt werden und mit der Option o die Option wieder aufgehoben wird Das ist dabei als durchgestrichenes zu lesen Gebrauchlich sind die Optionen noclobber mit der der Ausgabeumleitung untersagt wird vorhandene Dateien zu uberschreiben die Option noglob bei der fur Dateinamen keine Platzhalter wie und moglich sind und die Option xtrace bei der jedes Shell Kommando vor der Ausfuhrung nochmals ausgegeben wird und zwar mit den intern vorgenommenen Erweiterungen was bei der Fehlersuche nutzlich sein kann Das Uberschreiben der Ausgabeumleitung wird unterdruckt user echo hallo gt hallo txt user echo hallo gt hallo txt user set o noclobber user echo hallo gt hallo txt su hallo txt Kann existierende Datei nicht uberschreiben user set o noclobber user echo hallo gt hallo txt Man kann Dateinamen mit Stern und Fragezeichen erzeugen Vor der Abfrage mit ls sh muss die Option wieder zuruckgesetzt werden denn sonst wurde nach der Datei sh gesucht werden user set o noglob user touch da tei sh user touch dat ei sh user set o noglob user ls sh da tei sh dat ei sh Die dritte Zeile zeigt die von der Bash vorgenommenen Erweiterungen an user set o xtrace user ls txt ls color auto hallo txt test txt text txt hallo txt test txt text txt Alle Optionen konnen auch mittels einer Kurzschreibweise gesetzt werden beispielsweise ist set C gleichbedeutend mit set o noclobber Umgebungsvariablen Bearbeiten In der Bash konnen Variablen auf mehrere Arten definiert werden Grundsatzlich unterscheidet man zwischen lokalen Variablen die nur in der Shell gelten in der sie definiert wurden und globalen Variablen die auch in Sub Prozessen zugewiesen sind Lokale Variablen konnen erzeugt werden mit user var var1 user var var zwei user let var var3 user declare var var4 und globale Variablen werden definiert mit user declare x var var5 user export var var6 Angesprochen werden die Variablen mit dem Zeichen user echo var Statt globale Variable ist allerdings im Unix Umfeld der Ausdruck Umgebungsvariable sehr viel gelaufiger und passender weil in manchen Programmiersprachen der Ausdruck globale Variable eine andere Bedeutung als Umgebungsvariable hat Eine Wertzuweisung fur eine Umgebungsvariable wirkt nur auf Unterprogramme Kindprozesse wahrend manche Programmiersprachen es erlauben Variablenwerte auch fur Oberprogramme zu setzen etwa durch Voranstellen von global in TeX Eigene Umgebungsvariablen Bearbeiten Die Bash verfugt uber zahlreiche eigene Umgebungsvariablen die auch haufig von anderen Kommandos ausgewertet werden Bekannt sind die Variablen PATH fur den Suchpfad LANG fur die Einstellung der Sprache oder PS1 fur den Prompt Beispielsweise konnen die englischsprachigen Hilfeseiten des Programms ls mit dem nachfolgenden Befehl aufgerufen werden Hier wird eine Sub Shell erzeugt darin die LANG Umgebungsvariable uberschrieben und anschliessend der Befehl man ls ausgefuhrt user LANG en man ls Programmierung Bearbeiten Bash Programmierung unterscheidet sich in vielen Punkten von anderen Programmiersprachen So wird beispielsweise bei der Verzweigung traditionell die Bedingung nicht von der Shell selbst ausgewertet sondern an ein weiteres Programm ubergeben if Bedingung then Falls Bedingung wahr ist wird dies ausgefuhrt else Falls Bedingung falsch ist wird dies ausgefuhrt fi Die beiden eckigen Klammern sind keine Begrenzer sondern ein Synonym fur den integrierten builtin Shell Befehl test Der Befehl test pruft die Bedingung und liefert einen Ruckgabewert 0 wahr oder 1 falsch der von der if Anweisung verarbeitet wird Der oben angefuhrte Code ist also identisch mit der folgenden Schreibweise if test Bedingung then Falls Bedingung wahr ist wird dies ausgefuhrt else Falls Bedingung falsch ist wird dies ausgefuhrt fi Heutzutage existiert jedoch auch ein eingebauter Ausdruck der ohne externen Befehl auskommt daher nicht mehr den Beschrankungen unterliegt denen die Befehlsform unterlag und so unter anderem auch keine Anfuhrungszeichen um Variablen mehr benotigt if Bedingung then Falls Bedingung wahr ist wird dies ausgefuhrt else Falls Bedingung falsch ist wird dies ausgefuhrt fi Hier kann die Bedingung nun z B auch Operatoren wie lt gt kleiner als und grosser als und Vergleich mit Regularem Ausdruck enthalten Diese Variante wird daher wenn keine Kompatibilitat zu alteren Versionen benotigt wird generell empfohlen Jedoch kann auch weiterhin der Ruckgabewert 0 127 wobei gt 0 falsch eines beliebigen Programmes verarbeitet werden Nicht nur der des test Befehls Als Beispiel wird hier der a href Kill Unix html title Kill Unix kill a Befehl verwendet um zu testen ob ein Prozess mit einer bestimmten Nummer noch lauft bzw in der Lage ist Signale entgegenzunehmen if kill 0 1234 then Prozess 1234 lauft else Prozess 1234 lauft nicht fiSicherheit Bearbeiten Hauptartikel Shellshock Sicherheitslucke Im September 2014 wurde eine gravierende Sicherheitslucke unter dem Namen Shellshock bekannt Die seit langem bestehende Lucke ermoglicht dass beim Start einer neuen Shell Schadcode der per Umgebungsvariable eingefugt wurde ungepruft ausgefuhrt wird 8 Die Lucke gilt seit Oktober 2014 als geschlossen 9 10 Literatur BearbeitenChristian Meissner Bash Arbeiten und programmieren mit der Shell Open Source Press 2011 ISBN 978 3 941841 44 4 Karsten Gunther Bash kurz amp gut 2008 ISBN 978 3 89721 533 7 Cameron Newham Bill Rosenblatt Learning the Bash Shell 3 Aufl O Reilly amp Associates 2009 ISBN 0 596 00965 8 Jurgen Wolf Stefan Kania Shell Programmierung Das umfassende Handbuch Galileo Computing 4 Aufl 2013 ISBN 978 3 8362 2310 2 Weblinks Bearbeiten nbsp Wikibooks Linux Praxisbuch Shellprogrammierung Lern und Lehrmaterialien Homepage Bash auf der GNU Seite SelfLinux Shellprogrammierung Advanced Bash Scripting Guide englisch Oh My BashEinzelnachweise Bearbeiten bash 5 2 21 tar gz 9 November 2023 abgerufen am 9 November 2023 The bash Open Source Project on Open Hub Languages Page In Open Hub abgerufen am 3 September 2018 Licensing of Bash abgerufen am 3 Oktober 2016 About the GNU Project GNU Project Free Software Foundation FSF 24 April 2011 archiviert vom Original am 24 April 2011 abgerufen am 11 Mai 2019 nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www gnu org heise de NEWS Bash 5 0 release available Chet Ramey 7 Januar 2019 abgerufen am 12 Oktober 2020 ShellShock Standard Unix Shell Bash erlaubt das Ausfuhren von Schadcode heise online Michal Zalewski Bash bug the other two RCEs or how we chipped away at the original fix CVE 2014 6277 and 78 In lcamtuf blog 1 Oktober 2014 abgerufen am 31 Oktober 2014 englisch Bash Code Injection Vulnerability via Specially Crafted Environment Variables CVE 2014 6271 CVE 2014 7169 Red Hat 2 Oktober 2014 abgerufen am 1 November 2014 englisch Abgerufen von https de wikipedia org w index php title Bash Shell amp oldid 237900110