Bash
Aus Fedorawiki.de
Bash ist Fedoras Shell.
Immer wieder kommen im Forum, im Wiki oder in Chats zum Thema Linux die Begriffe bash,Terminal, shell, Konsole oder Kommandozeile vor. Gemeint ist damit immer die Kommandozeile, in die man Befehle eintippen kann, vom Prinzip her ähnlich einer DOS-Umgebung. Kern ist der Kommandointerpreter, der z.B. von der Standardeingabe oder aus einer Datei Text zeilenweise einliest und diesen interpretiert und gegebenenfalls Programme ausführt. In diesem Artikel soll die Nutzung der Shell beschrieben werden.
Inhaltsverzeichnis |
Wie man dahin kommt
Betriebszustand 5 - X
Um auf eine Kommandozeile zu kommen, gibt es mehrere Möglichkeiten.
Unter GNOME
Um das gnome-terminal auszuführen, gibt es mehrere Möglichkeiten. Die schnellste ist "Rechte Maustaste" >> "Terminal öffnen". Des weiteren findet sich ein Menüeintrag unter "Anwendungen" >> "Systemwerkzeuge" >> "Terminal".
Unter KDE
Mit Alt+F2 kommt man in den "Befehl ausführen" Dialog. Dort gibt man konsole ein und klickt auf Ausführen. Es öffnet sich ein Fenster, in dem die Eingabeaufforderung zu sehen ist.
Alternativ kann man auch den Menüeintrag Konsole anklicken, oder mit der rechten Maustaste auf den Desktop klicken, und dort Konsole anwählen.
Beliebige Windowmanager
Xterm nutzt X Athena Widgets und Intrinsics für die Terminalemulation unter X. Und kann via
eingerichtet werden, wenn der gewählte Windowmanager keine passende Terminalemulation bietet.
Neben X
Neben Fedoras grafischer Oberfläche die auf X arbeitet, werden beim Systemstart gleich mehrere virtuelle Terminals gestartet. Diese sind u.A. hilfreich, wenn die grafische Umgebung blockiert wird, und man mit dieser nicht mehr arbeiten kann.
Außerdem stehen diese virtuellen Terminals auch zur Verfügung, wenn man den Rechner in einem Modus ohne grafische Oberfläche startet, Runlevel 1-3.
Erreichen kann man diese virtuellen Terminals über die Tastenkombination Strg + Alt + F2 bis F6. Dort muss man sich dann mit dem Nutzernamen und Passwort anmelden. Zurück auf die grafische Oberfläche kommt man, sofern diese läuft, mit Strg + Alt + F1. Die verschiedenen virtuellen Terminals werden von /dev/tty* referenziert.
In anderen Betriebszuständen
In den Betriebszuständen 1-3 steht ausschließlich die Shell zur Verfügung. Nach dem Start des Rechners wird als erstes Programm das BIOS abgearbeitet. Das BIOS ist keine SHELL. Danach startet ein Programm welches das Betriebssystem lädt, der im Englischen so genannte "Bootloader"; in Fedora ist dies GRUB 2. GRUB bietet eine sehr begrenzte Shell, nicht Bash.
Nutzung der Shell
Ein Vorteil der Kommandozeile ist, dass man sich dort mal eben als root anmelden kann, um systemrelevante Änderungen durchzuführen, die einem als Nutzer nicht gestattet sind. Mehr dazu im Artikel root.
Ein anderer Vorteil der Kommandozeile ergibt sich aus dem prinzipiellen Aufbau von Linux: egal, welche Einstellungen man alle mit grafischen Mitteln erreichen kann, nie kann man in den grafischen Oberflächen all die Möglichkeiten ausreizen, die Programme mit sich bringen. Das geht nur in der Kommandozeile.
Wichtig ist sie ebenfalls, wenn man einen Rechner steuern möchte, der keine grafische Oberfläche mitbringt, wie es z.B. bei vielen Servern der Fall ist oder X aus bestimmten Gründen nicht startet.
Zu guter Letzt nutzen erfahrene Nutzer gerne die Kommandozeile, weil sie vor allen Dingen einfache Aufgaben dadurch deutlich schneller erledigen können, als wenn sie die grafische Oberfläche dazu nehmen würden.
Anwendungsbeispiel
Es ist spät, du bist müde und willst ins Bett. Einen Download hättest du vorher aber noch gerne. Allerdings soll die Möhre nicht die ganze Nacht durchlaufen:
Also, Terminal auf, flux zwei Kommandos eingetippt und pennen gehen.
wget $URL_zum__Download;shutdown -h now
Allgemeine Hilfe zur Shell
Das englische Referenz-Handbuch liegt nach der Einrichtung der BASH im Regelfall auf dem Massenspeicher.
$ info bash
gestattet das Lesen der englischen Beschreibung von Bash im Terminal oder in der Terminalemulation.
Nicht alles was sich auf der Shell abspielt ist Bash! Bash ermöglicht die Ausführung von Programmen und eine damit verbundene Programmierung. Es muss zwischen Bash internen Kommandos und externen Programmen unterschieden werden.
Kommandos
Eine englische Auflistung BASH interner Kommandos mit ihrer Syntax erhält man durch das Kommando:
$ help
Eine Zusammenfassung zum jeweiligen Kommando erhält man durch durch:
$ help <internes Kommando>
z.B.:
$ help local
Alphabetische Liste interner Kommandos
.
:
[
alias
bg
bind
break
builtin
caller
cd (Verzeichniswechsel)
command
compgen
complete
continue
declare
dirs
disown
echo
enable
eval
exec
exit
export
fc
fg
getopts
hash
help
history
jobs
kill
let
local
logout
popd
printf
pushd
pwd
read
readonly
return
set
shift
shopt
source
suspend
test
times
trap
type
typeset
ulimit
umask
unalias
unset
wait.
Eine zum Ausdruck als PDF erstellte Referenz zur Ausgabe 3.2 erhält man unter folgendem URL:
Shell externe Programme
Programme die nicht Bestandteil von Bash sind, aber auf nahezu jedem Linux-System verfügbar sind und durch die Shell
ausgeführt werden können, sind die GNU Core Utilities.
Des weiteren enthält das Paket util-linux eine Menge nützlicher Programme.
Die im Paket enthaltenen Programme können mittels:
$ rpm -ql $Paketname | grep bin
angesehen werden (siehe RPM). Die meisten Programme bringen 'manpages' mit.
apropos $Begriff whatis $Dateiname man $Dateiname info Dateiname
helfen weiter.
Eine Auswahl externer Programme
- cat
- Ausgeben von Dateien direkt in die Shell
- chmod
- Ändern der Zugriffsrechte von Dateien/Verzeichnissen
- chown
- Ändern des Besitzers von Dateien/Verzeichnissen
- cp
- Kopieren von Dateien/Verzeichnissen
- find
- Auffinden von bestimmten Dateien
- ln
- Anlegen und Bearbeiten von Verknüpfungen
- less
- Seitenweise Anzeige von Dateien
- ls
- Auflistung des Inhalts eines Verzeichnisses
- lsmod
- Anzeigen der geladenen Kernelmodule
- lspci
- Anzeige der PCI-Geräte
- more
- Seitenweise Anzeige von Dateien
- mv
- Verschieben von Dateien/Verzeichnissen
- rm
- Löschen von Dateien/Verzeichnissen
- top
- Anzeigen der laufenden Prozesse
Skripten
Allgemeines über Skriptsprachen
Grob umschrieben bietet BASH (wie die meistens SHELL's) die Möglichkeit viele Arbeiten am Rechner zu automatisieren. Sie fungiert dabei auch als Bindeglied verschiedenen Programmen, ähnlich D-BUS. Diese Automatisierung erfolgt durch Programmierung. Eine Datenverabeitungsanlage ist kein Orakel und wenn sie nach den Bedürfnissen des Nutzers agieren soll, müssen Entscheidungen im Sinne des Nutzers bekannt sein. Um auf bestimmte Ereignisse oder Ergebnisse reagieren zu können müssen diese Möglichkeiten im Skript bestimmt sein, sonst wird die Automatisierung (Skriptausführung) beendet. Je mehr Arbeiten durch Programmierung im Sinne des Nutzers erledigt werden können, ohne dass der Nutzer selbst agieren muss, desto besser und produktiver ist die Programmierung. Ein Skript wird mit einem Texteditor oder einer Textverarbeitung erstellt, auf einen Datenspeicher gelegt und lässt sich danach automatisch oder manuell ausführen.
Entwicklungsumgebungen für SHELL's
EMACS dient auch als Entwicklungsumgebung für SHELL's, obwohl EMACS grafisch und bedientechnisch den Ansprüchen der meisten Menschen nicht mehr gerecht wird. Viele Experten, Berufler und Profis (Profitler) legen auf das Aussehen viel weniger Wert als Gelegenheitsnutzer, der Funktionsumfang und die Produktivität stehen bei ihnen im Vordergrund. Getreu dem englischen Motto: "Form follows function!" (Das Aussehen ist der Funktion nachrangig) oder dem deutschen Sprichwort: "Die Hauptsache ist der Effekt!". Dem steht nicht entgegen, eine SHELL- insbesondere BASH-Entwicklungsumgebung zu programmieren, die heutigen Ansprüchen genügt, oftmals fehlt entweder die nötige Motivation (z.B. Geld), das nötige Fachwissen oder die nötige Zeit um ein solches Projekt zu vollenden.
Die Auswahl des hierzu zu nutzenden Widget-Toolkits ist alleine die Entscheidung des Entwicklers oder der Entwickler. Die Entscheidung kann vorrangig optische Gründe haben.
Auch die Integration einer grafischen Entwicklerumgebung in eine Infrastruktur einer bestehenden grafischen Benutzerumgebung ist die Angelegenheit der Programmierer der Entwicklerumgebung. Der Unterschied zwischen grafischen Programmoberflächen und grafischen Nutzerumgebungen kann in dem Artikel grafische Oberflächen ausgearbeitet werden.
Benutzerskripten: Von Benutzern, für Benutzer
- vereinfacht die Installation von fehlenden Multimedia-Funktionen
- Regelt per Schieberegler die Helligkeit für nVidia-Katen
Lehrskripten: Beispielskripten zum Lernen
- Skript das eine Auswahl aller Dateien im aktuellen Verzeichnis ausgibt
- Erzeugt 200 Dateien, Nummerischer Präfix, Alphanummerischer Suffix
- Lernskript zum Experimentieren mit positionalen Parametern.
Grafische Dialoge für Skripten
Für X
Visual BASH
Verwendet das KDE Werkzeug Kommander zur Erstellung grafischer Dialogboxen. Die Kommunikation zwischen Dialogboxen und der BASH wird durch das Desktop Communication Protocol DCOP realisiert (ein Protokoll welches die Kommunikation von grafischen (KDE) Programmen untereinander erlaubt).
http://grahams.free-online.co.uk/mediawiki/index.php/Visual_Bash
Zenity
Entstand aus GDialog, der GNOME angepassten Programmvariante von Dialog.
Eine ausführliche Seite zu Zenity findet befindet sich im Wiki.
http://library.gnome.org/users/zenity/stable/
Für die Shell
Dialog
Whiptail
Whiptail kann für die Erzeugung einer grafischen Benutzeroberfläche in der Shell genutzt werden. Der Paketname ist newt.
Tipps und Tricks
Weitere Informationen
Unterschied von Shell und Terminal
Obwohl die Begriffe "Shell" und "Terminal" oft synonym verwendet werden (auch in dieser Einführung), bezeichnen sie genau genommen verschiedene Teile. Die Shell ist dabei das Programm, welches die Kommandos interpretiert, während das Terminal für die Ein- und Ausgabe der Daten zuständig ist. Der Unterschied wird deutlicher, wenn man den Anfang dieses Artikels nochmals betrachtet, wo mit gnome-terminal, konsole, etc. verschiedene Terminals vorgestellt wurden, die allerdings als Shell alle die Bash verwenden (in der Standardeinstellung von Fedora).
Alternative Shells
So wie es also verschiedene Terminals gibt, existieren neben der Bash auch noch andere Shells welche sich in der Notation und den Funktionen zum Teil unterscheiden. Die Login-Shell eines Benutzers lässt sich mit dem Programm chsh (Change Shell) ändern.
POSIX-Shells:
- ash (Almquist shell)
- csh/tcsh (The C-Shell)
- dash (Debian Almquist shell)
- fish
- pksh (ksh93t+)(POSIX Korn Shell)
- pdsh (Parallel distributed Shell)
- Scsh (The Scheme Shell)
- zsh
Shells anderer Betriebssysteme
- Win32/Microsoft-Shells: cmd.exe, 4NT, Windows PowerShell (.NET)
- DOS-Shells: COMMAND.COM, 4DOS, OS/2 cmd.exe
- Plan 9, POSIX: rc
- OpenVMS: VMS DCL
Shells der Programmiersprachen
- JAVA-Shell: BeanShell
- Python: Python shell
- Ruby: Ruby shell
Projektstatus und Versionen
Die letzte offizielle BASH Veröffentlichung ist die Ausgabe 4.2, vom 13.02.2011. Und 10 Ergänzungen (Patches), die letzte vom 05.03.2011. Diese Ausgabe von Bash ist Fedora 15 eingearbeitet.
Siehe auch
- Dateimengen bearbeiten - wie man mehrere Dateien gleichzeitig über die Kommandozeile bearbeitet
- Auflösung der Konsole ändern - wie man die Auflösung der virtuellen Terminals (Strg+Alt+F1, etc.) ändert
- Farbige Konsolen
- Screen
Externe Verweise
- Artikel Unix-Shell der Wikipedia
- Umfangreiches eingedeutschtes Werk zur BASH
- Einführung in die Bourne Again Shell (bash)
- Projektseite (Englisch)
- Referenz Handbuch (Englisch)
- Authorenseite (Englisch)
- Liste von Fragen die dem Author häufig gestellt wurden (Englisch)
- Advanced Bash-Scripting Guide (Englisch)
- FAQ (Englisch)
- Guide (Englisch)
- Quick Reference (Englisch)
- another Manual (Englisch)
- BashHackers (Englisch)
- Learn To Quote (Englisch)
- shell idiome (Englisch)
- shelldorado (Englisch)
- Umfangreiche Sammlung von Skripten (English)
- Liste von recht interessanten Shellzeilen (Englisch)
IRC-Channel
- Server: irc.freenode.net (formerly OpenProjects.net) Kanal: #bash (Englisch)
- Server: irc.freenode.net (formerly OpenProjects.net) Kanal: ##bash-de