siehe auch: shell

, , , , ,

Bash

Kurz-Anleitung: PDF (Powerpoint)

String-Operations

Quelle1)

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 =


# tag: Shell