Duisburger Linux User Group - http://www.dulug.de
Stammtisch 27.08.2004: Einführung in die Shell
Anm: Dieses Dokument ist keine vollständige Referenz zu einer Shell sondern stellt
mehrere Shells vor und geht anschliessend konkret auf die bash ein ohne jedoch Ihren
vollen Funktionsumfang wiederzugeben (zu können).
Keine Garantie auf Vollständigkeit und/oder Funktionalität!!!

Die graue Vorzeit: Muscheln
Bereits als Programme noch in Lochkarten gestanzt wurden musste man sich mit der
Frage auseinander setzen auf welche Art und Weise man diese Programme laden soll.
Man war also gezwungen sich ein Konzept zu überlegen wie man dem Computer vor
dem man sass mitzuteilen das er doch gefälligst Programm xyz laden und ausführen soll.
Es musste also eine Schnittstelle geschaffen werden mit der sich der Mensch dem
Computer mitteilen konnte. Es wurde die Tastatur geboren. Zudem wurde das Ganze im
Unixzeitalter durch ein Programm realisiert das man meisstens Shell nennt. Die
Standardshell von AT&T Unix war die Bourne-Shell, die nach Ihrem Entwickler Steven R.
Bourne benannt wurde. Zusätzlich neben dem Aufrufen und Ausführen von
Programmen beherscht die Bourne-Shell eine vielseitige Skriptsprache. Wie bereits
erwähnt gibt es neben der Bourne-Shell weitere mehr oder wenige bekannte Shells, wie
zum Beispiel die csh die an der Berkley University entwickelt wurde oder die ksh die
nach Ihrem Entwickler David Korn bezeichnet wurde. Zur Zeit ist unter fast allen
aktuellen und grösseren Linux Distributionen die bash gang und gäbe, die auf Basis der
bsh beruht und zusätzlich um die Neuerungen der csh, ksh usw. erweitert wurde. Die
Bourne-Again-Shell ist übrigens vor kurzem in der Version 3.0 erschienen. Dieses
Dokument bezieht sich auf die Version 2.05, die bei Mandrake 10.0 automatisch
mitinstalliert wurde (das sollte aber nicht zu grösseren Problemen der hier
beschriebenen Vorgehensweise führen). Desweiteren ist es möglich eine Shell in einer
Shell zu laden, da es sich bei einer Shell letztendlich auch nur um eine Programm
handelt. Der Befehl 'csh' lädt somit dann auch die csh, welche man aber auch wieder
durch das Kommando 'exit' verlassen kann.

Die grauere Gegenwart: wiedergeborene Muscheln
Wie bereits Eingangs erwähnt soll hier konkret auf die bash eigegangen werden. Die
Bourne-Again-Shell basiert auf der bsh und wurde (und wird immer noch) vielfach
weiterentwickelt. Somit kann man sich die bash mehr als nur eine einfache Schnittstelle
zwischen Mensch und Computer die über die Tastatur funktioniert vorstellen. Vielmehr
kann man sich die bash als einen Werkzeugkasten vorstellen den man beliebig erweitern
kann. An dieser Stelle soll aber primär mit dem Grundwerkzeugen gearbeitet werden.
Stellt sich gleich die Frage: wenn ich einen Werkzeugkasten zur Verfügung habe, welche
Werkzeuge kann ich wofür effektiv einsetzen? Um ein Werkzeug aus dem
Werkzeugkasten zu nehmen muss man ein Kommando eingeben und bestätigen
(Kommandos werden i.d.R. immer mit bestätigt). Und hier scheiden sich auch
Kommando und Befehl: als Kommando bezeichnet man die Benutzung eines
Werkzeuges aus der bash (z.B. cd usw.) und als Befehl bezeichnet man die Benutzung
eines Werkzeuges das nachinstalliert wurde (z.B. mplayer, rsync, partimage usw.). D.h.
Durch einen Befehl startet man ein Programm das bereits nachinstalliert wurde und
durch ein Kommando startet man einen speziellen Programmteil das sich in der bash
befindet.

Anm: die meissten grafischen Konsolen, Terminals usw. emulieren die bash, dh. alles
was in der bash läuft wird 'einfach nur' grafisch aufgewertet und wiedergegeben und
sollte unabhängig davon funktionieren ob man nun KDE, Gnome, Fluxbox oä. geladen
hat! Da die bash allerdings auch eine Konfigurationsdatei hat müssen nicht alle hier
beschriebenen Ausgaben mit denen erzielten Ergebnissen übereinstimmen sondern
varieren u.U.!

