Navigationsleiste  |    Direktzugriff   |    Kurs  |     Home  

Linux-Kurs: Bash



Die bash ( bourne again shell) ist eine Shell, und eine Shell ist eine Schnitstelle zwischen dem Linux-System und dem Anwender. Unter DOS ist es die command.com oder neudeutsch "Eingabeaufforderung".
An der Shell gibst du deine Befehle ein und das System führt sie aus, meist startest du ein Programm.
Unter Linux/Unix gibt (natürlich) mehrere Shells, zum Beispiel: ksh, csh, ash, ... .
Aber die Standard-Shell ist die bash und deswegen gehe ich nur auf sie ein. Für alle (anderen) Shells gibt es genug Manual-Seiten.




Wichtige Tastenkürzel

Gerade die bash verfügt über einige geniale Tastenkürzel, die du später nicht mehr missen willst:

<TAB>-Taste

Fangen wir mit dem praktischsten an: Der <TAB>-Taste
Gib mal genau das hier ein:

[tux] $ mce <TAB>       #mce wird durch die <TAB>-Taste zu mcedit


Das geht nicht nur mit Programm-Namen, sondern auch mit Dateien:

[tux] $ ls /ho<TAB> tu<TAB>       #Sollte zu ls /home/tux/ werden



Findet die bash mehrere mögliche Erweiterungen gibt sie einen Signalton aus. Drückst du dann noch mal auf <TAB>, werden dir alle weiteren Möglichkeiten angezeigt:

[tux] $ n <TAB> <TAB>       #Alle Programm die mit n beginnen werden ausgeben
...

       namei             netstat         nice                    nm86           nroff
       native2ascii   newaliases  nisdomainname  nmblookup   nslookup
       neqn              newgrp         nl                        nohup          nsmail
       netscape       newkrn         nm                      novell_print
 ... 

 

Du gibst dann den nächsten Buchstaben ein und drückst wieder auf <TAB> .


Pfeil hoch/runter Taste

Mit den Pfeil hoch/runter Tasten kannst du deine letzten eingebenen Befehl "zurückholen":

[tux] $ ls
[tux] $ <Pfeil nach oben>            #Nun steht wieder ls da


Wenn du mehrmals den <Pfeil nach oben> drückst, gehst du deine letzten Befehle von unten (letzter) nach oben (erster) durch,
und mit der <Pfeil nach unten> entsprechend andersrum.

Noch ein kleiner Tip: mit dem Befehl history zeigt dir die bash die letzten Kommandos an.

"Strg + R"

Mit dieser Tasten-Kombination kannst du in deinen letzten Befehlen suchen. Das Ganze braucht aber etwas Erklärung.
Nach der Eingabe des ersten Zeichens schlägt dir die bash schon was vor, aber das stimmt meist wohl nicht. Du kannst nun,


"Strg + L"

Damit kannst du den Bildschirm-Inhalt löschen

Es gibt noch einige weitere Tastenkürzel, die ich aber für nicht so wichtig halte ...





Umleitungen

Manchmal ist es nützlich sich ein Ergebnis in eine Datei schreiben zu lassen, anstatt auf den Bildschirm, das geht ganz einfach:
[tux] $ ls > inhalt            #Die Ausgaben von ls werden in die Datei inhalt geschrieben


Existierte die Datei inhalt schon wird sie radikal überschrieben !! Existierte sie noch nicht, wird sie angelegt.
Möchtest du aber nun an eine Datei etwas anhängen solltest du zwei > benutzen:
[tux] $ ls /etc >> inhalt            #Die Ausgaben von ls werden an die Datei inhalt angehangen

Allerdings kommt jetzt hier eine kleine Falle, denn unter Linux/Unix gibt es :


Mit unserer obigen Zeile haben wir nur die Standardausgabe in eine Datei geleitet, aber nicht der Standardfehler !!
Um die Fehlermeldung in eine Datei zu schreiben, mußt du 2> schreiben und um die Standardausgabe und Standardfehler in eine Datei umzuleiten:

[tux] $ ls /etc >& inhalt            #Ausgaben und Fehler von ls werden an die Datei inhalt geschrieben

