Unix-Kommando

Wikimedia-Liste
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. Oktober 2004 um 12:57 Uhr durch Conny (Diskussion | Beiträge) (Filter: typo). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Unix-Systeme zeichnen sich durch eine Vielzahl von Kommandos aus, mit denen sich über eine Shell das Betriebssystem bedienen lässt. Die Syntax dieser Kommandos weicht unter den diversen Shells voneinander ab. Es existieren zwei Hauptströmungen, BSD- und System V-Derivate. Viele Kommandos gibt es in mehreren Varianten, mittlerweile sind auch die Open Source GNU-Tools weit verbreitet. Die meisten Kommandos verfügen über einbuchstabige Optionen, die mit einem Bindestrich angehängt werden und die Funktionalität verändern oder erweitern, z.B. kopiert ein "cp -R" rekursiv ein ganzes Verzeichnis, samt aller Inhalte und Unterverzeichnisse. Die GNU-Versionen erlauben auch lange Optionsnamen wie "cp --recursive". In Befehle und Programme von Unix-Derivaten sind weitere Kommandos aufgeführt.

Im Folgenden wird in Klammern angegeben, bei welcher Unix-Variante das Kommando erstmals auftaucht bzw. von der seine Verbreitung ausgeht:

  • (V7) – das Kommando ist in der Unix-Version V7 von 1979 enthalten
  • (BSD) – das Kommando ist Teil der BSD Version
  • (System V) – das Kommando ist Teil von System V
  • (GNU) – das Kommando ist ein GNU Kommando
  • (SH) – das Kommando ist ein internes Kommando der Shell
  • (CSH) – das Kommando ist ein internes Kommando der C-Shell
  • (-) – das Kommando wird von anderer Seite beigesteuert

Die Baukasten-Philosophie

Die grundlegende Philosophie der Unix-Kommandos ist das Baukasten-Prinzip: Statt großer, spezialisierter Programme für ganze Aufgabengebiete werden kleine, spezialisierte Kommandos für elementare Aufgaben bereitgestellt, die miteinander verknüpft werden können, um komplexere Aktionen durchzuführen.

Unix-Systeme werden traditionellerweise über die Kommandozeile bedient. Zwar gibt es inzwischen auch Desktop-Environments für Unix und unixartige Systeme, jedoch wird von vielen Nutzern weiterhin die Kommandozeile bevorzugt. Dies liegt auch daran, dass die Shells (Kommandozeileinterpreter) unter Unix traditionell wesentlich leistungsfähiger sind als z. B. der DOS-Kommandozeileninterpreter.

Neben der interaktiven Nutzung haben die Shells auch die Aufgabe, so genannte Shellscripts auszuführen. Diese sind grob vergleichbar mit DOS-Stapelverarbeitungsdateien, sind jedoch aufgrund der wesentlich besseren Ausstattung der Unix-Shells mit Kontrollstrukturen oft deutlich leistungsfähiger. Insbesondere erlauben es die Shells, mit einfacher Syntax die Kommando-"Bausteine" zu verknüpfen.

Die Shells enthalten einige eingebaute Kommandos. In modernen Shells beispielsweise:

  • test(SH): Testet Bedingungen z.B. -le (less or equal <=) und Dateieigenschaften
  • expr(SH): Berechnung von arithmetischen Ausdrücken
  • read(SH): Lesen einer Zeile von der Eingabe in eine Variable

Die wichtigsten Shells

  • sh (V7): Bourne Shell, ursprüngliche Shell
  • csh (BSD): mit einer der Programmiersprache C ähnlichen Syntax (C-SHell)
  • ksh (System V): Korn SHell

Weiterentwicklungen

  • bash (GNU): Weiterentwicklung der Bourne Shell (Bourne Again SHell)
  • tcsh (-): Weiterentwicklung der C-Shell (TENEX-C-Shell)

(Weitere Shells siehe unter Unix-Shells)

Filter

Unix kennt 3 Standardkommunikationswege:

Filter sind Programme / Kommandos, die diese Standardkommunikationswege benutzen, z.B. das Kommando "wc".

Ein-/Ausgabeumlenkung (englisch I/O redirection)