Ein sanfter Einstieg
Hat man unter KDE z.B. typischerweise die 'Konsole' geladen, so erscheint der
Bildschirm recht prüde. Einfach nur ein nahezu Standard KDE Fenster dessen Hauptteil
schwarz ist und links oben in der Ecke steht irgendwas ala:
[stammtisch@pandora stammtisch]$
In den eckigen Klammern stehen Benutzername, Rechnername und das Verzeichnis in
dem man sich gerade befindet. D.h. Der Benutzername des augenblicklichen Users ist
'stammtisch', der Rechnername vor dem man sitzt heisst in dem Fall 'pandora' und das
aktuelle Verzeichnis in dem man sich befindet heisst 'stammtisch'. Wobei die letzte
Angabe nicht ganz richtig ist, sondern es wird nur das letzte Verzeichnis angegeben. Alle
Verzeichnisse die darüber liegen werden 'unterschlagen', da der gesamte Pfad
'/home/stammtisch/' heisst. Dies wird gemacht da es bei Linux sehr schnell zu tiefen
Verzeichnisstrukturen kommen kann und man auf Effekte wie:
[stammtisch@pandora /usr/share/apps/kdevelop/]$
verzichten will! Das $-Zeichen signalisiert das die Bash gestartet und bereit zur Eingabe
ist.
Ein erster wichtiger Befehl ist 'ls'. Dieser listet (wie der Name fast schon sagt) nämlich
den Inhalt des Verzeichnisses in dem man sich befindet auf:
Bildschirmphoto1.pngDesktop/proggi.sh*
Bildschirmphoto2.pngDokumente/tmp/
Hier sieht man 6 Elemente: 2 Bilddateien, die mit .png am Ende. Ein Shellskript das auf
.sh endet und 3 Verzeichnisse die typischerweise mit einem Slash / enden. Das
Programm ls komt noch mit ein paar Optionen daher, wobei ich jetzt auf ein paar
eingehen werde. Eine Option zu einem Befehl wird typischerweise mit einem
Bindestrich - eingeleitet und steht durch ein Leerzeichen getrennt hinter dem Befehl.
Somit ist es möglich durch die Option '-l' ein langes Listenformat für die Ausgabe zu
wählen:
[stammtisch@pandora stammtisch]$ ls -l
-rw-rw-r-- 1 stammtisch stammtisch 21086 Aug 17 19:16 Bildschirmphot01.png
-rw-rw-r-- 1 stammtisch stammtisch 31751 Aug 17 19:27 Bildschirmphoto2.png
drwxrwxrwx 3 stammtisch stammtisch 4096 Jul 1 11:36 Desktop/
drwxrwxrwx 6 stammtisch stammtisch 4096 Jul 4 22:09 Dokumente/
-rwxr-xr-x 1 stammtisch stammtisch 22 Jul 16 20:45 proggi.sh
drwxrwxrwx 5 stammtisch stammtisch 4096 Aug 19 19:27 tmp/
Die einzelnen Spalten unter der Lupe:
1 Spalte: Dateityp und die Zugriffsrechte der Datei (d steht dabei für directory, l für Link)
2 Spalte: Referenzzähler
3 Spalte: Besitzer der Datei
4 Spalte: Gruppe zu der die Datei gehört
5 Spalte: Grösse in Bytes
6 Spalte: Letztes Änderungsdatum
7 Spalte: Letzte Änderungszeit
8 Spalte: Name der Datei (unter Linux ist übrigens alles Datei)
Zudem gibt es versteckte Dateien/Verzeichnisse, die mit einem Punkt anfangen. Um sich
versteckte Dateien anzeigen zu lassen muss man ls die Option -a mitgeben (a steht für
all). Ein einfaches 'ls -a' würde wieder alle Dateien, inklusive der versteckten, anzeigen,
allerdings ohne Berechtigungen usw. Deshalb kann man Optionen auch verknüpfen.
Um sich also alle normalen Dateien, alle versteckten Dateien und die zugehörigen
Berechtigungen usw. anzeigen zu lassen muss man 'ls -al' eingeben (man kann natürlich
eine Trennung der Optionen durch z.B. 'ls -a -l' herbeiführen). Die eben beschriebenen
Optionen sind alle abgekürzt und können meisstens auch ausgeschrieben werden.
Lange Optionen werden allerdings nicht nur durch einen Bindenstrich sondern durch
zwei Bindestriche angeführt. Ein 'ls --all' ergibt also den den gleichen Inhalt wie ein 'ls
-a'. Die Kurzschreibweise muss aber nicht im unmittelbaren Zusammenhang zur
Langschreibweise hängen. 'ls --help' gibt zwar alle möglichen Optionen zu ls aus, ein 'ls
-h' ändert aber die Lesbarkeit der Grösse einer Datei in ein sofort ersichtliches Format.
Zudem muss man bei der Option h noch l verwenden, damit auch das lange
Listenformat verwendet wird. ohne l würde die Ausgabe von h 'verschluckt' werden. Dh
ein 'ls -lh' macht aus dem Wert 248463360 bei einem einfachen 'ls -l' den Wert 237M.
Die meissten Programmen bieten aber die Option --help an, so dass man schnell eine
kleine Übersicht zum gewünschten Programm bekommt. Es gibt aber nicht nur die
Möglichkeit Programmen Optionen mitzugeben sondern auch direkt Parameter
mitzugeben. Als gutes Beispiel dient dazu auch wieder ls. Sobald man eine Shell startet
und als erstes 'ls' startet, erscheint der Inhalt des Verzeichnisses in dem man sich
befindet (meisst das Homeverzeichnis des eben angemeldeten Users). Möchte man nun
den Inhalt des lib-Verzeichnisses einsehen so muss man den Pfad des lib-Verzeichnisses
als Parameter in der Form 'ls /lib/' mitteilen. Desweiteren ist es möglich auch Optionen
und Parameter zu kombinieren (in manchen Fällen sogar zwingend erforderlich). Ein
gutes Beispiel an dieser Stelle ist vom letzten Stammtisch mplayer, speziell mencoder:
wollte man dort einen Videocodec ändern, so musste man erst über die Option '-ovc' die
Option für den Output-Video-Codec und anschliessend speziell den Videocodec
auswählen (mpeg1video, mpeg4 usw.).

