| Navigationsleiste | Direktzugriff | Kurs | Home |
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.
Gerade die bash verfügt über einige geniale Tastenkürzel, die du später nicht mehr missen willst:
| [tux] $ mce <TAB> #mce wird durch die <TAB>-Taste zu mcedit |
| [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> .
| [tux] $ ls [tux] $ <Pfeil nach oben> #Nun steht wieder ls da |
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 :
| [tux] $ ls /etc >& inhalt #Ausgaben und Fehler von ls werden an die Datei inhalt geschrieben |
| [tux] $ sort <inhalt #Der Inhalt der Datei inhalt wird sortiert ausgegeben |
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.
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 |
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 |