Man kann die Standardkommunikationswege "umbiegen". In der Regel tut man das, um aus einer Datei zu lesen oder in eine Datei zu schreiben.

  • Eingabeumlenkung mit "<":
       wc -l < test.dat
wc -l liest aus der Datei test.dat und schreibt das Ergebnis auf den Bildschirm. (an wc kann man allerdings Eingabedateien auch als direkte Argumente übergeben)
  • Ausgabeumlenkung mit ">":
       ls > dir.dat
Der Output von ls erfolgt in die Datei dir.dat. Ist diese bereits vorhanden, dann wird sie überschrieben.
  • Ausgabeumlenkung mit ">>":
       ls >> dir.dat
Der Output von ls wird an das Ende der Datei dir.dat angehängt.
  • Umlenkung von Standarderror mit "2>":
       wc -l < test.dat 2> err.log
Fehlermeldungen werden in die Datei err.log geschrieben.

Das Prinzip der Ein-/Ausgabeumlenkung findet man auch im Betriebssystem MS-DOS.

Pipes

Ein mächtiges Hilfsmittel ist Verwendung einer Pipe zur Ein-/Ausgabeumlenkung

  <kommando1> | <kommando2>

Man kann mehrere Filter miteinander verknüpfen. In der Regel erwartet ein Filter die Eingabe von der Standardeingabe (Tastatur). Die Ausgabe erfolgt auf der Standardausgabe (Bildschirm). Beim Piping wird die Ausgabe eines Kommandos in die Standardeingabe des folgenden Kommandos umgeleitet. Das Unix-Betriebssystem stellt dabei einen Puffer-Speicherbereich zur Verfügung, der die ausführenden Prozesse entkoppelt.

Beispiel:

 grep Unix testdatei | sort

In der Datei testdatei werden alle Zeilen gesucht, die das Wort "Unix" enthalten, diese werden dann sortiert ausgegeben.

Für komplexere Anwendungen lassen sich auch benannte Pipes definieren, auf die dann wie auf eine Datei zugegriffen werden kann:

  • mkfifo: benannte Pipe anlegen
Beispiel:
  • In einer Shell:
           mkfifo Rohr
           ls > Rohr
Hier wird erst eine benannte Pipe angelegt, und dann das aktuelle Verzeichnis in diese umgeleitet.
  • Danach in einer anderen Shell (z. B. in einem anderen Fenster):
           cat Rohr
Hier wird der "Inhalt" von Rohr ausgelesen und auf der Standardausgabe ausgegeben. Es erscheint also die Ausgabe von ls aus der ersten Shell in der Standardausgabe der zweiten Shell.
  • Danach kann die Pipe wie eine normale Datei gelöscht werden:
           rm Rohr

Einige Kommandos

Hilfe

Das Unix-Hilfesystem basiert wesentlich auf den so genannten Manpages (für manual page, Handbuchseite). Idealerweise liegt für jedes Kommando, jeden Aufruf der Programmierschnittstelle (Systemfunktionen, C-Bibliothek) und jede wichtige Konfigurationsdatei eine eigene man page vor.

Die Manpages sind zudem in durchnummerierte Bereiche unterteilt, die unterschiedliche Schnittstellen abdecken (Benutzerkommandos, Administrations-Kommandos, C-Funktionen, etc.).

Die Manpages sind in troff geschrieben, daher kann neben der ASCII-Textversion für die Online-Anzeige auch eine gedruckte Version generiert werden.

Die Kommandos des Manpage-Systems:

  • man (V7): Handbuchseiten (MANual page)
ruft die Manpage für ein bestimmtes Programm, eine bestimmte Funktion, etc. auf.
  • whatis:
gibt eine einzeilige Kurzbeschreibung des Programmes.
  • apropos:
sucht in den Kurzbeschreibungen nach einer Zeichenfolge und gibt die passenden Einträge samt Kurzbeschreibung zurück. Beispielsweise gibt
          apropos color
alle Einträge, in denen das Wort "color" vorkommt.

Von GNU kommt ein alternatives Hilfssystem namens texinfo, das auf Hypertext beruht. Dieses ist in den Editor Emacs integriert, es gibt aber auch einen reinen info-Browser:

Zunehmend werden für GUI-Programme auch HTML-Seiten als Hilfedateien verwendet.

Folgendes ist eine unvollständige Zusammenstellung wichtiger Unix-Kommandos.

Dateioperationen

Der Umgang mit Dateien ist ein wesentlicher Teil der Arbeit am Computer. Dementsprechend gibt es auch unter Unix Kommandos zum Umgang mit Dateien:

  • cd (SH): Wechsel des aktuellen Verzeichnisses (Change Directory)
  • cp (V7): Datei kopieren (CoPy)
  • ls (V7): Dateien in einem Verzeichnis anzeigen (LiSt)
  • mv (V7): eine Datei verschieben oder umbenennen (MoVe)
  • pwd (V7): Anzeige des aktuellen Verzeichnispfades (Print Working Directory)
  • rm (V7): Löschen einer Datei (ReMove)
  • tar (V7): Archivierungsprogramm (Tape ARchive)
  • gzip (GNU): Kompressionstool

Verzeichnisse

Dateien sind unter Unix (wie eigentlich auf allen modernen Betriebssystemen) in Verzeichnissen geordnet. Unter Unix gibt es jedoch, anders als z.B. unter DOS oder Windows, nur einen einzigen Verzeichnisbaum, in den der Inhalt anderer Datenträger bei Bedarf "eingehängt" wird.

Zur Verzeichnisverwaltung stehen u.a. folgende Befehle zur Verfügung:

  • mkdir (V7): erzeugt ein neues Verzeichnis
  • rmdir (V7): löscht ein (leeres) Verzeichnis
  • cd (SH): wechselt in ein anderes Verzeichnis
  • pushd (CSH): wechselt in ein anderes Verzeichnis, merkt sich aber vorher das aktuelle Verzeichnis
  • popd (CSH): kehrt ins vorherige Verzeichnis (vor dem letzten pushd) zurück

Dateisystem

  • mkfs: Dateisystem erstellen (MaKe FileSystem)
  • fsck (V7): Dateisystem überprüfen (FileSystem ChecK)
  • mount (V7) und umount (V7): Dateisystem einhängen in den/aushängen aus dem Verzeichnisbaum
  • df (V7): Anzeige des freien Speicherplatzes auf Datenträgern (Disk Free)
  • du (V7): Anzeige des benötigten Speicherplatzes von Dateien und Verzeichnissen (Disk Usage)

Benutzer- und Rechteverwaltung

Unix ist von Anfang an ein Multi-User-Betriebssystem. Das bedeutet, dass verschiedene Benutzer am Rechner arbeiten können und voreinander abgeschottet werden: Man kann anderen Benutzern erlauben oder verbieten, auf bestimmte Dateien zuzugreifen. Zusätzlich kann man Benutzer auch Gruppen zuordnen, denen kollektiv bestimmte Zugriffsrechte gewährt werden können. Eine besondere Rolle spielt der Benutzer root (Systemadministrator), der als einziger Benutzer vollen Zugriff auf das System hat.

Jeder Benutzer hat typischerweise sein eigenes Heimatverzeichnis, in welchem nur er (und root) Dateien anlegen und löschen kann.

Einige Kommandos:

  • su (V7): Benutzer wechseln (Substitute User)
  • useradd oder adduser: Einen neuen Benutzer anlegen.
  • w: Wer ist alles angemeldet? Und was tun Sie?
  • who (V7): Wer ist alles angemeldet?
  • chmod (V7): Zugriffsrechte auf Dateien ändern (CHange MODe)
  • chown (V7): Eigentümer und/oder Gruppe ändern (CHange OWNer)
  • chgrp (V7): Gruppenzugehörigkeit ändern (CHange GRouP)

Textmanipulation