Ein nicht ganz so sanfter Fortgang
Nun ein paar relevante Befehle im Umgang mit Linux in der Shell.

Verzeichnisse
mkdir
Dieses Programm erstellt Verzeichnisse (make directory).
mkdir test Erstellt ein Verzeichnis namens 'test'

cd
Damit wechselt man Verzeichnisse (change directory). cd hat ein paar wichtige
Optionen, die einem das Leben sehr leicht machen können:
cd test Wechselt eine Verzeichnisebene tiefer in des Verzeichnis test
cd .. Wechselt eine Verzeichnisebene höher
cd ~ Wechselt direkt in das Homeverzeichnis des User's. Die Tilde ~ sollte
man sich merken, da sie für jedes Programm gültig ist!
cd Ohne einen Zusatz wechselt cd in das dem User zugehörige Homeverzeichnis

rmdir
Löscht Verzeichnisse (remove directory). Verzeichnisse können aber nur gelöscht
werden wenn sie leer sind (nicht-leere Verzeichnisse löschen siehe rm).
rmdir test Löscht das Verzeichniss test

Dateien
cp [Source] [Destination]
cp steht für copy und kopiert Dateien.
cp file1 file2 Somit wird die Datei 'file1' nach 'file2' kopiert. Die Datei 'file1' wird
bei demVorgang nicht verändert. Falls die Datei 'file2' nicht existiert
wird diese neu angelegt. Existiert sie, so erfolgt eine Nachfrage ob die
Datei überschrieben werden soll.
cp dir1 dir2 -a Kopiert das Verzeichnis dir1 nach dir2 mit all seinem Inhalt (a = all)

mv [Source] [Destination]
mv steht für move und verschiebt Dateien. Mit mv lassen sich auch Dateien umbennen.
mv file ~/test/ Verschiebt die Datei file in das Verzeichnis test das sich im
Homeverzeichnis befindet.
mv file1 file2 Verschiebt die Datei file1 nach file2, bzw. sie wird umbenannt.

rm
rm steht für remove und löscht Datei (damit sollte man aber sparsam umgehen, da
einmal gelöschte Datei nicht mehr herzustellen sind). Mit rm lassen sich auch
Verzeichnisse löschen die nicht leer sind.
rm file Löscht die Datei file
rm file -f Löscht die Datei file ohne Nachfrage (f = force)
rm dir -r Löscht das Verzeichnis dir und all seinen Inhalt. Dies können auch
weitere nicht leere Verzeichnisse sein (r = recursive).
rm dir -rf Löscht das Verzeichnis dir und all seinen Inhalt wie oben und stellt
dabei keine weiteren Fragen.

