siehe auch: [[shell]] {{tag>shell bash bourne .sh shellscript BourneAgainShell}} ====== Bash ====== Kurz-Anleitung: {{::bashanleitung.pdf|PDF (Powerpoint)}} [[bash:string_operations|String-Operations]] Quelle((http://wiki.ubuntuusers.de/Bash)) Die Bash ist mittlerweile so etwas wie die Standard-Shell [2] unter Linux. Dabei steht Bash für '''B'''ourne '''a'''gain '''Sh'''ell. = Basics = Im weiteren werden einige Funktionen beschrieben, die Bash-spezifish sind, sich aber durchaus auch in anderen Shell-Umgebungen wiederfinden können. == History == In der Bash ist es möglich, die zuletzt eingegebenen Befehle mit den Pfeiltasten durchzublättern oder zu durchsuchen. Dies vereinfacht die Bedienung enorm. Als Standardwert werden die letzten 500 Befehle gespeichert. Einstellen lässt sich dieser Wert mit einem Editor [1] in der Datei '''~/.bashrc'''. Mit dem Eintrag ''export HISTSIZE=2000'' wird die History z.B. auf 2000 Befehle erweitert. === Gezieltes Blättern in der History aktivieren === Um die History der Bash gezielt zu durchblättern, lohnt es sich, folgende Zeilen in der Datei '''/etc/inputrc''' einzufügen [1]: "\e[5~": history-search-backward "\e[6~": history-search-forward Möchte man diese Funktion nur für einen bestimmten User aktivieren und nicht systemweit, so kopiert man die Datei '''/etc/inputrc''' nach '''/home/$USER/.inputrc''', und nimmt die Änderung dort vor. Durch drücken der Tasten [[Vorlage(Tasten, "Bild auf")]] und [[Vorlage(Tasten, "Bild ab")]] kann man die History der Bash anschließend nach Einträgen durchsuchen, welche mit den Worten beginnen, die ''vor der aktuellen Cursorposition'' stehen. '''Beispiel :''' #!vorlage Befehl sudo vi⌷ /etc # ⌷ = Cursor Drückt man jetzt [[Vorlage(Tasten, "Bild auf")]] oder [[Vorlage(Tasten, "Bild ab")]], wird die History nach Einträgen durchblättert, welche mit '''''sudo vi''''' beginnen. === Durchsuchen der History === Die Befehlsliste lässt sich mit der Tastenkombination [[Vorlage(Tasten, Strg+r)]] durchsuchen. Durch Eingabe von history lässt sich auch eine Liste der eingegebenen Befehle ausgeben, die man mit Hilfe von '''egrep''' durchsuchen kann: history| egrep webserver gibt zum Beispiel alle Befehle an, die die Zeichenfolge "webserver" enthalten haben. Indem man einer Zeichenfolge ein Ausrufezeichen voranstellt, sucht die Bash in der History nach dem letzten Eintrag, der mit den selben Zeichen beginnt und führt diesen Befehl aus. === Deaktivierung der History === Es kann aus Sicherheitsgründen unter bestimmten Umständen sinnvoll sein, die History der Bash zumindest für root zu deaktivieren. Dazu muss man die Datei '''~/.bash_history''' löschen und in der Datei '''~/.bashrc''' folgende Zeile eintragen: unset HISTFILE === Bestimmte Befehle von der History ausschließen === Will man nur bestimmte Befehle nicht in der History speichern, so kann man mit der Variable ``HISTIGNORE`` eine schwarze Liste erstellen. Hierzu trägt man beispielsweise HISTIGNORE="truecrypt -P*:sudo*" in die Datei '''~/.bashrc''' ein [1]. Dadurch werden alle Befehle, die mit ``truecrypt -P`` oder mit ``sudo`` beginnen, von der History ausgeschlossen. == Autovervollständigung == Die Bash bietet die Möglichkeit, Befehle und Dateinamen nach dem Eingeben der ersten Zeichen automatisch zu vervollständigen. Dies erreicht man durch drücken der Tabulatortaste [[Vorlage(Tasten, tab)]]. Beispiel: cd /home/bla ergibt durch das Drücken von Tab: cd /home/blackbird Allerdings nur, wenn der Ordner '''/home/blackbird''' existiert. Sollte es die Ordner blackbird_1 und blackbird_2 geben macht er das: cd /home/bla ergibt das Drücken von Tab: cd /home/blackbird_ und wartet, bis ein zusätzlicher Buchstaben eingegeben wird. Man kann sich mittels "Doppeltab", also das erneute Drücken von Tab dann auch die zur Verfügung stehenden Möglichkeiten zur Vervollständigung ausgeben lassen. Das Piepen, das ertönt, wenn die Autovervollständigung aufgrund von Mehrdeutigkeiten fehlschlägt, lässt sich durch folgenden Eintrag z.B. in der '''~/.bashrc''' (systemweit: '''/etc/bash.bashrc''') ausschalten: set 'bind bell-style none' In '''/etc/inputrc''' lassen sich ebenfalls einige (systemweite) Änderungen vornehmen: set bell-style none --> Ruhe set bell-style visible --> Window flasht Möchte man diese Funktion nur für einen bestimmten User aktivieren und nicht systemweit, so kopiert man die Datei '''/etc/inputrc''' nach '''/home/$USER/.inputrc''', und nimmt die Änderung dort vor. Die Bash lässt sich durch den folgenden Eintrag dazu bewegen, die existierenden Möglichkeiten gleich anzuzeigen (ohne den Doppeltab): set show-all-if-ambiguous on Groß/Kleinschreibung ignorieren: set completion-ignore-case on Normalerweise komplettiert die Bash soweit, wie eindeutige Möglichkeiten vorhanden sind und wartet dann auf eine Eingabe vom Benutzer. Man kann aber auch durch die vorhandenden Möglichkeiten einfach 'durchtabben', indem man in '''/etc/inputrc''' folgendes (nach der if mode=emacs Zeile) einträgt: Control-i: menu-complete Um doch noch die Variante mit Anzeige der Möglichkeiten zu Verfügung zu haben, muss diese Zeile eingefügt werden: "\C- ": complete Jetzt kann man mit Tab durch die Möglichkeiten wechseln, und mit Strg-Leertaste die Möglichkeiten anzeigen lassen. === Programmierbare Vervollständigung der Bash aktivieren === Mit dieser Funktion lässt sich die Autovervollständigung nicht nur für Befehle und Dateinamen sondern auch zum Beispiel für Optionen verwenden. Die programmierbare Vervollständigung der Bash lässt sich aktivieren, in dem man in '''/etc/bash.bashrc''' oder '''~/.bashrc''' den folgenden Block wie in diesem Beispiel # aktiviert Bashvervollständigung in interaktiven Shells if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi einkommentiert. Ausprobieren lässt es sich zum Beispiel mal mit apt-get install und dem Drücken der [[Vorlage(Tasten, Tab)]]-Taste. ## * [:Bash/Autocomplete: Autocomplete] Die Bash erkennt angefangene Befehle und kann sie selbst vervollständigen. == Wildcards == Joker oder Wildcards können für beliebige Zeichen stehen. Zum Beispiel kann man mit ls *.png alle Dateien mit der Endung ''.png'' anzeigen. || ''' * ''' || ersetzt beliebig viele Zeichen || || ''' ? ''' || ersetzt genau ein Zeichen || Es ist auch möglich, Textteile aus Wortgruppen auszuwählen: || ''' {WORT1,WORT2,WORT3} ''' || Wenn eines der genannten Wörter vorkommt || An der Stelle wo diese Ersetzung auftritt muss eines der aufgeführten Wörter vorkommen. Zum Beispiel können wir auf diese Weise alle .png Dateien anzeigen: ls *.{png,PNG,Png,pNg,pnG,PNg,pNG} Es gibt auch die Möglichkeit, ein einzelnes Zeichen aus einer Liste an einer Stelle zu erwarten: || ''' [abcd] ''' || wenn einer der Buchstaben vorkommt || Obiges Beispiel lässt sich also auch so erreichen: ls *.[jJpP][pPnN][gG] findet .jpg und .png Dateien (würde jedoch auch *.ppg- oder *.jng-Dateien finden, wenn es sie gäbe). Wobei man mit || ''' [j-p] ''' || auch alle Buchstaben von j bis p auswählen kann || ls *.[k-p][m-r]g findet nun zum Beispiel auch eine *.log-Datei ## * [:Bash/Wildcards: Wildcards] Die Bash kann Textmuster erkennen. = Hintergrundprozesse = == Prozess direkt im Hintergrund starten == Um einen Prozess im Hintergrund zu starten (also von der Shell losgelöst), hängt man einfach ein & hinten an den Befehl an. === Beispiel: === xeyes& #oder /usr/bin/xeyes & == Prozess unterbrechen und/oder in den Hintergrund schicken == Wenn man ein Programm oder einen Prozess in der Shell gestartet hat, kann man ihn mit der Tastenkombination [[Vorlage(Tasten, Strg+Z)]] einfrieren. Nun ist die Shell wieder freigegeben und man kann zum Beispiel Daten, die vom Prozess verwendet werden bearbeiten oder sichern. Mit dem Befehl fg läuft der Prozess anschließend wieder (auf der Shell) weiter. Möchte man die Shell dauerhaft freigeben (also während der Prozess weiter läuft) gibt man statt dem fg bg ein, um den Prozess in den Hintergrund zu schicken. Nun kann man die Shell weiter benutzen oder auch schließen, während der Prozess im Hintergrund läuft. = Skripte = Viele Aufgaben lassen sich mit Hilfe von Bash-Skripten automatitisieren. Unter [:Skripte:] wird eine Beispielsammlung mit Skripten zusammengetragen. = Links = * [[http://bin-bash.de]] {de} bietet eine gute Einführung in die Bash * [[http://www-user.tu-chemnitz.de/~hot/unix_linux_werkzeugkasten/bash.html]] {de} Alles relevante zur Bash * [[http://www.tldp.org/guides.html#bbg]] {en} Bash Guide for Beginners von Machtelt Garrels * [[http://www.tldp.org/guides.html#abs]] {en} Advanced Bash-Scripting Guide von Mendel Cooper ---- # tag: Shell