Eine der Stärken von Unix sind seine vielen Zubehörprogramme, insbesondere (aber nicht nur) zur Bearbeitung von Textdateien. Die Stärke beruht u. a. darauf, dass die Zubehörprogramme leicht über pipes "zusammengeschaltet" werden können, um komplexere Aufgaben zu erfüllen.

  • cat (V7): Ausgabe und/oder Verkettung von Textdateien in der Kommandozeile (conCATenate)
  • cut: Auswählen bestimmter Spalten bei der Ausgabe.
  • echo (V7): Ausgabe
  • grep (V7): Anzeige aller Zeilen einer Textdatei, die auf einen regulären Ausdruck passen.
  • less (GNU) und more: seitenweise Ausgabe einer Textdatei
  • sort (V7): nach bestimmten Kriterien sortieren.
  • strings: zeigt nur die druckbaren Zeichen (ASCII) einer Binärdatei an.
  • sed (V7): mächtiges Werkzeug zur Textmanipulation (Stream EDitor)

So mächtig die Kommandos zur Textmanipulation auch sind, für größere Änderungen an Texten sind Editoren besser geeignet. Selbstverständlich gibt es diese auch unter Unix. Weit verbreitet sind u. a.:

  • Emacs (GNU,-): leistungsfähiger Editor mit Lisp-Interpreter
  • joe (-) (Joe's Own Editor)
  • pico (-) : für Anfänger leicht bedienbarer Editor
  • vi (BSD) (VIsual editor)
  • vim (-) (Vi IMproved)

Netz

  • ftp (BSD): Kommanozeilenclient für FTP (File Transfer Protocol)
  • mail (V7): E-Mail verschicken.
  • ping (BSD): schickt ein ping an einen anderen Rechner.
  • telnet (BSD): Client für das Telnet-Protokoll
  • ssh (-): Shell für verschlüsselte Verbindungen, sicherer als Telnet (Secure SHell)
  • rsh (BSD): (Remote SHell)
  • netstat (BSD): Anzeige der Netzverbindungen
  • ifconfig (BSD): Netzwerkschnittstellenkonfiguration
  • talk: mit einem anderen Benutzer unterhalten.
  • write (V7): Nachricht an einen Benutzer schicken
  • wall: Nachricht an alle Benutzer eines Systems schicken (Write ALL)

Prozessmanagement

  • at (V7): Prozess später starten
  • cron: Prozess regelmäßig starten
  • free (-): Anzeige des freien Speicherplatzes (flüchtiger Speicher)
  • kill (V7): einen Prozess beenden
  • killall: alle Prozesse des angegebenen Namens beenden
  • nice (V7) und renice (BSD): Priorität eines Prozesses ändern.
  • ps (V7): Anzeige der laufenden Prozesse.
  • pstree (-): "-" in Baumform
  • top (-): interaktive Anzeige der laufenden Prozesse. (Table Of Processes)
  • uname: Ausgabe von Informationen über Betriebssystem und Rechner

C Entwicklungssystem

  • cc (V7): C-Compiler
  • gcc (GNU): GNU-C-Compiler
  • make (V7): Programmgruppenverwaltung
  • lint (V7): C-Code-Überprüfung
  • as (V7): Assembler
  • ld (V7): Link Loader
  • ar (V7): Archiver
  • adb (V7): Debugger
  • gdb (GNU): Gnu Debugger
  • nm (V7): Symbol Table
  • size (V7): Programmsegmentgrößen
  • prof (V7): Profiler
  • lex (V7): Lexical Analyser Generator
  • yacc (V7): Parser Generator

Textsatzsystem

Unix wurde zusammen mit dem leistungsfähigen Textsatzsystem troff entwickelt, das unter anderem Tabellen- und Formelsatz ermöglicht.

Auch die Manualseiten können mit diesem System gesetzt werden. nroff erlaubt die Ausgabe auf Textterminals und Zeilendrucker. Das betriebssystemunabhängige TeX hat jedoch *roff weitgehend abgelöst. Auch das GNU-Hilfesystem texinfo arbeitet mit TeX für die Druckausgabe.

  • troff (V7): Makroorientiertes Textsatzsystem für Linotype-Fotosatzmachinen
  • nroff (V7): Makroorientiertes System für Terminal und Zeilendrucker
  • groff (GNU): GNU Version von troff und nroff
  • eqn (V7): Mathematischer Formelsatz für troff (Präprozessor)
  • neqn (V7): Mathematischer Formelsatz für nroff (Präprozessor)
  • tbl (V7): Tabellen für troff und nroff (Präprozessor)
  • spell (V7): Rechtschreibprüfprogramm