<<TableOfContents>>

UNIX-Befehle sind kleine Kommandozeilenprogramme und laufen somit in einer Shell im Textmodus ab. Sie eignen sich hervorragend zum Automatisieren von Arbeitsabläufen, indem man diese aus einem Shell-Script heraus aufruft.

Ausführliche Beschreibungen zu den Programmen findet man in der Regel in den jeweiligen ManPages und bei den [[GNU]]-Varianten in den InfoPages. Hilfe und ausführliche Beschreibung aller Optionen gibt es also, z.B: für den Befehl ls, mit {{{ man ls }}} oder mit {{{ info ls }}} oder mit {{{ ls --help }}}

In eine Textkonsole kommt man nach einer Linux Installation durch :

 * Die Tastenkombination [Ctrl]-[Alt]-[F1], (In den Grafik-Fenster-Maus-Bildschirm wird gewöhnlich zurückgeschaltet mit [Ctrl]-[Alt]-[F7]

Hier eine kleine Liste gebräuchlicher UNIX-Kommandos und deren Handhabung. Weitere Kommandos, die der Systembetreuer verwenden wird, sind in [[Anleitung/Admin]] beschrieben.

'''Tools, zu denen mehr als 1-2 Zeilen zu schreiben sind, gehören auf eine eigene, gleichnamige Seite!'''

= Allgemeine Form =
Ein einfaches Kommando hat die Form:

{{{
kommandoname [argumente]
}}}
Angaben in [ ] sind optional, d.h. sie sind nicht für jedes Kommando zwingend erforderlich, oft aber hilfreich, um ein bestimmtes Verhalten zu erreichen.

Man kann zwei Arten von Kommandos unterscheiden:

 * Die sog. eingebauten Befehle (shell built-in). Diese Kommandos werden bereits beim Einloggen des Benutzers am System in den Hauptspeicher geladen. (Diese sind abhängig von der verwendeten Shell, unter GNU/Linux meist die [[Bash]].)
 * normale Programme

= Beispiele gebräuchlicher Programme =
== pwd : print working directory : Zeige Arbeitsverzeichnis ==
Zeigt Ihnen den Namen des Verzeichnisses an, in dem man sich gerade befindet:

{{{
pwd
}}}
ergibt

{{{
/home/benutzername
}}}
== ls : List : Zeige Inhaltsverzeichnis ==
Gibt eine Liste von Dateien und Unterverzeichnissen eines Verzeichnisses aus:

{{{
ls -l /home/
drwxr-xr-x    9 root     root         4096 Jan 18 21:53 .
drwxr-xr-x   17 root     root         4096 Jan 24 20:19 ..
drwxr-xr-x   24 benutzer users        4096 Jan 10 18:16 MusikBox
drwx------   68 benutzer users        4096 Jan 24 22:19 benutzer
drwxrwx---    2 benutzer users        4096 Dez 22 14:44 shared
drwxr-xr-x    6 benutzer users        4096 Nov 27 00:30 sonstiges
}}}
das l sorgt hierbei für die Darstellung als eine Zeile pro Datei oder Verzeichnis mit den oben zu sehenden Angaben zu Benutzer, den Zugriffsrechten etc.

Weitere Infos gibts unter [[ls]] sowie in der ManPage.

== cp : Copy : Kopiert eine oder mehrere Dateien ==
Kopiert eine Datei an einen anderen Ort oder in einen neuen Dateinamen.

{{{
cp brief brief.txt
}}}
erzeugt ein Kopie der Datei brief als brief.txt

{{{
cp index.htm webseite/index.html
}}}
erzeugt eine Kopie von index.htm mit Namen index.html im Unterverzeichnis webseite.

{{{
cp -a mystuff oldstuff.txt /save
}}}
Wenn save ein Unterverzeichnis ist, dann wird mystuff und oldstuff.txt dorthin kopiert.

== rm : remove : Löscht Dateien oder Inhaltsverzeichnisse ==
Löscht Dateien, zusammen mit der Option -r (rekursiv) werden auch Verzeichnisse mit allen darin enthaltenen Dateien und Unterverzeichnissen gelöscht.

Vor dem endgültigen Löschen erfolgt keine weitere Rückfrage, und die Dateien werden wirklich gelöscht und finden sich anschließend nicht in irgendeinem Papierkorb wieder.

{{{
rm brief.txt
}}}
löscht die Datei brief.txt.

{{{
rm -r Eigene\ Dateien
}}}
löscht das Verzeichnis Eigene Dateien mit allen enthaltenen Dateien und Unterverzeichnissen.

Um ein Verzeichniss mit einem Leerzeichen zu löschen, muss dieses maskiert werden.

{{{
rm -f *
}}}
löscht schreibgeschützte Dateien ohne vorher nachzufragen. Sehr wirkungsvoll in Verbindung mit -r

{{{
rm -rf /
}}}
/!\ Sollten Sie diesen Befehl ausführen, evtl. auch noch als Superuser [[root]], so werden '''alle''' Ihre Dateien und Verzeichnisse auf der Platte gelöscht.

== mv : Move : Dateien Verschieben ==
Verschiebt eine Datei an einen anderen Ort oder gibt einer Datei (durch umbenennen ;-) ) einen anderen Namen.