cat/less
Um sich eine Textdatei in der Shell anzusehen, gibt es verschiedene Möglichkeiten.:
cat file Zeigt den Inhalt der Datei file an und springt am Ende wieder zurück in die
Shell.
less file Falls ein Textdatei grösser als ein Bildschrimseite ist, wird cat unhandlich.
Dafür gibt es less, mit dem man grössere Dateien mit den Pfeiltasten
durchsuchen kann.

vi/emacs
Diejenigen die meinen es gäbe nur den Glaubenskrieg zwischen Windows vs. Linux hat
sich geirrt. Mindestens genauso gross, wenn auch nicht so populär ist der zwischen vi
und emacs. Bei beiden Programmen handelt es sich um Editoren mit denen man
Dateien bearbeiten kann. Da der Funktionsumfang von vi und emacs ziemlich gross ist
möchte ich auch nicht weiter drauf eingehen und nur wissentlich machen das es sie gibt.

System
man
man kann ein sehr hilfreiches Tool sein wenn man Fragen zu einzelnen Programmen hat
oder einfach mehr wissen will als die help-Option manchmal hergibt. man steht für
Manual (Bedienungsanleitung) und beschreibt viele Programme im Detail. Allerdings
steht nicht für jedes Programm ein Manul-Entry zur Verfügung. Sobald aber ein
Programm eine gewisse 'Wichtigkeit' erreicht hat sollte auch auch ein Manual-Entry zur
Verfügung stehen. Ein weiterer Nachteil besteht für alle nicht englisch sprechenden
Menschen, da Manpages meisst in englisch gefasst sind. Der Aufruf van man ist denkbar
einfach und erfolgt einfach durch 'man' gefolgt von dem gewünschten Programm. Der
Aufrauf zur Manpage von cdrecord sieht z.B. so aus:
man cdrecord
Anschliessend kann man einfach mit den Pfeiltasten rauf- und
runterscrollen und zuletzt mit 'q' wieder beenden.

mc
mc ist den Midnight Commander und wer sich noch alte DOS Zeiten erinnern kann wird
sofort den Norton Commander wiederfinden. Da der mc nahezu selbsterklärend ist
werde ich an dieser Stelle auch nicht weiter draufeingehen.

ln [Source] [Destination]
ln ist ein Linker und kann Verknüpfungen erstellen. Hat man sich z.B. ein Verzeichnis
namens testdir erstellt (mkdir testdir), so kann man dieses Verzeichnis auch verlinken.
Der Aufruf dazu würde wie folgt aussehen:
ln testdir testlink -s
s steht hier für symbolic. Nun kann man einfach mittels 'cd testlink' in das Verzeichnis
testdir wechseln. Möchte man z.B. wissen wohin ein Link führt so hilft wieder 'ls -l' nach,
der Verknüpfungen un ihren Ursprungsort anzeigt. Die Ausgabe von 'ls -l' für einen Link
könnte z.B. so aussehen:
lrwxr-xr-x 1 stammtisch stammtisch 7 2004-08-24 17:32 testlink -> testdir/

uptime
Für alle Interessierten bietet uptime die Möglichkeit mal nachzugucken wie lange Ihr
System up ist und wieviele User angemeldet sind:
17:36:49 up 2:08, 1 user, load average: 0.10, 0.37, 0.33

uname
uname gibt den Namen des Systems heraus vor dem man sitzt. Interessant ist jedoch die
Option -a (a = all) die alle möglichen Optionen von uname ausgibt:
Linux pandora 2.6.8 #15 SMP Fri Aug 20 19:41:12 CEST 2004 i686 unknown unknown
GNU/Linux

su
Da sich das direkte Anmelden als root eigentlich immer als Sicherheitsrisiko dargestellt
hat, wurde su entwickelt. Mit su erhält man eine kostengünstige Lösung Arbeiten als root
zu erldigen ohne sich direkt als root anmelden zu müssen. Nachdem Aufruf von 'su'
muss man nur noch das root-Passwort eingeben und schon kanns los gehen: nie wieder
'Permission denied'. Sollte man allerdings noch Einsteiger in Sachen Linux sein so sollte
man auch tunlichst die Finger davon lassen um z.B. oben genannte Möglichkeiten
ausprobieren!

