Vorlesungsskript 05

Unix-Cheatsheet

Dies ist eine kompakte Übersicht über die wichtigsten Kommandos und anderes, das man auf der Unix-Kommandozeile braucht. Die Kommandos werden in Form von Beispielen vorgestellt, wobei Wörter in Großbuchstaben wie z.B. FILE1 oder FILE2 Beispiel-Argumente sind, die Sie beim Gebrauch der Kommandos durch Ihre eigenen Dateinamen oder andere Argumente ersetzen sollten.

Manpages

Vorweg: Viele Kommandos haben viel mehr Optionen, als wir hier vorstellen können. Die wichtigste Quelle für Informationen darüber sind die manual pages (kurz manpages), die Sie direkt von der Kommandozeile aus abrufen können. Dazu erteilen Sie das Kommando man PAGE, wobei PAGE z.B. für den Namen eines Kommandos steht. Zum Beispiel: man ls, oder auch: man man. Es wird dann eine Manpage mit Informationen zu dem angegebenen Kommando angezeigt.

Auf Manpages können Sie mit den Pfeiltasten hoch und runter scrollen. Nach einem Begriff können Sie suchen, indem Sie / tippen, den Begriff eingeben und Enter drücken. Mit q verlassen Sie die Manpage und kehren zur Kommandozeile zurück.

Wichtige Programme und Kommandos – Dateisystem

cd DIR
Wechselt in das Verzeichnis DIR. DIR kann als absoluter Pfad oder als relativer Pfad (relativ zum aktuellen Arbeitsverzeichnis) angegeben werden.
cd -
Wechselt zurück in Ihr vorheriges Arbeitsverzeichnis.
cd ..
Wechselt in das Verzeichnis, von dem das aktuelle Arbeitsverzeichnis ein Unterverzeichnis ist, geht also eine Ebene höher in der Hierarchie.
cd
Ohne Argument wechselt cd in Ihr Home-Verzeichnis, das normalerweise den absoluten Pfad /home/$USER hat, wobei $USER für Ihren Benutzernamen steht. Hier legt man normalerweise alle persönlichen Dateien ab. Beachten Sie jedoch, dass im PC-Pool das Home-Verzeichnis bei jedem Neustart gelöscht wird.
ls
Zeigt den Inhalt des aktuellen Arbeitsverzeichnisses an.
ls -l
Zeigt den Inhalt des aktuellen Arbeitsverzeichnisses detailiert an.
ls -a
Zeigt den Inhalt des aktuellen Arbeitsverzeichnisses einschließlich versteckter Dateien und Verzeichnisse an.
ls -la
Zeigt den Inhalt des aktuellen Arbeitsverzeichnisses detailiert einschließlich versteckter Dateien und Verzeichnisse an.
ls DIR
Zeigt den Inhalt des Verzeichnises DIR an.
ls -l DIR
Zeigt den Inhalt des Verzeichnises DIR detailiert an.
ls -la DIR
Zeigt den Inhalt des Verzeichnises DIR detailiert einschließlich versteckter Dateien und Verzeichnisse an.
ls -l FILE1
Zeigt Details zur Datei FILE1 an.
mkdir DIR
Erstelt ein neues Verzeichnis mit dem Pfad DIR.
touch FILE
Erstelt eine leere Datei FILE. Wenn die Datei bereits existiert, wird lediglich ihr Bearbeitungsdatum aktualisiert.
cp FILE1 FILE2
Erstellt eine Kopie der Datei FILE1 mit dem Pfad FILE2.
cp -r DIR1 DIR2
Erstellt das Verzeichnis DIR2 als Kopie des Verzeichnisses DIR1, einschließlich seines ganzen Inhaltes.
mv FILE1 FILE2
Benennt die Datei oder das Verzeichnis FILE1 um und/oder verschiebt sie/es in ein anderes Oberverzeichnis, sodass FILE2 ihr/sein neuer Pfad wird.
rm FILE
Löscht die Datei FILE. Das ist unwiderruflich, also Vorsicht!
rm -rf DIR
Löscht das Verzeichnis DIR und seinen ganzen Inhalt. Das ist unwiderruflich, also Vorsicht!

Absolute und relative Pfade

Jedes Verzeichnis und jede Datei auf dem Computer hat einen absoluten Pfad. Das oberste Verzeichnis, das sogenannte Wurzelverzeichnis (engl. root directory), hat zum Beispiel den Pfad /. Sein Unterzeichnis mit dem Namen home hat den absoluten Pfad /home. Darin befindet sich auf meinem Laptop mein Homeverzeichnis; mein Benutzername ist ke, also hat mein Homeverzeichnis den absoluten Pfad /home/ke. In meinem Homeverzeichnis habe ich wiederum viele Unterverzeichnisse, eins davon heißt python und hat natürlich den absoluten Pfad /home/ke/python. Darin liegt u.a. eine Datei mit dem Namen notes.txt, deren absoluter Pfad ist also /home/ke/python/notes.txt.