{{{
mv brief brief.txt
}}}
benennt brief in brief.txt um

{{{
mv index.html ./webseite/index.html
}}}
verschiebt die Datei index.html in das Unterverzeichnis webseite

{{{
mv /home/benutzer/Desktop/test ~
}}}
verschiebt das Verzeichnis test von Ihrem Desktop in Ihr home-Verzeichnis.

{{{
mv /home/benutzer/Desktop/test ..
}}}
verschiebt das Verzeichnis test von Ihrem Desktop ein Verzeichnis höher

{{{
cd ; mv docu /save ; ln -s /save/docu docu
}}}
Voraussetzung: /save ist die zweite Festplatte bzw. Die Datenpartition auf ihr, und ist durch [[fstab]] eingebundenm und der Benutzer hat das Recht dort zu schreiben. Dann benutze ich diese Zeile, um mein Unterverzeichnisse 'docu' auf die zweite Festplatte zu verschieben um Platz auf der ersten Festplatte zu schaffen. Wegen des Link-Befehls 'ln -s /save/docu docu' werden die daten so weiterbenutzt, als seien sie noch auf ihrem Ursprungsort.

Hinweis: {{{ mv }}} geht viel schneller, wenn die Quelle und das Ziel auf der gleichen Festplatte in der gleichen Partition sind. Dann werden nur die Inhaltsverzeichniseinträge umgehängt.

== mkdir : Make Directory : Erzeuge ein Verzeichnis ==
Erstellt ein neues Verzeichnis.

{{{
mkdir /home/benutzer/Desktop/test
}}}
erstellt auf Ihrem Desktop ein neues Verzeichnis mit dem Namen test. Mit der Option {{{-p}}} werden alle nicht vorhandenen Verzeichnisse miterstellt.

{{{
mkdir -p /home/benutzer/Desktop/test/test1/test2
}}}
erzeugt die Verzeichnisse {{{test1}}} und {{{test1/test2}}} im Verzeichnis {{{test}}} auf Ihrem Desktop.

== rmdir : remove Directory : Lösche ein leeres Verzeichnis ==
Löscht ein leeres Verzeichnis.

{{{
rmdir /home/benutzer/Desktop/test
}}}
Löscht das Verzeichnis /home/benutzer/Desktop/test, sofern es leer ist. Ansonsten erhalten Sie eine Fehlermeldung.

Um Verzeichnisse zu löschen, die noch Dateien enthalten, sehen Sie bitte unter rm -r nach.

== grep : global regular expression print : Suche nach Mustern in Dateien ==
["get regular Expression"?]

Das Kommando "grep" leitet sich ab aus dem "global" Befehl des Editors "ex" bzw "vi". "Grep" steht für "global regular expression print", dh "suche global (in allen Zeilen des Puffers) nach den Zeilen, in denen das Muster (regular expression) vorkommt, und gebe diese dann aus (print)". Kuerzer gesagt: "Gebe alle Zeilen aus, die das gegebene Muster enthalten."

[[grep]] findet eine spezifizierte Zeichenfolge in Dateien und gibt die gefundenen Zeilen am Bildschirm aus. Wenn Sie nach längeren Ausdrücken mit Leerstellen und Sonderzeichen suchen, geben Sie diese einfach in Hochkommata an:

{{{
grep 'Sehr geehrter Herr' /home/$HOME*
}}}
Dieser Befehl sucht in allen Dateien, die sich in Ihrem Home-Verzeichnis befinden, nach der Zeichenkette "Sehr geehrter Herr".

== locate ==
Der Befehl "locate" listet die Dateien der ''locatedb'' auf, die einem Muster entsprechen. Die locatedb wird mit updatedb erzeugt und aktualisiert. /!\ locate ist kein Unix-Befehl, es ist standardmäßig nur bei GNU vorhanden.