ps
Mit ps lassen sich alle derzeitigen Prozesse die laufen anzeigen. Mehr dazu in diesem
Artikel, Kapitel 'Ein harter Abgang', Abschnitt 'Prozesse'.

halt
Um sein System ohne Neustart herunterzufahren eignet sich halt.

reboot
Funktioniert wie halt, nur das ein Neustart durchgeführt wird.

Multimedia
mpg123
mpg123 ist ein kleiner Player der die Audiospuren von MPEG1, MPEG2 und MPEG3
Dateien abspielen kann.
mpg123 lied.mp3 Spielt die Datei lied.mp3 ab

ogg123
ogg123 ist das pendant zu mpg123 was MPEG3 Dateien angeht, d.h. es ist ein kleiner
Ogg-Vorbis Player für die Shell.
ogg123 lied.ogg Spielt die Datei lied.ogg ab

workbone
CD-Player für die Shell. Dazu sollte aber einen Link namens cdrom im /dev/ Verzeichnis
haben das auf das Laufwerk zeigt in dem sich die Audio-CD befindet (siehe diesen
Artikel, Kapitel 'Ein nicht ganz so sanfter Fortgang', Abschnitt 'System - ln').

cdparanoia
CD Ripper, der einzelne Tracks von einer CD rippt und auf Festplatte speichert.
Beispiel: um das 1. Lied von einer Audio-CD als wav Datei auf Festplatte zu speichern,
könnte man folgenden Befehl eingeben:
cdrecord -B -- "1-1"

oggenc
Auch in Zeiten von zig-GB Festplatten sind wav Dateien eher unhandlich. Deshalb gibt
es natürlich auch Tools um in der Shell seine wav Dateien ins Ogg-Vorbis Format
umzuwandeln. Der folgende Befehl wandelt somit eine wav Datei in eine ogg Datei um:
oggenc lied.wav -o lied.ogg -b 192
Das ganze mal 'aufgeschlüsselt':
lied.wav Eingabedatei
-o Option um die Ausgabedatei einzuleiten (es muss ein neuer Name folgen)
lied.ogg Die neue Ausgabedatei
-b Option für die gewünschte durchschnittliche Bitrate
192 Die gewünschte Bitrate als Dezimalzahl

lame
lame ist ein MPEG3 Encoder auf den ich jetzt leider nicht weiter eingehen kann, da ich
ihn derzeit nicht installiert habe. Von der Funktionalität ähnelt er oggenc, bzw oggenc
ähnelt lame (je nachdem wie man es sehen will).

cdrecord
CD Brenner für die Shell (auch so etwas gibt es). Die Optionen von cdrecord sind leider
etwas happig und somit auch nicht leicht zu verstehen. Ein kleines Beispiel liefert an
dieser Stelle der Vortrag vom 18-06-2004 mit dem Thema Backupfunktionen in dem
beschrieben wird wie ISO Dateien erstellt und anschliessend auf CD gebrannt werden.
An sonsten mal ein kleines Beispeil um ein einfache ISO Datei zu brennen:
cdrecord datei.iso dev=/dev/hdd speed=24
Die Optionen nochmal einzeln:
datei.iso Die ISO Datei die gebrannt werden soll
dev=/dev/hdd Die Gerätedatei des Brenners
speed=24 Die Geschwindigkeit mit der gebrannt werden soll, also 24x

Sonstiges
cal
Kleiner Kalender (calender)

date
Zeigt Datum und Tageszeit an

echo
Gibt einen Text auf der Standardausgabe wieder.
echo 123 Gibt somit 123 wieder

Ein harter Abgang
Ausgabeumleitung
Unter Ausgabeumleitung versteht man das die übliche Ausgabe die normalerweise in
der Shell stattfindet woanders hin umgeleitet wird. An der Stelle sind ein paar 'Variablen'
interessant:
stdout Für Ausgaben: das Standardausgabegerät (der Monitor)
stdin Für Eingaben: das Standardeingabegerät (die Tastatur)
stderr Für Fehlerausgaben: meisst gleich dem Standardausgabegerät, also der
Monitor, denn da machen Fehlerausgaben viel Sinn (nicht immer)

