Die Macht der Kommandozeile kennenlernen und nutzen

Axel Beckert

Symlink.ch / LUGS / ISG D-PHYS, ETH Zürich

abe@noone.org
http://noone.org/abe/

Übersicht

Teil 1: Die Helfer der Kommandozeile

  • Was ist die Kommandozeile oder Shell?
  • Die Kommandozeile zerlegt
  • Kurze und lange Optionen
  • Typische, oft vorkommende Optionen
  • Wo bin ich? Was ist hier?
  • Verzeichnisse
  • Kopieren, Verschieben und Umbenennen
  • Löschen
  • Suchen
  • Dateien anzeigen
  • Wie kriege ich Hilfe auf der Kommandozeile?

Teil 2: Kombination macht die Kommandozeile mächtig

Was ist die Kommandozeile?

  • Kommunikation mit dem Rechner durch Tippen von Befehlen
  • Es gibt viele verschiedene Kommandozeilen-Programme.
  • Windows-Welt: cmd.exe, command.com
  • Unix-Welt: sh, ksh, csh, tcsh, bash, zsh
  • Gemeinsamkeit der Unix-Shells: Alle Befehle, die Programme sind (Teil 1)
  • Unterschiede zwischen Unix-Shells betreffen die Syntax (Teil 2)

Die Kommandozeile zerlegt

Prompt  Befehl  Optionen  Parameter
>  mv  -v -i  datei1 datei2
$  cp  --recursive --preserve  datei1 datei2 verzeichnis
#  rm  -rf  verzeichnis

Lange und kurze Optionen

BSD-Programme haben oft nur Ein-Buchstaben-Optionen, dafür kombinierbar

GNU-Programme haben oft kurze (ein Buchstabe mit "-" beginnend) und lange Varianten (Wort mit "--" beginnend) ihrer Optionen.

Typische, oft vorkommende Optionen

Kurz Lang Bedeutung
-h --help Hilfe
--usage Ausführliche Hilfe
-v, -V --version Version anzeigen
-v --verbose Ausführliche Ausgabe
-f --force Ausführung erzwingen
-i --interactive Fragen vor destruktiven Aktionen
-r, -R --recursive In Verzeichnisse hinabsteigen
-p --preserve Datei-Informationen (User, Rechte, Änderungszeit, etc.) sofern möglich beibehalten
-d3, -d 3 --debug=3 Debug-Level 3

Verzeichnisse

  • mkdir verzeichnisname: make directory — Erstelle Verzeichnis.
  • mkdir -p verzeichnisname make directory and parents — Erstelle Verzeichnis und falls nötig auch sämtliche Elternverzeichnisse.
  • cd verzeichnisname: change directory — Wechsle Verzeichnis.
  • cd ohne Parameter: Gehe ins Home-Verzeichnis.
  • cd -: Gehe zurück ins vorherige Verzeichnis.

Kopieren, Verschieben und Umbenennen (1)

Welche Befehle für was?

  • mv: move — Verschieben und Umbenennen
  • cp: copy — Kopieren

Dateien kopieren und verschieben

  • mv alt neu, cp datei kopie
  • mv datei1 datei2 verz, cp datei1 datei2 verz
  • mv *.txt verz, cp *.txt verz

Kopieren, Verschieben und Umbenennen (2)

Optionen zu mv und cp

  • mv -v ..., cp -v ...: verbose — wortreich, ausführlich
  • mv -i ..., cp -i ...: interaktiv, vor Überschreiben fragen
  • cp -r ...: recursive — rekursiv, auch Unterverzeichnisse kopieren
  • cp -p ...: preserve — Dateirechte und Änderungsdatum beibehalten bzw. mitkopieren

Löschen

  • rm datei: Datei "datei" löschen
  • rm *.txt: Dateien mit Endung "txt" löschen
  • rmdir verzeichnis: Leeres Verzeichnis löschen
  • rm -r verzeichnis: rekursiv: Verzeichnis inkl. aller darin enthaltenen Dateien und Unterverzeichnisse löschen.
  • rm -i *.txt: Vor dem Löschen jeder Datei nachfragen
  • rm -f *.txt: Auch vor dem Löschen schreibgeschützter Dateien nicht nachfragen

Schnelles Suchen in Liste der Dateinamen

Frage: Wo auf dem Rechner liegt eine Datei, die eine bestimmte Zeichenkette im Namen hat.

  • locate xyz: Lokalisiere
  • locate -i xyz: Lokalisiere unabhängig von Groß- und Kleinschreibung

Frage: Wo auf dem Rechner liegt das Programm "xyz"?

  • which xyz

Direkte Suche in bestimmtem Verzeichnis

  • find . -name '*txt*': Finde Dateien oder Verzeichnisse im aktuellem Verzeichnis (".") mit "txt" im Namen.
  • find xyz -iname '*txt*': Finde Dateien oder Verzeichnisse im Verzeichnis "xyz" mit "txt" (Groß-/Kleinschreibung egal) im Namen.
  • find abc xyz -mtime -1: Finde Dateien oder Verzeichnisse in den Verzeichnissen "abc" und "xyz", die vor weniger als einem Tag angelegt oder verändert wurden.
  • find . -type d: Finde alle Verzeichnisse unterhalb des aktuellen Verzeichnisses.
  • find verzeichnis: Finde alle Dateien und Verzeichnisse unterhalb des Verzeichnisses "verzeichnis".