{{{
locate awk
}}}
listet alle Dateien/Pfade auf in denen der String "awk" vorkommt.

{{{
locate -i awk
}}}
listet alle Dateien/Pfade auf in denen der String "awk" vorkommt, wobei die Suche allerdings ohne Unterscheidung von Groß- und Kleinschreibung durchgeführt wird.

== which : Zeigt an, woher das Programm kommt, das durch einen Befehl ausgeführt wird ==
Sucht in den Verzeichnissen, die in der Variablen [[PATH]] stehen, nach dem angegebenen Kommando oder Alias und zeigt den kompletten Pfad an. Nützlich, wenn man Pfadangaben für ein Script sucht.

{{{
which ksh
}}}
ergibt

{{{
/bin/ksh
}}}
== whereis ==
Sucht in gebräuchlichen Programm-Verzeichnissen (wie beispielsweise /bin/, /usr/bin) nach dem angegebenen Kommando oder Alias und zeigt den kompletten Pfad an. Nützlich, wenn man Pfadangaben für ein Script sucht.

/!\ kein Unix-Befehl

{{{
whereis ksh
}}}
ergibt

{{{
/bin/ksh
}}}
== cat und tac : Eine Textdatei ausgeben ==
Gibt die Dateien, die als Parameter angegeben werden, auf der Standard-Ausgabe aus. Falls keine Parameter angegeben wurden, so nimmt cat die Standard-Eingabe als Datenstrom an. Damit kann man beispielsweise Textdateien auf dem Bildschirm ausgeben, oder aber Dateien in eine Pipe oder auf ein Gerät (hier beispielsweise ein Terminal) zu schicken:

{{{
cat datei.txt > /dev/tty1
}}}
Außerdem können mit cat mehrere Dateien zu einer zusammengefügt werden, indem mehrere Eingabedateien in eine einzelne Datei ausgegeben wird:

{{{
cat datei1.txt datei2.txt datei3.txt > alles.txt
}}}
Das Programm tac (cat umgekehrt geschrieben) gibt Dateien in umgekehrter Reihenfolge aus, also die letzte Zeile zuerst, dann die vorletzte usw. Dabei müssen es nicht zwangsläufig Zeilen sein, tac kann auch andere Zeichen als den Zeilentrenner als Trennzeichen benutzen.

{{{
tac test
}}}
ergibt }}} Zeile04 Zeile03 Zeile02 Zeile01 }}}

== split : große Dateien in Teile trennen ==
Teilt beispielsweise große Dateien in mehrere kleinere auf. Die Größe der anzulegenden Zieldateien kann sowohl in Zeilen, als auch in Bytes angegeben werden.

Die resultierenden Dateien werden als xaa, xab, xac, ..., erzeugt, wobei im Bedarfsfalle auch mehrere Buchstaben verwendet werden (xaaaa, xaaab,...). Alternativ kann man split ein Präfix mitgeben, das dann das x ersetzt.

Um beispielsweise eine Datei Sehr_Grosse_Datei.tgz in Dateien der Größe 1 MByte aufzuteilen, können Sie folgenden Befehl verwenden:

{{{
split -b 1m Sehr_Grosse_Datei.tgz Kleine_Stücke.tgz_
}}}
Ergebnis:

{{{
ls Kleine_Stücke.tgz*
Kleine_Stücke.tgz_aa
Kleine_Stücke.tgz_ab
Kleine_Stücke.tgz_ac
...
Kleine_Stücke.tgz_an
}}}
Um die Dateien am Zielort wieder zusammenzubauen, benutzen Sie einfach cat:

{{{
cat Kleine_Stücke.tgz_* > Sehr_Grosse_Datei.tgz
}}}
== seq : Zahlenreihen anzeigen ==
Liefert Zahlenreihen, beispielsweise 001,002,003 usw. Dieses Kommando kann nützlich sein in shell-scripten.

Beispiel:

{{{
seq 00 99
}}}
liefert

{{{
0
1
2
...
9
10
11
...
99
}}}
Möchte man gleichlange Zahlen haben, kann man auch das erreichen:

{{{
seq -w 00 99
}}}
liefert

{{{
00
01
02
...
09
10
11
...
99
}}}
seq kann noch ein paar Dinge mehr, {{{man seq}}} oder {{{seq --help}}} geben die benötigten Infos auch auf Deutsch aus.