Diese 'Variablen' sind als Links im /dev/ Verzeichnis angelegt:
ls /dev/std* -l
lrwxrwxrwx 1 root root 15 2004-08-24 17:28 /dev/stderr -> /dev/pts/1
lrwxrwxrwx 1 root root 15 2004-08-24 17:28 /dev/stdin -> /dev/pts/0
lrwxrwxrwx 1 root root 15 2004-08-24 17:28 /dev/stdout -> /dev/pts/1
Eine Ausgabeumleitung ist genauso einfach wie banal, man muss einfach nur das
gewünschte Programm starten und ihm mitteilen sein Ausgabe nicht auf dem Monitor
auszugeben sondern z.B. in eine Datei umzuleiten. Dazu sollte man sich merken das
eine Ausgabeumleitung durch ein 'Grösserzeichen' > eingeleitet wird. Wie bereits oben
erklärt wird durch den Befehl 'ls' der Inhalt des Verzeichnisses in dem man sich befindet
angezeigt. Möchte man nun diesen Inhalt als eine Textdatei speichern so muss man die
Ausgabeumleitung aktivieren:
ls > ls.txt
Somit wird des Inhalt des Verzeichnisses in die Textdatei ls.txt abgespeichert.

Prozesse
Sobald man ein Programm startet, wird das Programm als Prozess weiterbearbeitet. Um
zu sehen welche Prozesse derzeit laufen gibt es den Befehl ps (ps = Process Status). Ein
einfaches ps ist allerding nicht sehr informativ da Prozesse nach Kriterien sortiert und
angezeigt werden. Ein 'ps -a' ist da schon gesprächiger und richtig gesprächig ist 'ps -ax'.
Nun stelle man sich vor man hätte einen längeren Kopiervorgang (z.B. einfach mal 5GB
von hda nach hdb kopieren: cp file /mnt/hd/) vor sich: nach Bestätigen des cp-Befehls
ist die Shell belegt und wird erst wieder frei gegeben wenn der Kopiervorgang
abgeschlossen wurde. Letzlich bleibt einem da nur die Möglichkeit auf einen zweiten
Terminal zu schalten und sich erneut anzumelden um weiterarbeiten zu können. Das ist
allerdings nicht so gut da man somit zweimal am gleichen System angemeldet ist und
das Sicherheitsrisiko grösser ist. Das schöne ist das man Programme direkt als
Hintergrundprozess starten kann. Dazu muss man einfach ein kaufmännischen
Undzeichen getrennt von einem Leerzeichen dem Befehl hinterhergeben und
bestätigen: cp file /mnt/hd/ &
Somit wird der Kopiervorgang in den Hintergrund geschoben und die Shell ist sofort
wieder frei. Desweiteren erhält man Ausgabe die wie folgt aussehen könnte:
[1] 3540
Die Zahl in den eckigen Klammern bedeutet das das Programm cp in den Hintergrund
geschoben wurde. Die Nummern werden vom System verteilt da es möglich ist mehrere
Vordergrundprozesse in den Hintergrund zu verschieben und anhand des Befehls fg (fg
= foreground) wieder in den Vordergrund zu schieben. fg mus nur mit der
Hintergrundprozessnummer ausgeführt werden: fg 1
Somit erscheint zum Beispiel der 5GB Kopiervorgang wieder im Vordergrund. Wie man
diesen Kopiervorgang wieder in den Hintergrund verschiebt steht weiter unten unter
Tastenkombination beschrieben
Desweiteren gibt es die Hintergrundprozessnummer (z.B. 3540), die z.B. mit 'ps -a'
angezeigt werden kann (nur ein Ausschnitt aus 'ps -a'):
PID TTY TIME CMD
3540 pts/2 00:00:00 cp
Falls man diesen Hintergrundprozess beenden möchten, so gibt es den Befehl 'kill'. kill
wird einfach mit der Prozessnummer angegeben und ausgeführt: kill 3540
Der cp Befehl wird somit komplett abgebrochen und kann auch nicht wieder in den
Vordergrund geschoben werden.
Bei der oben beschriebenen Methode gibt es noch einen Haken: manche Programme
aktualisieren während sie ablaufen ihre Ausgabe. Das hat zur Folge das man zwar einen
Prompt zur Verfügung hat aber dieser immer von den Ausgaben des Programms gestört
wird. Dazu bieten die meissten Programme einen 'Quiet-Modus' an. Als Beispiel dient
hier mal oggenc, der wie oben beschrieben aus wav Dateien ogg Dateien kodiert. Das
Programm hat eine Prozentanzeige die regelmässig aktualisiert wird und natürlich bei
100% endet, wie das Programm auch. Um jetzt die Anzeige zu unterdrücken, muss man
dem Programm den Parameter --quiet mitgeben:
oggenc lied.wav -o lied.ogg -b 192 --quiet
Somit zeigt oggenc nichts an und kann dann auch wieder in den Hintergrund
verschoben werden:
oggenc lied.wav -o lied.ogg -b 192 --quiet &

