Achim Stein
Jedes Betriebssystem kann über Kommandos gesteuert werden, die im Befehlsfenster eingegeben werden (man sagt auch »über die Kommandozeile« oder »in einer Shell«). Das Befehlsfenster ist über das Startmenü aufrufbar, oft unter einer Kategorie wie »Zubehör« oder »Dienstprogramme«.
Unix und Windows: In dieser Anleitung werden Befehle benutzt, die auf Unix-Betriebssystemen vorinstalliert sind. Linux und Mac OS X sind Unix-Systeme und erfordern meist keine zusätzlichen Installationen. Sie verwenden in der Regel die sogenannte Bash-Shell.
Unter Windows können diese Befehle zwar auch als einzelne Programme nachinstalliert (und dann in der »Eingabeaufforderung« benutzt) werden, aber es ist einfacher und komfortabler, sich unter Windows ein komplettes »Unix-Terminal« zu beschaffen, also eine Bash-Shell. Die in dieser Anleitung beschriebenen Befehle können dann unter allen Systemen nahezu gleich eingegeben werden.
TIPP: Cygwin installieren. Dieses Paket ist kostenlos und enthält
eine Reihe von Unix-Programmen für Windows. Die Installation ist einfach:
|
Im folgenden wird das Befehlsfenster kurz Shell genannt.
Grundlegende Befehle:
In den Beschreibungen der Befehle stehen obligatorische Argumente
zwischen Spitzklammern, z.B. <Verzeichnisname>, und Optionen
zwischen eckigen Klammern, z.B. [-a].
| Befehl | Beispiel | Funktion |
exit |
Terminal beenden | |
Ctrl-c |
laufenden Befehl unterbrechen | |
mkdir <name> |
mkdir meine_texte |
ein Verzeichnis anlegen |
cd <name> |
cd meine_texte |
in ein (Unter)verzeichnis wechseln |
cd .. |
cd meine_texte |
ins nächsthöhere Verzeichnis wechseln |
ls [-l] [<name>] |
mkdir meine_texte |
Verzeichnisinhalt anzeigen (-l ausführlich) |
pwd |
Pfad des aktuellen Verzeichnisses anzeigen |
Ein Arbeitsverzeichnis erstellen:
Für die konkrete Arbeit an einem Text ist es empfehlenswert, ein
eigenes Verzeichnis zu erstellen. In der Verzeichnisstruktur der Shell
werden Pfadnamen durch einfachen Schrägstrich / getrennt, und
nicht, wie in Windows, durch einen Backslash \.
Wenn das Befehlsfenster gestartet wird, befindet sich der Benutzer im Home-Verzeichnis. Die Shell symbolisiert es durch eine Tilde.
/home/... für Benutzer an (z.B. /home/achim), die sich
auf der Festplatte unter unter C:\cygwin befindet. Die
meisten Benutzer werden aber ihr eigenes Windows-Home-Verzeichnis
benutzen wollen. Nehmen wir an, der Benutzername ist
achim. Dann kann man (unter Windows XP) mit
cd /cygdrive/c/Dokumente\ und\ Einstellungen/achim/Desktop/
auf den Desktop
cd /cygdrive/c/Dokumente\ und\ Einstellungen/achim/Eigene\ Dateien
in das Benutzerverzeichnis wechseln.
/cygdrive/c ist also die Windows-Festplatte C:. Vor
die Leerzeichen in den Pfadnamen muss ein Backslash gesetzt werden.
Je nach Windows-Version befinden sich die Benutzerdateien an anderen Orten:
unter Windows 7 wäre der Pfad cd /cygdrive/c/Users/achim.
Komfort in der Shell: Bei langen Datei- oder Pfadnamen
macht man oft Tippfehler. Die Shell bietet eine Erleichterung über
die Tabulatortaste (TAB) an: Tippen Sie den Anfang eines Verzeichnis-
oder Dateinamens, drücken Sie TAB, und die Shell wird den Namen
ergänzen (oder bei mehreren Möglichkeiten diese anzeigen). Tippen Sie
z.B. cd /cy, dann TAB, und die Shell ergänzt zu
/cygdrive/, usw.
Arbeitsverzeichnis: Im gewünschten Verzeichnis angekommen,
sollte dann ein eigenes Verzeichnis angelegt werden, z.B. mit
mkdir spielwiese. Es erscheint dann wie gewohnt im Dateimanager
des Sytems, wie in Abb. 1 und 2
gezeigt (es könnte natürlich auch mit dem Dateimanager angelegt
werden).
TIPP: In vielen Betriebssystemen zeigen die grafischen Dateimanager
deutsche (oder der eingestellten Sprache entsprechende) Pfadnamen an,
verwenden intern aber andere Namen. Mac OS X und Windows 7 zeigen ein
Verzeichnis /Benutzer bzw. C:\Benutzer an, verwenden
Intern aber /Users bzw. C:\Users. Analog für
Schreibtisch bzw. Arbeitsplatz (Desktop) u.a. Die Shell zeigt immer
die internen (englischen) Namen, und diese müssen auch bei
Befehlen wie cd usw. eingegeben werden.
Als Arbeitstext für die nächsten Schritte besorgen wir uns
»Betrachtung« von Franz Kafka, der auf http://www.gutenberg.orgfrei herunterladbar ist. Wir laden ihn im Format »Plain Text« und
speichern ihn im Verzeichnis spielwiese als kafka.txt.
Sie können ihn auch hier erhalten: kafka.txt.
Es schadet nicht, die hier erklärten Grundlagen vorher zu lesen. Praktische Beispiele folgen bei der Erklärung der Befehle, Praktiker werden dort anfangen und dann zurückblättern.
Befehlssyntax: Die meisten Befehle haben Optionen. Diese bestehen aus Bindestrich mit einem folgenden Buchstaben (Kurzform), manchmal auch zwei Bindestrichen mit einem Optionsnamen (Langform), und ggf. Argumenten. Danach folgt in der Regel der Dateiname. Beispiele s.u. bei 2.2.1.
Dateinamen sind Zeichenketten,
z.B. kafka.txt. Sonderzeichen und Leerzeichen sind in den
meisten Betriebssystemen möglich, von ihrer Verwendung ist aber
abzuraten (Betriebssysteme kodieren die Sonderzeichen
unterschiedlich, und bei der Übermittlung im Internet können sie ebenfalls
verändert werden).
Viele Befehle können mehrere Dateien gleichzeitig aufrufen. Dafür
können Platzhalter eingesetzt werden, die ähnlich wie beim Befehl
grep funktionieren, nur der Platzhalter für 'irgendetwas' ist
* (und nicht .*). Beispiele:
* |
alle Dateien (im aktuellen Verzeichnis) |
a* |
alle Dateien, deren Name mit a beginnt |
*.txt |
alle Dateien mit Suffix .txt beginnt |
Mit einer sog. pipe (>Röhre<) können Befehle verkettet werden. Die pipe ist ein senkrechter Strich zwischen zwei Befehlen, also:
befehl1 datei | befehl2
Hier bearbeitet der erste Befehl die Datei. Das Ergebnis wird nicht angezeigt, sondern direkt vom zweiten Befehl verarbeitet. Man spart sich also die Erstellung einer Zwischendatei, die dann vom zweiten Befehl extra aufgerufen werden müsste.
Die Ausgabe eines Befehls wird normalerweise am Bildschirm angezeigt. Bei großen Dateien ist dies nicht praktisch. Es gibt zwei Möglichkeiten, die Ausgabe zu studieren:
Bei der Umleitung in eine Datei mit > wird die Datei im
Verzeichnis angelegt und kann dann im Editor (oder mit cat)
angezeigt werden:
befehl > datei
Vorsicht! Wenn schon eine Datei mit diesem Namen existiert, wird sie ohne Warnung überschrieben.
Die zweite Möglichkeit ist, die Datei Bildschirm für Bildschirm
anzuzeigen, mit less:
befehl | less
Der erste Bildschirm wird angezeigt, unten steht ein Doppelpunkt für
die Eingabe, dort kann mit der Leertaste
weitergeblättert oder mit q abgebrochen werden.
TIPP: Mit less sind auch einfache Suchen möglich:
Das erste Ziel ist, aus dem Beispieltext kafka.txt eine
Frequenzliste zu machen. Dafür sind vier Befehle nötig.
cat (concatenate) gibt eine oder mehrere Dateien
hintereinander aus.
cat kafka.txt oder cat *.txt
Mit Option -n werden die Zeilen numeriert
cat -n kafka.txt
Mit einem Platzhalter und einer Umleitung können schnell z.B. alle Textdateien aneinandergehängt werden:
cat *.txt > alle-texte
TIPP: Hier sind natürlich nicht alle Möglichkeiten der Befehle
erklärt. Im Internet gibt es gute Einführungen zu Unixbefehlen. Aber
auch direkt in der Shell kann für fast jeden Befehl eine Hilfeseite
mit man (manual) aufgerufen werden:
man <befehl>, z.B. man cat
Die Hilfeseite wird dann bildschirmweise angezeigt, wie mit
less (s. 2.1.2).
tr (translate) übersetzt einzelne Zeichen, die in seinen
beiden Argumenten angegeben werden. Wegen der beiden Argumente wird
tr nicht mit Dateinamen aufgerufen, sondern wird an cat
angehängt. Der folgende Aufruf ersetzt in der Beispieldatei alle a durch b:
cat kafka.txt | tr a b
In beiden Argumenten können mehrere Zeichen angegeben werden. Die Ersetzungspaare werden dann jeweils aus den ersten, zweiten usw. Zeichen gebildet. Die Großbuchstaben A, B, C, D, E werden mit folgendem Befehl durch Kleinbuchstaben ersetzt:
cat kafka.txt | tr ABCDE abcde
Außerdem können solche Reihen abgekürzt werden, etwa [A-Z] für
alle Großbuchstaben, [a-z] für alle Kleinbuchstaben und
[0-9] für alle Zahlen. Diese Ausdrücke sollten dann in
Hochkommata stehen. Alle Großbuchstaben werden also durch folgenden
Befehl klein geschrieben:
cat kafka.txt | tr '[A-Z]' '[a-z]'
Mit der Option -d (delete) werden die Zeichen des
einzigen Arguments gelöscht. Der folgende Befehl löscht alle
Satzzeichen:
cat kafka.txt | tr -d '[\.,;:!\?«»]'
Für die Frequenzliste sollten die Satzzeichen entfernt werden, aber
darüberhinaus muss der Text in eine Wortliste verwandelt werden. Das
heißt: Alle Leerzeichen werden durch Zeilenschaltungen ersetzt. Auch
zur Markierung des Leerzeichens sind Hochkommata nötig, die
Zeilenschaltung wird unter Unix als \12 geschrieben. Die
»Wortliste« (eigentlich nur ein vertikal Wort für Wort
geschriebener Text) entsteht also durch:
cat kafka.txt | tr ' ' '\n'
sort sortiert die Zeilen einer Datei alphabetisch. Angewendet
auf die Wortliste ergibt dies die Befehlskette:
\verb#$ cat kafka.txt | tr ' ' '\n' ] sort ... zwingen, zwingt zwinkerte, zwischen zwischen zwischen zwischen $
Das Ende der Ausgabe zeigt uns erstens, dass wir die Satzzeichen noch herausnehmen sollten. Dafür hängen wir den Befehl von oben ein:
cat kafka.txt | tr -d '[\.,;:!\?«»]' | tr ' ' '\n' ] sort
Zweitens müssen die gleichen Formen zusammengefasst und dabei gezählt werden.
Mit uniq werden gleiche Zeilen der Eingabe zusammengefasst, mit
uniq -c werden die zusammengefassten Zeilen gezählt. Die
resultierende Frequenzliste wird in eine Datei geschrieben.
cat kafka.txt | tr -d '[\.,;:!\?«»]' | tr ' ' '\n' ] sort | uniq -c > kafka.frq
wc (word count) gibt die Anzahl der Zeilen, Wörter und Zeichen in
einer oder mehreren Dateien aus, z.B.
$ wc kafka.txt
1285 9022 58303 kafka.txt
Mit den Optionen -l, -w und -c kann die Ausgabe
auf einen bestimmten dieser Werte beschränkt werden. Wenn mehrere
Dateien aufgerufen werden, z.B. wc -w *.txt wird eine Liste
aller Dateien mit dem/den entsprechenden Wert(en) erstellt.
Das Programm grep ist ein Suchprogramm, das eine Datei nach
einem Suchausdruck durchsucht und alle Zeilen ausgibt, die auf diesen
Ausdruck passen. Dies Syntax ist
grep [Optionen] 'Suchausdruck' Datei
Die Suche nach ``Garten'' im Kafka-Text gibt drei Zeilen aus:
$ grep 'Garten' kafka.txt Ich hörte die Wagen an dem Gartengitter vorüberfahren, manchmal sah ich den Bäumen im Garten meiner Eltern. öffne und daß in einem Garten die Musik noch spielt.
Sehr vielseitig ist grep durch die Möglichkeit, sogenannte reguläre
Ausdrücke zu benutzen. Das sind Ausdrücke mit Platzhaltern.
| Befehl | Bedeutung | Suchausdruck | Findet... |
. |
beliebiges Zeichen | b.ten | baten, beten, boten |
+ |
vorhergehendes Zeichen min. einmal | be*ten | beten, beeten, beeeten, ... |
* |
vorhergehendes Zeichen beliebig oft | be*ten | bten, beten, beeten, beeeten, ... |
also: .* |
beliebige Zeichen | b.*ten | beten, bluten, bearbeiten |
[ ] |
mögliche Zeichen an einer Position | b[eo]ten | beten, boten, aber nicht buten |
ein Leerzeichen vor jedes Satzzeichen stellen:
cat kafka.txt | sed -e 's/\([\.,;:!\?«]\)/ \1/g'
Um auch die Anführungszeichen zu berücksichtigen, müssen zwei
Ersetzungsausdrücke kombiniert werden. Man könnte zwei sed-Befehle
aneinanderhängen, aber effektiver ist es, sed nur einmal aufzurufen
und zwei Ausdrücke jeweils mit der Option -e anzugeben. Im
Beispiel wird ein Leerzeichen vor jedem Satzzeichen eingefügt und
ein Leerzeichen nach dem öffnenden Anführungszeichen:
cat kafka.txt | sed -e 's/\([\.,;:!\?«]\)/ \1/g' -e 's/\([»]\)/\1 /g'
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -dir latex2html -show_section_numbers -local_icons shell-anleitung.tex
The translation was initiated by Achim Stein on 2011-07-07