Nützliches und Hilfreiches in der Bash, Teil 1
2010-02-14 14:41 (Kommentare: 7)
Die History-Funktion der Bash
In diesem Artikel geht es um viele nützliche Funktionen, die die Bash zur Verfügung stellt und die einem das Arbeiten innerhalb extrem erleichtern können, wenn man sie kennt und anwenden kann. Dazu gehört die History-Funktion, dazu gehören bestimmte Tastenkombinationen wie beispielsweise die TAB-Taste (die Taste mit dem Doppelpfeil oben links auf der Tastatur) und dazu gehören auch Ausrufezeichen. Das wird in diesem Artikel einsteigerfreundlich beschrieben.
Beginnen möchte ich mit der History-Funktion. Die Bash speichert standardmässig die letzten 500 Befehle , die man eingegeben hat, in einer Textdatei. Die Datei wird im home-Verzeichnis des einzelnen Users unter .bash_history abgelegt. Aufgerufen wird die History mit dem Wort 'history'. Durchblättert werden kann sie aber auch mit den Pfeiltasten. Drückt man die Pfeiltaste nach oben, dann erhält man den letzten Befehl; bei zweimaligen Drücken den vorletzten Befehl. Drückt man nun die Pfeiltaste nach unten, dann gelangt man wieder zum letzten Befehl. Nun ein Auszug aus meiner History:
helena@helena-home:~$ history
2 ls -a
3 cd /etc/
4 ls -a
5 cat fstab
6 man fsck
7 fsck
8 sudo apt-get update
9 sudo apt-get upgrade
Das sind nur die ersten paar Befehle, also die Befehle, die ich vor einiger Zeit eingegeben habe - kurzum die ältesten Befehle. Die neusten Eingaben sind unter den hohen Zahlen abgelegt. Wenn man sich aber nur die letzten 10 Befehle ansehen möchte, macht man das mit history 10.
helena@helena-home:~$ history 10
499 !
500 man history
501 histsize=1500
502 bistory
503 history
504 sudo apt-get upgrade
505 apt-get update
506 sudo apt-get update
507 history10
508 history 10
helena@helena-home:~$
Es können auch andere Argumente als eine Zahl dem history-Befehl übergeben werden. Die Optionen führe ich der Übersicht tabellarisch auf. (Vgl. K. Günther 'Die Bash, das unbekannte Wesen', LinuxUser, 08/2000)
| Option | Erklärung |
| -a (append) | Diese Option übergibt dem History-Befehl, die Aufgabe, die im History-Buffer abgelegten Befehle in die .bash-history zu schreiben. Im Buffer sind die Befehle aufgeführt, die innerhalb der laufenden Sitzung ausgeführt wurden. |
-c | Hierbei wird der History-Buffer gelöscht ohne zuvor in die .bash-history Datei geschrieben worden zu sein. |
-n | Noch nicht eingelesene Zeilen aus der .bash-history werden in den Buffer eingelesen. |
| -r (read history files) | Bei dieser Option wird die .bash-history komplett in den History-Buffer eingelesen. |
| -s (store) | Hierbei wird die letzte Zeile in die .bash-history eingelesen. Dabei wird allerdings die bis dato letzte Zeile bzw. der letzte Eintrag gelöscht. |
| -w (write history file) | Schreibt den Inhalt des Historybuffers in die History-Datei. Diese Datei wird dabei überschrieben. (Bei dieser Form werden keine Zeilennummern erzeugt.) Voreingestellt ist das Speichern in der Datei .bash-history. Folgt der Option aber ein Dateiname, so erfolgt die Ausgabe in die angegebene Datei. |
Gerade im Serverbetrieb ist es sinnvoll mehr als nur die letzten 500 Befehle gespeichert zu haben. Dazu vergrößert man einfach die Menge der zu speichernden Befehle.
helena@helena-home:~$ histsize=1500
helena@helena-home:~$
Nun werden 1500 Befehle in der .bash_history gespeichert. Es gibt auch die Möglichkeit nach bestimmten Befehlen zu suchen. Hierfür gibt es zwei unterschiedliche Wege. Gibt man !? + einen Teil des suchenden Befehles ein, wird der zuletzt mit dem Suchwort ausgeführte BEfehl direkt ausgeführt.
helena@helena-home:~$ !? apt-get
sudo apt-get upgrade
Da es sich hierbei um einen Sudo-Befehl handelt, wird auch sofort nach meinem Passwort gefragt. Diese Suchmöglichkeit ist also mit Vorsicht zu genießen. Es gibt aber auch die Möglichkeit mit der Tastenkombination Strg+r zu suchen.
helena@helena-home:~$
(reverse-i-search)`apt-get': sudo apt-get upgrade
Nach dem Drücken der Tastenkombination erscheint das (reverse-i-search). In den einfachen Anführungzeichen steht mein Suchwort und nach dem Doppelpunkt, der letzte Befehl der mit diesem Suchwort gebraucht wurde. Durch erneutes Drücken der Tastenkombination Strg+r werden mir auch die nachfolgenden möglichen Befehle mit meinem Suchwort angezeigt. In diesem Fall hier wieder sudo apt-get upgrade. Hierbei wird der Befehl aber erst in die Kommandozeile aufgenommen, wenn man die Enter-Taste drückt. Die Ausführung erfolgt erst, wenn man den Befehl auch bestätigt, durch erneutes Drücken der Entertaste.
Hat man beispielsweise einen Befehl eingegeben der Sudo-Rechte verlangt, aber das Sudo nicht voran gestellt, kann man sich das erneute Tippen des Befehles mit sudo !! sparen.
helena@helena-home:~$ apt-get update
E: Konnte Lockdatei /var/lib/apt/lists/lock nicht öffnen - open (13: Permission denied)
E: Kann das Listenverzeichnis nicht sperren
helena@helena-home:~$ sudo !!
sudo apt-get update
[sudo] password for helena:
Hole:1 http://security.ubuntu.com karmic-security Release.gpg
Und schon wird der Befehl mit den passenden Rechten ausgeführt. Es ist auch möglich einen bestimmten Befehl durch die Nummer, die ihm die History gegeben hat auszuführen. Dafür benötigt man ! + n (n= Nummer). Das sieht dann folgendermaßen aus:
helena@helena-home:~$ !508
history 10
499 !
500 man history
501 histsize=1500
502 bistory
503 history
504 sudo apt-get upgrade
505 apt-get update
506 sudo apt-get update
507 history10
508 history 10
helena@helena-home:~$
Die Änderungen wie die Menge der gespeicherten Befehle werden in der .bashrc gespeichert. Diese Datei befindet sich ebenfalls im home-Verzeichnis des Users. Die Datei genauso wie die .bash_history kann mit einem einfach Texteditor wie less oder more geöffnet werden. Es können noch weitere Änderungen an den Funktionen der History vorgenommen werden. Mit histcontroll='X' können verschiedene Einstellungen vorgenommen werden. Wenn 'X' gleich ignoredups gesetzt wird, werden nur die jüngeren doppelten Eingaben behalten. Ignorespace speichert auch die Kommandozeilen, die mit einem Leerzeichen beginnen. Standardmässig werden diese nicht gespeichert. Ignoreboth führt dazu, dass beide Einstellungen übernommen werden. Es werden also nur die jüngsten doppelten Befehle gespeichert und auch Befehlseingaben mit einem vorangegangen Leerzeichen werden mit in die History aufgenommen.
Eigentlich wollte ich mich mit weitaus mehr Tastenkombinationen und Helferlein auseinandersetzten, aber ich denke, dass reicht nun erst mal an Informationsfülle. Es wird also einen zweiten Teil dieses Artikels geben.
Quellen:
K. Günther 'Die Bash, das unbekannte Wesen', LinuxUser, 08/2000
Markus Dollinger 'So meistern Sie die Bash', 21.09.2009
huschi 'Bash-History richtig nutzen', 05.09.2007
Man-Page history
Nachtrag: Die von Xtra angemerkten Fehler sind nun verbessert. Ich hoffe, dass ich alle Fehler im gesamten Text gefunden habe. Aber mehrere Augen sehen ja immer mehr als zwei. Also, falls Euch noch Fehler auffallen, schreibt sie mir bitte. Vielen Dank!
Einen Kommentar schreiben
Kommentar von primus pilus | 2010-02-17
Grüße
Thomas
Kommentar von Xtra | 2010-02-18
Sher schoen geschrieben, wie immer.
Jedoch meine ich ein paar Tippfehler entdeckt zu haben (es sei denn die Jungs bei Ubuntu haben die Dateien echt umbenannt, was ich bezweifel).
Die history Datei heisst normalerweise: ".bash_history" und nicht ".bash-history".
Ebenso heisst die bash Konfigurationsinitialisierungsdatei ".bashrc" und nicht ".bashrsc".
Interessant ist evtl. noch zu erwaehnen, dass die .bashrc nicht die Einzige Datei ist, welche die Shell-Umgebung beeinflusst. Auf vielen Systemen liegen unter "/etc/profile.d/" noch einige scripte, welche beim starten einer neuen Shell ausgefyhrt werden. Dies kann Wechselwirkungen mit den Einstellungen in .bashrc erzeugen.
Weiterhin anzumerken ist, dass in der Regel die .bashrc von login shells (CTRL+ALT+F1 und du bist auf einem Terminal, auf Ubuntu evtl. auch F3 oder wo auch immer das Terminal ist) nicht ausgewertet wird sondern nur von subshells. Dies sowohl sind Terminals im X-Window-Environment (KDE, Gnome, ...) als auch shells die via "sudo -s" oder "su" gestartet werden.
Ich freue mich schon auf deinen naechsten Blog Eintrag.
Kommentar von Uhrwerk | 2010-02-20
Kommentar von Dunkelangst | 2010-02-22
Nun denn, jetzt lässt du es wohl auch etwas "ruhiger" angehen... ;-)
Schöne Grüße
Kommentar von Xtra | 2010-02-22
Sie wird uns aber hoffenlich bald wieder mit einem neuen Beitrag erfreuen. :)
(PS: Ich hoff ich durfte dies hier schreiben, ansonsten: Loeschen ;))
Kommentar von Helena | 2010-02-22
ja ich kränkel leider mal wieder. Mei wie mir das auf den Keks geht, aber was will man machen.
Der nächste Beitrag ist in der Mache, aber es dauert alles ein wenig länger mit einem dicken Schädel.
Liebe Grüße
Helena
Kommentar von voku | 2010-10-01
Hi,
hab vor einiger Zeit auch einen Blog-Post zum Thema bashrc geschrieben... ggf. gefallen jemandem die Tipps und Ticks :-)
-> http://suckup.de/blog/2010/07/30/bashrc/
Mfg
Voku