Hier sind die absoluten Pfade von ein paar wichtigen Verzeichnissen, die es auf jedem Ubuntu-System gibt:

/
Das Wurzelverzeichnis. Oberstes Verzeichnis. Ist als einziges Verzeichnis kein Unterverzeichnis von irgendeinem anderen Verzeichnis.
/home
Hierin liegen alle Benutzerverzeichnisse.
/media
Hier liegen externe Datenträger wie z.B. USB-Sticks.
/usr/bin
Hier liegen die meisten Standardprogramme.

Meistens arbeiten wir aber mit relativen Pfaden. Relative Pfade beginnen nicht im Wurzelverzeichnis, sondern im aktuellen Arbeitsverzeichnis. Wenn ich mich also in meinem Homeverzeichnis befinde, steht der relative Pfad python für das Verzeichnis namens python darin, und der relative Pfad python/notes.txt steht für die Datei namens notes.txt in ebenjenem Verzeichnis.

Zwei spezielle Pfade sind . und ... . steht für das aktuelle Verzeichnis; .. für das ihm übergeordnete Verzeichnis. Es sind sozusagen Abkürzungen; man kann sie z.B. Programmen als Argumente übergeben, die Pfade als Argumente erwarten. So zeigt ls .. den Inhalt des dem Arbeitsverzeichnis übergeordneten Verzeichnisses an. Sie lassen sich aber auch als einzelne Komponenten innerhalb von Pfaden verwenden. Zum Beispiel steht der absolute Pfad /home/ke/.. für dasselbe Verzeichnis wie /home. Und wenn ich mich im Verzeichnis /home/ke/scratch befinde, erreiche ich mit dem relativen Pfad ../python/notes.txt dieselbe Datei wie mit dem absoluten Pfad /home/ke/python/notes.txt

Eine weitere Abkürzung ist ~, die Tilde. Sie steht für das Homeverzeichnis der jeweiligen Benutzerin.

Wichtige Programme und Kommandos – Textverarbeitung

cat FILE
Gibt den Inhalt der Datei FILE aus.
cat FILE1 FILE2 ...
Gibt den Inhalt mehrerer Dateien hintereinander aus.
cat
Ohne Argument liest cat seinen Input direkt vom Terminal. Es wartet dann kommentarlos darauf, dass Sie etwas eingeben. Schließen Sie die Eingaben mit Strg+D ab.
wc -l
Zählt die Zeilen im Input.
wc -c
Zählt die Zeichen im Input.
wc -w
Zählt die Wörter im Input.
egrep PATTERN
Sucht im Input nach Vorkommnissen des angegebenen Musters. Gibt die Zeilen aus, in denen eine Entsprechung für das Muster gefunden wird.
egrep -x PATTERN
Sucht im Input nach Zeilen, die dem angegebenen Muster vollständig entsprechen, und gibt sie aus.
egrep -v PATTERN
Sucht im Input nach Vorkommnissen des angegebenen Musters. Gibt die Zeilen aus, in denen keine Entsprechung für das Muster gefunden wird.
egrep -f FILE
Sucht im Input nach Vorkommnissen der Muster, die in der Datei FILE stehen (eins pro Zeile). Gibt die Zeilen aus, in denen eine Entsprechung für irgendeins der Muster gefunden wird.
sed -re 's/PATTERN/REPLACEMENT/g'
egrep sucht; sed sucht und ersetzt. Und zwar ersetzt das Beispielkommando alle Vorkommnisse des Musters PATTERN durch die als REPLACEMENT angegebenen Zeichen. Die Syntax ist etwas komplex; das liegt u.a. daran, dass sed („stream editor“) zahlreiche weitere Funktionen hat. Sein häufigster Einsatzzweck ist aber wohl das Suchen und Ersetzen.
cut -f N
Bei mehrspaltigem Input entfernt cut auf jeder Zeile jedes Feld außer dem N-ten. Statt einer einzelnen Zahl können auch Ausdrücke wie z.B. 1-2,4,7- angegeben werden, um mehrere Spalten zu erhalten. Als Trennzeichen zwischen den Feldern jeder Zeile dient standardmäßig das Tabzeichen. Wenn das Trennzeichen im Input ein anderes ist, muss das mit Hilfe der Option -d angegeben werden. Wenn z.B. das Leerzeichen das Trennzeichen ist, so: -d ' '. Wenn das Semikolon das Trennzeichen ist, so: -d ';'. Usw.
tr SET1 SET2
Ersetzt einzelne Zeichen im Input. Jedes Vorkommen des n-ten Zeichens in SET1 wird durch das n-te Zeichen in SET2 ersetzt. SET2 kann auch aus nur einem Zeichen bestehen, dann wird jedes Zeichen in SET1 durch dasselbe Zeichen ersetzt.
head -n N
Gibt die ersten N Zeilen des Inputs aus.
tail -n N
Gibt die letzten N Zeilen des Inputs aus.
head -n -N
Gibt alle Zeilen des Inputs aus bis auf die letzten N.
tail -n +N
Gibt alle Zeilen des Inputs ab der N-ten aus.
sort
Sortiert die Zeilen des Inputs alphabetisch.
sort -n
Sortiert die Zeilen des Inputs numerisch.
sort -k N
Sortiert die Zeilen des mehrzeiligen Inputs alphabetisch nach der N-ten Spalte.
sort -nk N
Sortiert die Zeilen des mehrzeiligen Inputs numerisch nach der N-ten Spalte.
uniq
Fasst identische Zeilen, die direkt untereinander stehen, zu einer zusammen. Wird oft auf den Output von sort angewendet, um Duplikate zu entfernen.
uniq -c
Wie oben, fügt aber am Anfang eine Spalte hinzu, die angibt, wie viele identische Zeilen jeweils zusammengefasst wurden.
bc
Der „Taschenrechner“ für die Kommandozeile. Der Input muss ein arithmetischer Term wie (1+1)*2 sein. bc gibt dann das Ergebnis aus.