Pipes
Über Pipes lassen sich Ausgaben nicht nur umleiten sondern umleiten und direkt
weiterverarbeiten. Sucht man mittels 'ps -ax' einen bestimmten Prozess, bzw. will wissen
ob es einen solchen Prozess gibt, so erhält man eine Liste die man leider nur ungerne
durchsucht. An der Stelle helfen Pipes weiter. Die Ausgabe von 'ps -ax' kann somit in das
Programm grep (grep durchsucht Texte nach einem Wort) umgelitet und
weiterverarbeitet werden. Pipes werden übrigens immer durch ein | (ALT GR + <>)
eingeführt. Jetzt kann man so schonmal nach dem Prozess bash suchen:
stammtisch@pandora:~$ ps -ax | grep bash
4972 pts/1 Ss 0:00 -bash
5006 pts/1 S+ 0:00 grep bash
stammtisch@pandora:~$
Jetzt sieht man zwei Prozesse die auf bash reagieren, einmal der echte bash-Prozess
(4972) und dann noch mal der grep-Prozess, der allerdings wegen des Suchwortes bash
mit aufgelistet wird!

Tastenkombinationen
Anm.: STRG heisst nicht wie viele glauben/meinen/sagen String, sondern Steuerung! Auf
amerkanischen Tastaturen steht immer CTRL und heisst Control!

STRG+D
Mit STRG+D loggt man sich aus der bash aus und hat den gleichen Effekt wie der Befehl
'logout'.

STRG+C
Damit lassen sich Aktionen abbrechen. Um als Beispiel den 5GB Kopiervorgang von
oben wieder zu nehmen: mal angenommen man hätte bereits 1GB kopiert und bricht
den Kopiervorgang ab, so bleiben die 1GB erhalten und müssen seperat gelöscht
werden.
Dadurch das STRG+C bereits durch die bash vergeben ist, funktioniert z.B. unter KDE in
der Konsole auch das Copy & Paste via STRG+C & STRG+V nicht! Copy erreicht man nur
über das Menü Bearbeiten. Einfügen funktioniert über das Menü Bearbeiten oder die
Tastenkombination SHIFT+Einfügen.

STRG+Z
Dadurch lassen sich Programme die im Vordergrund laufen in den Hintergrund
verschieben. Z.B. kann so während eines Kopiervorganges einfach STRG+Z gedrückt
werden und man erreicht die Shell wieder. Danach sollte man den Befehl 'bg' (bg =
background) eingeben um wieder eine Prozessnummer zu erhalten und den Prozess in
den Hintergrund zu verschieben. Um den Prozess wieder in den Vordergrund zu
schieben kann man wie oben beschrieben einfach wieder 'fg' gefolgt von der
Prozessnummer eingeben.

TAB
TAB ist eine sehr nützliche Erfindung was die Eingabe von Programmen bzw.
Verzeichnissen angeht. TAB erweitert nämlich falls möglich den halb eingegebenen
Namen. Würde man nach der Eingabe von 'ogge' TAB drücken, so würde direkt der
Name auf 'oggenc' erweitert würden. Gibt man allerdings nur 'ogg' gefolgt von TAB ein,
passiert erstmal garnichts. Drückt man danach abermals TAB so werden einem alle
Möglichkeiten aufgezeigt die Verfügung stehen, da nichts eindeutig zugewiesen werden
konnte:
stammtisch@pandora:~$ ogg
ogg123 oggdec oggenc ogginfo
stammtisch@pandora:~$ ogg
Danach sieht man das man die Wahl zwischen 1, d, e und i hat um seine Eingabe
eindeutig zu machen.

ALT+F1 - ALT+F6
Über die Tastenkombinationen ALT+F1 - ALT+F6 lassen die verschiedenen Konsolen
erreichen.

Sonstiges/Tipps/Tricks
Manchmal ist einfach sinvoll alle aktuellen und relevanten Meldungen des Systems
mitzulesen:
tail -f /var/log/messages