Dann hätten wir noch einen seltenen Fall: Einige Programme erwarten immer Eingaben von der Standardeingabe. Dazu zählt auch das Programm sort, es sortiert den Text von der Standardeingabe. Das ist aber meistens unerwünscht, also leiten wir die Eingabe um:

[tux] $ sort <inhalt            #Der Inhalt der Datei inhalt wird sortiert ausgegeben


Aber Achtung !! Du kannst nicht das Ergebnis von sort wieder nach inhalt schreiben, du würdest die Datei löschen !!





Pipes

Mit Hilfe einer Pipe gibst du die Ausgabe von Kommando1 an die Eingabe von Kommando2 weiter, etwas irretierend aber genial.
Dieser Befehl ist etwas blöd, da ls sowieso schon sortiert, aber egal:

[tux] $ ls | sort            #Ausgabe von ls wird von sort sortiert

Eigentlich einfach zu lesen:
Die Daten die ls ausgibt, werden an die Eingabe von sort umgeleitet und sort verarbeitet diese Daten,
man könnte nun noch eine Umleitung dranhängen:

[tux] $ ls | sort > SortierErgebnis.txt


Jetzt gibt sort noch seine Dateien in die Datei SortierErgebnis.txt aus. :-))

Eine nette Pipe sollte man noch erwähnen:

[tux] $ ls | tee inhalt            #Ausgabe in Datei und auf Bildschirm


Die Ausgabe von ls wird von tee auf den Bildschirm und in eine Datei geschrieben.




Kommandoausführung

Die Bash kennt verschiedene Arten der Programmausführung, die Wichtigste ist das Ausführen eines Programmes im Hintergrund.
Das wird oft bei Programmen oder Anweisungen benutzt die länger brauchen:
[tux] $ ls -R > inhalt_platte.txt &            #ls im Hintergrund ausführen
[1] 1301


Mit dem Kommando ls -R > inhalt_platte.txt werden alle Dateinamen unterhalb des aktuellen Verzeichnisses in die Datei inhalt_platte.txt geschrieben und zwar im Hintergrund, dafür steht das &.
Die bash teilt uns dann noch die Prozessnummer mit, mit dieser können wir das Programm evtl. abbrechen.

Hier noch ein Tipp: Sollte dir zu spät auffallen, das dieser Prozeß zu lange dauert, kannst du ihn mit "Strg+Z" unterbrechen und dann mit bg weiter im Hintergrund laufen lassen !

Die nachfolgende Tabelle zeigt weitere Arten der Programmausführung:

kommando1 && kommando2       kommando2 wird nur ausgeführt wenn kommando1 erfolgreich war
kommando1 || kommando2 kommando2 wird nur ausgeführt wenn kommando1 einen Fehler lieferte
kommando1 ; kommando2 kommandos werden nacheinander ausgeführt






Joker und Sonderzeichen

Die Joker-Funktion ist sehr einfach (ok, auch kein so tolles Beispiel ...) :

[tux] $ ls *.txt            #ls zeigt alles an was mit .txt endet

...
 SortierErgebnis.txt  inhalt_platte.txt  mcedit.txt  pico.txt  vi.txt
...


So folgendes passiert in unserem Befehl:
Die bash ersetzt *.txt durch alle Dateien die mit txt enden, wichtig ist, die bash ersetzt, nicht ls !
Du könntest auch noch das Fragezeichen (?) anstelle dem Stern einsetzen, das ? steht für ein einzelnes Zeichen. Es gibt noch weitere Möglichkeiten, aber ich finde das reicht, kannst ja bei Interesse mal in den Kofler gucken ...

Eine Sache noch:
Wenn du eine Datei mit dem Namen "Hallo ich bin ein Text .txt" anlegen willst, geht das so nicht. Denn ein Leerzeichen dient ja der Parameter-Trennung.
Also probier mal:
[tux] $ touch "Hallo ich bin ein Text .txt"            #Sonderzeichen


Und schon geht das !!


Auf tuxhausen habe ich noch einen interessanten Artikel zur bash: bash anpassen


Editoren    Inhalt    Kommandos

Erstellt: 2001-02-28 Autor: Markus Ungermann (markus@tuxhausen.de)
Letztes Update: 2007-06-22      URL: http://www.tuxhausen.de/kurs_bash.html