Alle diese Programme können Sie auch direkt mit einem Dateipfad als Argument aufrufen. Sie lesen ihren Input dann direkt aus der Datei und man muss kein cat-Kommando davorsetzen. Ich finde es in den meisten Fällen allerdings mit cat einheitlicher und klarer.

Wenn Sie die Programme ohne cat und ohne Dateiargument aufrufen, lesen sie ihren Input vom Terminal, wie cat ohne Argument (s.o.).

Wichtige Programme und Kommandos – Verschiedenes

less
less ist neben head und tail eine weitere Möglichkeit, in lange Dateien hineinzuschauen, ohne den ganzen Inhalt dauerhaft ins Terminal abzuladen. less ist ein sogenannter Pager, ein interaktives Programm, mit dem Sie eine Textdatei anzeigen können. Wie bei man können Sie mit den Pfeiltasten hoch- und runterscrollen, mit dem Schrägstrich können Sie suchen, und mit q beenden Sie den Pager und kehren zur Kommandozeile zurück.
wget URL
Lädt die Datei mit der angegebenen Internetadresse herunter und speichert sie im aktuellen Arbeitsverzeichnis.

Tastenkombinationen für die Kommandozeile

Tab
Mit der Tabulatortaste können Sie sich viel Tipparbeit auf der Kommandozeile sparen. Geben Sie die ersten paar Buchstaben eines Kommandos oder eines Dateinamens ein und drücken Sie dann die Tabulatortaste. Das Kommando oder der Dateiname wird automatisch vervollständigt, wenn möglich. Wenn nicht, zeigt Ihnen ein zweiter Druck auf die Tabulatortaste eine Auswahl an möglichen Vervollständigungen an. Probieren Sie es aus!
Pfeiltasten ↑/↓
Hiermit können Sie durch die zuletzt eingegebenen Kommandos blättern. Dann einfach Enter drücken, um das aktuell ausgewählte Kommando noch einmal auszuführen.
Strg+W
Hiermit löschen Sie das zuletzt eingegebene Wort auf der Kommandozeile. Nützlich z.B., wenn Sie mit Hilfe der Pfeiltasten ein altes Kommando erneut ausgewählt haben, aber nun das letzte Argument verändern wollen.
Strg+U
Hiermit löschen Sie Ihre gesamte Eingabe auf der Kommandozeile und können von vorn beginnen, Ihr Kommando einzugeben.
Strg+C
Wenn gerade ein Programm läuft, können Sie es mit dieser Tastenkombination in den meisten Fällen abbrechen. Wenn dagegen die Shell gerade auf Ihre Eingabe wartet, hat sie einen ähnlichen Effekt wie Strg+U, nur dass die abgebrochene Eingabe stehenbleibt und darunter ein neues Prompt angezeigt wird.
Strg+D
Hiermit beenden Sie die aktuelle Shell (und damit das Terminal-Fenster/den Terminal-Tab, in dem sie läuft).
Strg+Shift+C
In die Zwischenablage kopieren.
Strg+Shift+V
Aus der Zwischenablage einfügen.

Hilfe und Ressourcen