Wie bekomme ich Hilfe?

  • Text, gut zum Durchsuchen: man programmname (Hilfe dazu: man man)
  • Strukturiert mit Hyperlinks: info programmname (Hilfe dazu: info info; Übersicht über sätliche vorhandene Dokumentation: info ohne Parameter)

Navigation in man/less

Eingabe Bedeutung
/text<Eingabe> Vorwärts suchen nach "text"
?text<Eingabe> Rückwärts suchen nach "text"
n Nächster Treffer in aktueller Suchrichtung
<Cursor runter>, <Eingabe>, <Ctrl-n>, j Eine Zeile nach unten
<Cursor hoch>, <Ctrl-p>, k Eine Zeile zurück
<Bild ab>, <Leertaste> Eine Seite vor
<Bild auf>, b Eine Seite zurück
<Pos1>, g Zum Textanfang springen
<Ende>, <Shift-g> Zum Textende springen
q Beenden

Nach was suchen? Was anschauen?

Problem: Eine sog. "man page" kann locker über 5000 Zeilen haben und ist meist keine eine Bettlektüre sondern eine Referenz.

  • Kurzanleitung ("Synopsis"): Kurze, generische Bsp. der Verwendung
  • Optionen ("Options")
  • Beispiele ("Examples")
  • Siehe auch ("See also")
  • Umgebung ("Environment")
  • Dateien ("Files")

PAUSE

Pause, danach Teil 2: Kombination macht die Kommandozeile mächtig

Übersicht, Teil 2

Teil 2: Kombination macht die Kommandozeile mächtig

  • Mehrere Befehle hintereinander
  • Hilfreiche Befehle zum Kombination anderer Befehle
  • Ein- und Ausgabeumleitung — Beispiele
  • Ausgabe von Befehlen als Parameter verwenden
  • Wiederholen von Befehlen

Mehrere Befehle hintereinander

  • Hintereinander ausführen: cd verz; ls
  • Zweites nur ausführen, wenn erstes erfolgreich: cd verz && ls
  • Zweites nur ausführen, wenn erstes nicht erfolgreich: cd verz || ls
  • Ausgabe des ersten Befehls an den zweiten als Eingabe weitergeben: ls | sort -n

Hilfreiche Befehle zum Kombination anderer Befehle

  • grep Suchbegriff: Filtern nach Suchbegriff
  • sort: Zeilen alphabetisch sortieren
  • sort -r: Zeilen rückwärts alphabetisch sortieren
  • sort -n: Zeilen numerisch sortieren
  • uniq: Doppelte Zeilen entfernen
  • uniq -c: Vorkommen der Zeilen zählen
  • wc (word count): Zeichen, Worte und Zeilen zählen
  • tail -10 (Schwanz): Nur die letzten 10 Zeilen ausgeben.
  • head -10 (Kopf): Nur die ersten 10 Zeilen ausgeben.
  • cut (schneiden): Zeichenspalten ausschneiden
  • awk '{print $1}': Wortspalten ausschneiden
  • ssh benutzer@rechner 'befehl': Befehl auf anderem Rechner ausführen

Ein- und Ausgabeumleitung — Beispiele (1)

Anzahl Zugriffe auf den RSS-Feed meines Blogs:

grep /blog/index.rss access.log | \
  wc -l

Ein- und Ausgabeumleitung — Beispiele (2)

Alle Zugriffe auf den RSS-Feed meines Blogs, sortiert nach IP-Adressen:

grep /blog/index.rss access.log | \
  sort

Ein- und Ausgabeumleitung — Beispiele (3)

Alle IP-Adressen, die auf den RSS-Feed meines Blogs zugegriffen haben.

grep /blog/index.rss access.log | \
  sort | \
  awk '{print $1}' | \
  uniq

Ein- und Ausgabeumleitung — Beispiele (4)

Anzahl verschiedener IP-Adressen, die auf den RSS-Feed meines Blogs zugegriffen haben:

$ grep index.rss /var/log/apache/access.log | \
  sort | \
  awk '{print $1}' | \
  uniq | \
  wc -l

Ein- und Ausgabeumleitung — Beispiele (5)

Die 10 am häufigsten auf den RSS-Feed meines Blogs zugreifende IP-Adressen:

grep /blog/index.rss access.log | \
  sort | \
  awk '{print $1}' | \
  uniq -c | \
  sort -n | \
  tail -10

Ausgabe von Befehlen als Parameter verwenden

  • ls -l `which tar`
  • ls -l $(which tar)
  • which tar | xargs ls -l
  • find . -name '*.mp3" -print0 | xargs -0 mpg123

Wiederholen von Befehlen

  • while true; do ps aux | grep xterm; sleep 1; done
  • until ssh rechner; do sleep 1; done
  • for i in *.txt; do cp -v $i $i.backup; done

Links

Danke an

  • Fabian Wenk für den Vorschlag, diesen Workshop zu halten
  • Moira und David fürs Organisieren
  • Eric S. Meyer für S5