24.2 Die Befehle im Detail
24.2.1 Dateiorientierte Kommandos
bzcat – Ausgabe von bzip2-komprimierten Dateien
Mit bzcat können Sie die Inhalte von bzip2-komprimierten Dateien ausgeben, ohne dass Sie hierbei die komprimierte Datei dekomprimieren müssen. Dies ist z. B. auch ein Grund, warum Sie mit einem Dateibrowser wie z. B. Nautilus den Inhalt einer komprimierten Datei sehen und sogar lesen können, obwohl Sie diese noch gar nicht dekomprimiert haben. Ansonsten funktioniert \mbox{bzcat} wie cat.
cat – Datei(en) nacheinander ausgeben
Mit diesem Kommando werden gewöhnlich Dateien ausgegeben. Geben Sie cat beim Aufruf keine Dateien zum Lesen als Argument mit, liest cat so lange aus der Standardeingabe, bis (Strg) + (D) (End of File) betätigt wurde.
Verwendung | Bedeutung |
cat file | Gibt den Inhalt von file aus |
cat file | kommando | Gibt den Inhalt von file via Pipe an die Standardeingabe von kommando weiter |
cat file1 file2 > file_all | Dateien aneinander hängen |
cat > file | Schreibt alle Zeilen, die von der Tastatur eingegeben wurden, in die Datei file, bis (Strg) + (D) betätigt wurde |
chgrp – Gruppe ändern
Mit chgrp ändern Sie die Gruppenzugehörigkeit einer Datei oder eines Verzeichnisses. Dieses Kommando bleibt somit nur dem Eigentümer einer Datei, eines Verzeichnisses oder dem Superuser vorbehalten. Als Eigentümer können Sie außerdem nur diejenigen Dateien oder Verzeichnisse einer bestimmten Gruppe zuordnen, der Sie selbst auch angehören.
Wollen Sie die Gruppenzugehörigkeit aller Dateien in einem Verzeichnis mit allen Unterverzeichnissen ändern, dann bietet sich hierzu die Option -R (für rekursiv) an.
cksum/md5sum/sum – Prüfsummen ermitteln
Mit diesen Funktionen errechnet man die CRC-Prüfsumme (cyclic redundancy check) und die Anzahl Bytes (Anzahl Bytes gilt nur für cksum) für eine Datei. Wird keine Datei angegeben, liest cksum diejenige aus der Standardeingabe, bis (Strg) + (D) betätigt wurde, und berechnet hieraus die Prüfsumme.
Diese Kommandos werden häufig eingesetzt um festzustellen, ob zwei Dateien identisch sind. So kann z. B. überprüft werden, ob eine Datei, die Sie aus dem Internet geladen haben, auch korrekt übertragen wurde. Voraussetzung hierfür ist natürlich, dass Sie die Prüfsumme der Quelle kennen. Häufig findet man die Anwendung einer MD5-Prüfsumme beim Herunterladen von Ubuntu-ISO-Abbildern. Ein anderer Anwendungsfall wäre das Überprüfen auf Virenbefall. Hiermit kann ermittelt werden, ob sich jemand an einer Datei zu schaffen gemacht hat, beispielsweise:
user$ cksum data.conf 2935371588 51 data.conf user$ cksum data.conf 2935371588 51 data.conf user$ echo Hallo >> data.conf user$ cksum data.conf 966396470 57 data.conf
Im obigen Beispiel sieht man eine Konfigurationsdatei data.conf, bei der zweimal mit cksum derselbe Wert (nur zur Demonstration) berechnet wurde. Kurz darauf wurde am Ende dieser Datei ein Text angehängt und erneut cksum ausgeführt. Jetzt erhalten Sie eine andere Prüfsumme. Voraussetzung dafür, dass dieses Prinzip funktioniert, ist natürlich auch eine Datei oder Datenbank, die solche Prüfsummen zu den entsprechenden Dateien speichert. Dabei können Sie auch zwei Dateien auf einmal eingeben, um die Prüfsummen zu vergleichen:
user$ cksum data.conf data.conf~bak 966396470 57 data.conf 2131264154 10240 data.conf~bak
cksum ist gegenüber sum zu bevorzugen, da diese Version neuer ist und auch dem POSIX.2-Standard entspricht. Beachten Sie allerdings, dass alle drei Versionen zum Berechnen von Prüfsummen (sum, cksum und md5sum) untereinander inkompatibel sind und andere Prüfsummen als Ergebnis berechnen:
user$ sum data.conf 20121 1 user$ cksum data.conf 966396470 57 data.conf user$ md5sum data.conf 5a04a9d083bc0b0982002a2c8894e406 data.conf
Noch ein beliebter Anwendungsfall von md5sum:
user$ cd /bin; md5 'ls -R /bin' | md5
Wenn sich jetzt jemand am Verzeichnis /bin zu schaffen gemacht hat, merkt man dies relativ schnell. Am besten lässt man hierbei einen cron- Job laufen und sich gegebenenfalls täglich per E-Mail benachrichtigen.
chmod – Zugriffsrechte ändern
Mit chmod setzen oder verändern Sie die Zugriffsrechte auf Dateien oder Verzeichnisse. Die Benutzung von chmod ist selbstverständlich nur dem Dateieigentümer und dem Superuser gestattet. Die Bedienung von chmod dürfte jedem Systemadministrator geläufig sein, weil es ein sehr häufig verwendetes Kommando ist. chmod kann sehr flexibel eingesetzt werden. Man kann z. B. einen numerischen Wert verwenden:[Ggf. ist dem jeweiligen Befehl ein sudo voranzustellen, da man für die Veränderung von Systemdateirechten als Administrator operieren muss.]
user$ chmod 755 file
oder
user$ chmod 0755 file
Einfacher anzuwenden ist chmod über eine symbolische Angabe wie:
user$ chmode u+x file
Hier bekommt der User (u; Eigentümer) der Datei file das Ausführrecht (+x) erteilt.
user$ chmod g-x file
Damit wurde der Gruppe (g) das Ausführrecht entzogen (-x). Wollen Sie hingegen allen Teilnehmern (a) ein Ausführrecht erteilen, dann funktioniert dies so:
user$ chmod a+x file
Mit chmod können Sie auch die Spezialbits setzen (SUID, SGUID oder Sticky). Wollen Sie z. B. für eine Datei das setuid-Bit (Set-User-ID) setzen, funktioniert dies folgendermaßen:
user$ chmod 4744 file
Das setgid-Bit (Set Group ID) hingegen setzen Sie mit »2xxx«. Zu erwähnen ist auch die Option -R, mit der Sie ein Verzeichnis rekursiv durchlaufen und alle Dateien, die sich darin befinden, entsprechend den neu angegebenen Rechten ändern.
chown – Eigentümer ändern
Mit chown können Sie den Eigentümer von Dateien oder Verzeichnissen ändern. Als neuen Eigentümer kann man entweder den Loginnamen oder die User-ID angeben. Name oder Zahl müssen selbstverständlich in der Datei /etc/passwd vorhanden sein. Dieses Kommando kann wiederum nur vom Eigentümer selbst oder dem Superuser aufgerufen und auf Dateien bzw. Verzeichnisse angewendet werden.
user$ chown john file1 file2
Hier wird der User »john« Eigentümer der Datei file1 und file2. Wollen Sie auch hier ein komplettes Verzeichnis mitsamt den Unterverzeichnissen erfassen, so kann wieder die Option –R verwendet werden. Wollen Sie sowohl den Eigentümer als auch die Gruppe einer Datei ändern, nutzen Sie folgende Syntax:
user$ chown john:user file1 file2
cmp – Dateien miteinander vergleichen
Mit der Funktion cmp vergleichen Sie zwei Dateien Byte für Byte miteinander und erhalten die dezimale Position und Zeilennummer vom ersten Byte zurück, bei dem sich beide Dateien unterscheiden. cmp vergleicht auch Binärdateien. Sind beide Dateien identisch, erfolgt keine Ausgabe.
user$ cmp out.txt textfile.txt out.txt textfile.txt differieren: Byte 52, Zeile 3.
comm – zwei sortierte Textdateien vergleichen
Mit comm vergleichen Sie zwei sortierte Dateien und geben die gemeinsamen und die unterschiedlichen Zeilen jeweils in Spalten aus, indem die zweite und dritte Spalte von einem bzw. zwei Tabulatorvorschüben angeführt werden.
user$ comm [-123] file1 file2
Die erste Spalte enthält die Zeilen, die nur in der Datei file1 enthalten sind. Die zweite Spalte hingegen beinhaltet die Zeilen, die in der zweiten Datei file2 enthalten sind, und die dritte Spalte die Zeilen, die in beiden Dateien enthalten sind.
user$ cat file1.txt # wichtige Initialisierungsdatei # noch eine Zeile Hallo user$ cat file2.txt # wichtige Initialisierungsdatei # noch eine Zeile Hallo user$ comm file1.txt file2.txt # wichtige Initialisierungsdatei # noch eine Zeile Hallo user$ echo "Neue Zeile" >> file2.txt user$ comm file1.txt file2.txt # wichtige Initialisierungsdatei # noch eine Zeile Hallo Neue Zeile user$ comm –3 file1.txt file2.txt Neue Zeile
In der letzten Zeile ist außerdem zu sehen, wie Sie mit dem Schalter
–3 die Ausgabe der dritten Spalte ganz abschalten, um nur die Differenzen beider Dateien zu erkennen. comm arbeitet zeilenweise, weshalb hier keine Vergleiche mit binären Dateien möglich sind. Weitere Schalterstellungen und ihre Bedeutung sind:
Verwendung | Bedeutung |
–23 file1 file2 | Es werden nur Zeilen ausgegeben, die in file1 vorkommen. |
–123 file1 file2 | Es wird keine Ausgabe erzeugt. |
cp – Dateien kopieren
Den Befehl cp zum Kopieren von Dateien und Verzeichnissen haben Sie schon des Öfteren verwendet, daher hier nur noch eine Auflistung der gängigsten Verwendungen.
Verwendung | Bedeutung |
cp file newfile | Es wird mit newfile eine Kopie von file erzeugt. |
cp -p file newfile | newfile erhält dieselben Zugriffsrechte, Eigentümer und Zeitstempel. |
cp -r dir newdir | Es wird ein komplettes Verzeichnis rekursiv (-r) kopiert. |
cp file1 file2 file3 dir | Es werden mehrere Dateien in ein Verzeichnis dir kopiert. |
csplit – Zerteilen von Dateien
Mit csplit können Sie eine Datei in mehrere Teile aufteilen. Als Trennstelle kann hierbei ein Suchmuster, also auch ein regulärer Ausdruck angegeben werden. Dabei werden aus einer Eingabedatei mehrere Ausgabedateien erzeugt, deren Inhalt vom Suchmuster abhängig gemacht werden kann. Ein Beispiel:
user$ csplit Kapitel20.txt /Abschnitt 1/ \ /Abschnitt 2/ /Abschnitt 3/
Hier wird das Kapitel20.txt in vier Teile aufgeteilt. Zunächst vom Anfang bis zum »Abschnitt 1«, als Nächstes von »Abschnitt 1« bis
»Abschnitt 2«, dann »Abschnitt 2« bis »Abschnitt 3« und zu guter Letzt
»Abschnitt 3« bis »Abschnitt 4«. Hier können Sie allerdings auch einzelne Zeilen angeben, ab denen Sie eine Datei teilen wollen:
user$ csplit -f Abschnitt Kapitel20.txt 20 40
Hier haben Sie mit der Option -f veranlasst, dass statt eines Dateinamens wie »xx01«, »xx02«, ... »xx99« eine Datei wie »Abschnitt01«, »Abschnitt02« usw. erzeugt wird. Hier zerteilen Sie die Datei Kapitel20.txt in drei Dateien: »Abschnitt01« (Zeile
1 – 20), »Abschnitt02« (Zeile 21– 40) und »Abschnitt03« (Zeile 41 bis zum Ende). Sie können mit {n{ am Ende auch angeben, dass ein bestimmter Ausdruck n-mal angewendet werden soll. Beispiel:
user$ csplit -k /var/spool/mail/$LOGNAME /^From / {100}
Hier zerteilen Sie in Ihrer Mailbox die einzelnen E-Mails in die einzelnen Dateien »xx01«, »xx02«, ...»xx99«. Jeder Brief einer E-Mail im mbox-Format beginnt mit »From«, weshalb dies als Trennzeichen für die einzelnen Dateien dient. Weil Sie wahrscheinlich nicht genau wissen, wie viele Mails in Ihrer Mailbox liegen, können Sie durch die Angabe einer relativ hohen Zahl zusammen mit der Option -k erreichen, dass alle Mails getrennt und nach einem eventuell vorzeitigen Scheitern die bereits erzeugten Dateien nicht wieder gelöscht werden.
cut – Zeichen oder Felder aus Dateien schneiden
Mit cut schneiden Sie bestimmte Teile aus einer Datei heraus. Dabei liest cut von der angegebenen Datei und gibt die Teile auf dem Bildschirm aus, die Sie als gewählte Option und per Wahl des Bereichs verwendet haben. Ein Bereich ist eine durch Kommata getrennte Liste von einzelnen Zahlen bzw. Zahlenbereichen. Diese Zahlenbereiche werden in der Form »a–z« angegeben. Wird a oder z weggelassen, so wird hierzu der Anfang bzw. das Ende einer Zeile verwendet.
diff – Vergleichen zweier Dateien
diff vergleicht den Inhalt von zwei Dateien. Da diff zeilenweise vergleicht, sind keine binären Dateien erlaubt. Ein Beispiel:
user$ diff file1.txt file2.txt 2a3 > neueZeile
Hier wurden die Dateien file1.txt und file2.txt miteinander verglichen. Die Ausgabe »2a3« besagt lediglich, dass Sie in der Datei file1.txt zwischen der Zeile 2 und 3 die Zeile »neueZeile« einfügen (a = append) müssten, damit die Datei exakt mit der Datei file2.txt übereinstimmt. Ein weiteres Beispiel:
user$ diff file1.txt file2.txt 2c2 < zeile2 --- > zeile2 wurde verändert
Hier bekommen Sie mit »2c2« die Meldung, dass die zweite Zeile unterschiedlich (c = change) ist. Die darauf folgende Ausgabe zeigt auch den Unterschied dieser Zeile an. Eine sich öffnende spitze Klammer (<) zeigt file1.txt und die sich schließende spitze Klammer bezieht sich auf file2.txt. Und eine dritte Möglichkeit, die Ihnen diff meldet, wäre:
user$ diff file1.txt file2.txt 2d1 < zeile2
Hier will Ihnen diff sagen, dass die zweite Zeile in file2.txt fehlt (d = delete) bzw. gelöscht wurde. Daraufhin wird die entsprechende Zeile auch ausgegeben. Natürlich beschränkt sich die Verwendung von diff nicht ausschließlich auf Dateien. Mit der Option
-r können Sie ganze Verzeichnisse miteinander vergleichen:
user$ diff -r dir1 dir2
diff3 – Vergleich von drei Dateien
Die Funktion entspricht etwa der von diff, nur dass Sie hierbei drei Dateien Zeile für Zeile miteinander vergleichen können. Folgendes besagt die Ausgabe von diff3:
user$ diff3 file1 file2 file3
Ausgabe | Bedeutung |
==== | Alle drei Dateien sind unterschiedlich. |
====1 | file1 ist unterschiedlich. |
====2 | file2 ist unterschiedlich. |
====3 | file3 ist unterschiedlich. |
dos2unix – Dateien umwandeln
Mit dos2unix können Sie Textdateien vom DOS- in das UNIX-Format umwandeln. Alternativ gibt es außerdem noch den Befehl mac2unix, mit dem Sie Textdateien vom MAC- in das UNIX-Format konvertieren können.
user$ dos2unix file1.txt file2.txt dos2unix: converting file file1.txt to UNIX format… dos2unix: converting file file2.txt to UNIX format…
expand – Tabulatoren in Leerzeichen umwandeln
expand ersetzt alle Tabulatoren einer Datei durch eine Folge von Leerzeichen. Standardmäßig sind dies acht Leerzeichen, allerdings kann dieser Wert explizit mit einem Schalter verändert werden. Wollen Sie z. B., dass alle Tabulatorzeichen durch nur drei Leerzeichen ersetzt werden, erreichen Sie dies folgendermaßen:
user$ expand –3 file
Allerdings erlaubt expand nicht das vollständige Entfernen von Tabulatorenzeichen – sprich ein Schalter mit –0 gibt eine Fehlermeldung zurück. Hierzu können Sie alternativ z. B. das Kommando tr verwenden.
file – den Inhalt von Dateien analysieren
Das Kommando file versucht, die Art oder den Typ einer von Ihnen angegebenen Datei zu ermitteln. Hierzu führt file einen Dateisystemtest, einen Kennzahlentest und einen Sprachtest durch. Je nach Erfolg wird eine entsprechende Ausgabe des Tests vorgenommen. Der Dateisystemtest wird mithilfe des Systemaufrufes stat(2) ausgeführt. Dieser Aufruf erkennt viele Arten von Dateien. Der Kennzahlentest wird anhand von festgelegten Kennzahlen (meist enthalten in der Datei /etc/magic) durchgeführt. In dieser Datei steht beispielsweise geschrieben, welche Bytes einer Datei zu untersuchen sind und auf welches Muster man dann den Inhalt dieser Datei zurückführen kann. Am Ende erfolgt noch ein Sprachtest. Hier versucht file, eine Programmiersprache anhand von Schlüsselwörtern zu erkennen.
user$ cat > hallo.c #include <stdio.h> int main(void) { printf("Hallo Welt{n}"); return 0; { STRG + D user$ file hallo.c hallo.c: ASCII C program text user$ gcc -o hallo hallo.c user$ ./hallo Hallo Welt user$ file hallo hallo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), not stripped
find – Suchen nach Dateien
Zum Suchen nach Dateien wird häufig auf das Kommando find zurückgegriffen. find durchsucht eine oder mehrere Verzeichnisebenen nach Dateien mit einer bestimmten vorgegebenen Eigenschaft. Die Syntax zu find:
find [Verzeichnis] [-Option ...] [-Test ...] \ [-Aktion ...]
Die Optionen, Tests und Aktionen können Sie mit Operatoren zusammenfassen. Dabei wertet find jede Datei in den Verzeichnissen hinsichtlich der Optionen, Tests und Aktionen von links nach rechts aus, bis ein Wert unwahr ist oder die Kommandozeilenargumente zu Ende sind. Wenn kein Verzeichnis angegeben wird, wird das aktuelle Verzeichnis verwendet. Wenn keine Aktion angegeben ist, wird meistens -print (abhängig von einer eventuell angegebenen Option) für die Ausgabe auf dem Bildschirm verwendet. Hierzu einige Beispiele.
Alle Verzeichnisse und Unterverzeichnisse ab dem Heimverzeichnis ausgeben:
user$ find $HOME
Gibt alle Dateien mit dem Namen »kapitel« aus dem Verzeichnis (und dessen Unterverzeichnissen) /dokus aus:
user$ find /dokus -name kapitel
Gibt alle Dateien aus dem Verzeichnis (und dessen Unterverzeichnissen) dokus mit dem Namen »kap...« aus, bei denen »you« der Eigentümer ist:
user$ find /dokus /usr -name 'kap*' -user you
Damit durchsuchen Sie ab dem Wurzelverzeichnis nach einem Verzeichnis
(-type d = directory) mit dem Namen »dok, ...« und geben dies auf dem Bildschirm aus:
user$ find / -type d -name 'dok*'
Sucht leere Dateien (size = 0) und löscht diese nach einer Rückfrage (-ok):
user$ find / -size 0 -ok rm {} \;
Gibt alle Dateien ab dem Wurzelverzeichnis aus, die in den letzten sieben Tagen verändert wurden:
user$ find / -mtime –7
fold – einfaches Formatieren von Dateien
Mit fold können Sie Textdateien ab einer bestimmten Zeilenlänge umbrechen. Standardmäßig sind hierbei 80 Zeichen pro Zeile eingestellt. Da fold die Bildschirmspalten und nicht die Zeichen zählt, werden auch Tabulatorzeichen korrekt behandelt. Wollen Sie etwa eine Textdatei nach
50~Zeichen umbrechen, gehen Sie folgendermaßen vor:
user$ fold –50 Kap003.txt … Sicherlich erscheint Ihnen das Ganze nicht sonderl ich elegant oder sinnvoll, aber bspw. in Schleifen eingesetzt, können Sie hierbei hervorragend alle A rgumente der Kommandozeile zur Verarbeitung von Op tionen heranziehen. Als Beispiel ein kurzer theoreti scher Code-Ausschnitt, wie so etwas in der Praxis realisiert werden kann.
Allerdings kann man an der Ausgabe erkennen, dass einfach die Wörter abgeschnitten und in der nächsten Zeile fortgeführt werden. Wollen Sie dies unterbinden, können Sie die Option -s verwenden. Damit findet der Zeilenumbruch beim letzten Leerzeichen der Zeile statt, wenn in der Zeile ein Leerzeichen vorhanden ist.
user$ fold -s –50 Kap003.txt … Sicherlich erscheint Ihnen das Ganze nicht sonderlich elegant oder sinnvoll, aber bspw. in Schleifen eingesetzt, können Sie hierbei hervorragend alle Argumente der Kommandozeile zur Verarbeitung von Optionen heranziehen. Als Beispiel ein kurzer theoretischer Code-Ausschnitt, wie so etwas in der Praxis realisiert werden kann.
Ein recht typischer Anwendungsfall ist es, Text für eine E-Mail zu formatieren:
user$ fold -s –72 text.txt | \ mail -s "Betreff" name@host.de
head – Anfang einer Datei ausgeben
Mit der Funktion head geben Sie immer die ersten Zeilen einer Datei auf dem Bildschirm aus. Standardmäßig werden dabei die ersten zehn Zeilen ausgegeben. Wollen Sie selbst bestimmen, wie viele Zeilen vom Anfang der Datei ausgegeben werden sollen, können Sie dies explizit mit -n angeben:
user$ head –5 file
Es erscheinen die ersten fünf Zeilen von file auf dem Bildschirm.
less – Datei(en) seitenweise ausgeben
Mit less geben Sie eine Datei seitenweise auf dem Bildschirm aus. Der Vorteil von less gegenüber more ist, dass Sie mit less auch zurückblättern können. Da less von der Standardeingabe liest, ist so auch eine Umleitung eines anderen Kommandos mit einer Pipe möglich. Mit der Leertaste blättern Sie eine Seite weiter und mit (B) können Sie jeweils eine Seite zurückblättern. Die meisten less-Versionen bieten außerdem das Scrollen nach unten bzw. oben mit den Pfeiltasten an. Mit (Q) wird less beendet. less bietet außerdem eine Unmenge von Optionen und weiterer Features an, über die Sie sich durch Drücken von (H) informieren können.
ln – Links auf eine Datei erzeugen
Wenn eine Datei erzeugt wird, werden im Verzeichnis der Name, ein Verweis auf eine Inode, die Zugriffsrechte, der Dateityp und gegebenenfalls die Anzahl der belegten Blöcke eingetragen. Mit ln wiederum wird ein neuer Eintrag im Verzeichnis abgelegt, der auf die Inode einer existierenden Datei zeigt. Man spricht dabei von einem Hardlink. Er wird standardmäßig ohne weitere Angaben angelegt. Es ist allerdings nicht möglich, diese Hardlinks über Dateisystemgrenzen hinweg anzulegen. Hierzu müssen Sie einen symbolischen Link mit der Option -s erzeugen:
user$ ln -s filea fileb
Damit haben Sie einen symbolischen Link auf die bestehende Datei filea mit dem Namen fileb angelegt. Wollen Sie hingegen einen Hardlink auf die bestehende Datei filea mit dem Namen fileb anlegen, so gehen Sie wie folgt vor:
user$ ln filea fileb
ls – Verzeichnisinhalt auflisten
Mit ls wird der Inhalt eines Verzeichnisses auf dem Dateisystem angezeigt. Wer sich den Inhalt eines Verzeichnisses inklusive versteckter Dateien anzeigen lassen möchte, verwendet folgende Optionen:
user$ ls -lah <Verzeichnisname>
more – Datei(en) seitenweise ausgeben
more wird genauso eingesetzt wie less, und zwar zum seitenweisen Lesen von Dateien. Allerdings bietet less gegenüber more erheblich mehr Features und Funktionalitäten an.
mv – Datei(en) verschieben oder
umbenennen Mit mv können Sie eine oder mehrere Dateien bzw. Verzeichnisse verschieben oder umbenennen.
Verwendung | Bedeutung |
mv file filenew | Eine Datei umbenennen |
mv file dir | Eine Datei in ein Verzeichnis verschieben |
mv dir dirnew | Ein Verzeichnis in ein anderes Verzeichnis verschieben |
nl – Datei mit Zeilennummer ausgeben
Mit nl geben Sie die Zeilen einer Datei mit deren Nummer auf dem Bildschirm aus. Dabei ist nl nicht nur ein »dummer« Zeilenzähler, sondern kann die Zeilen einer Seite auch in einen Header, einen Body und einen Footer unterteilen und in unterschiedlichen Stilen nummerieren, zum Beispiel:
user$ ls | nl -w3 -s') ' 1) abc 2) bin 3) cxoffice 4) Desktop 5) Documents 6) file1.txt …
Wenn Sie mehrere Dateien verwenden, beginnt die Nummerierung allerdings nicht mehr neu, dann werden mehrere Dateien wie eine behandelt. Die Zeilennummer wird nicht zurückgesetzt. Ein weiteres Beispiel:
user$ nl hallo.c -s' : ' > hallo_line user$ cat hallo_line 1 : #include <stdio.h> 2 : int main(void) { 3 : printf("Hallo Welt{n}"); 4 : return 0; 5 : }
Mit der Option -s (optional) geben Sie das Zeichen an, das zwischen der Zeilennummer und der eigentlichen Zeile stehen soll.
od – Datei(en) hexadezimal bzw. oktal ausgeben
od liest von der Standardeingabe eine Datei ein und gibt diese – Byte für Byte – formatiert und kodiert auf dem Bildschirm aus. Standardmäßig wird dabei die siebenstellige Oktalzahl in je acht Spalten zu zwei Bytes verwendet:[Aus Gründen der Darstellung wurde eine Spalte im Listing weggelassen.]
user$ od file1.txt 0000000 064546 062554 035061 062572 066151 030545 0000020 030545 075072 064545 062554 005062 064546 0000040 062572 066151 031545 000012 0000047
Jede Zeile enthält in der ersten Spalte die Positionsnummer in Bytes vom Dateianfang an. Mit der Option -h erfolgt die Ausgabe in hexadezimaler und mit -c in ASCII-Form.
rm – Dateien und Verzeichnisse löschen
Mit dem Kommando rm können Sie Dateien und Verzeichnisse löschen.
Verwendung | Bedeutung |
rm datei | Löscht eine Datei |
rm dir | Löscht ein leeres Verzeichnis |
rm -r dir | Löscht ein Verzeichnis rekursiv |
rm -rf dir | Erzwingt rekursives Löschen (ohne Warnung) |
sort – Dateien sortieren
Gewöhnlich wird sort zum Sortieren einzelner Zeilen einer Datei oder der Standardeingabe verwendet. sort kann auch Dateien daraufhin überprüfen, ob diese sortiert sind, und mehrere sortierte oder auch unsortierte Dateien zu einer sortierten zusammenfügen. Ohne Angabe einer Option sortiert sort eine Datei zeilenweise in alphabetischer Reihenfolge:
user$ sort kommandos.txt a2ps – Textdatei umwandeln nach Postscript accept – Druckerwarteschlange empfangsbereit setzen afio – Ein cpio mit zusätzlicher Komprimierung alias – Kurznamen für Kommandos vergeben … user$ ls | sort abc bin cxoffice Desktop Documents …
Häufig verwendete Optionen zum Sortieren, die mit sort benutzt werden:
Option | Bedeutung |
-n | Sortiert eine Datei numerisch |
-f | Unterscheidet nicht zwischen Klein- und Großbuchstaben |
-r | Sortiert nach Alphabet in umgekehrter Reihenfolge |
-n -r | Sortiert numerisch in umgekehrter Reihenfolge |
-c | Überprüft, ob die Dateien bereits sortiert sind. Wenn nicht, wird mit einer Fehlermeldung und dem Rückgabewert 1 abgebrochen. |
-u | Gibt keine doppelt vorkommenden Zeilen aus |
Alternativ gibt es hierzu noch das Kommando tsort, das Dateien topologisch sortiert.
split – Dateien in mehrere Teile zerlegen
Mit split teilen Sie eine Datei in mehrere Teile auf. Ohne Angabe einer Option wird eine Datei in je 1000 Zeilen aufgeteilt. Die Ausgabe erfolgt in Dateien mit »x…« oder einem entsprechenden Präfix, wenn eines angegeben wurde:
user$ split –50 kommandos.txt user$ ls x* xaa xab xac xad xae
Die Datei können Sie folgendermaßen wieder zusammensetzen:
user$ for file in `ls x* | sort`; do cat $file >> \ new.txt; done
Hier wurde z. B. die Textdatei kommandos.txt in je 50-zeilige Häppchen aufgeteilt. Wollen Sie den Namen der neu erzeugten Datei verändern, gehen Sie wie folgt vor:
user$ split –50 kommandos.txt kommandos user$ ls komm* kommandosaa kommandosab kommandosac kommandosad kommandosae kommandos.txt
Das Kommando split wird häufig eingesetzt, um große Dateien zu splitten, die nicht auf ein einzelnes Speichermedium passen.
tac – Dateien rückwärts ausgeben
Vereinfacht ausgedrückt ist tac wie cat (daher auch der rückwärts geschriebene Kommandoname), nur dass tac die einzelnen Zeilen rückwärts ausgibt. Es wird somit zuerst die letzte Zeile ausgegeben, dann die vorletzte usw. bis zur ersten Zeile.
user$ cat file1.txt file1:zeile1 file1:zeile2 file2:zeile3 user$ tac file1.txt file2:zeile3 file1:zeile2 file1:zeile1
tail – Ende einer Datei ausgeben
tail gibt die letzten Zeilen (standardmäßig, ohne spezielle Angaben die letzten zehn) einer Datei aus.
user$ tail –3 kommandos.txt write – Nachrichten an andere Benutzer verschicken zcat – Ausgabe von gunzip-komprimierten Dateien zip/unzip – (De-) Komprimieren von Dateien
Hier gibt tail die letzten drei Zeilen der Datei kommandos.txt aus. Wollen Sie eine Datei ab einer bestimmten Zeile ausgeben lassen, gehen Sie wie folgt vor:
user$ tail +100 kommandos.txt
Hier werden alle Zeilen ab Zeile 100 ausgegeben. Wollen Sie tail wie tac verwenden, können Sie die Option -r verwenden:
user$ tail -r kommandos.txt
Hiermit wird die komplette Datei zeilenweise rückwärts, von der letzten zur ersten Zeile ausgegeben. Häufig verwendet wird auch die Option –f (follow), die immer wieder das Dateiende ausgibt. Dadurch kann man eine Datei beim Wachsen beobachten, da jede neu hinzugekommene Zeile angezeigt wird. Natürlich lässt sich diese Option nur auf eine Datei gleichzeitig anwenden. Eine beliebte Anwendung in diesem Zusammenhang ist das Beobachten der Syslog-Datei /var/log/messages:
user$ sudo tail -f /ver/log/messages
tee – Ausgabe duplizieren
Mit tee lesen Sie von der Standardeingabe und verzweigen die Ausgabe auf die Standardausgabe und -datei.
touch – Zeitstempel verändern
Mit touch verändern Sie die Zugriffs- und Änderungszeit einer Datei auf die aktuelle Zeit. Existiert eine solche Datei nicht, wird diese angelegt. Einige Optionen zu touch und ihre jeweilige Bedeutung:
Option | Bedeutung |
-a | Damit ändern Sie nur die Zugriffszeit. |
-c | Falls eine Datei nicht existiert, wird diese trotzdem nicht erzeugt. |
-m | Ändert nur die Änderungszeit |
tr – Zeichen ersetzen
Mit tr können Zeichen durch andere Zeichen ersetzt werden. Dies gilt auch für nicht druckbare Zeichen.
user$ tr str1 str2 file
Wird in der Datei file ein Zeichen aus »str1« gefunden, wird es durch das entsprechende Zeichen in »str2« ersetzt.
type – Kommandos klassifizieren
Mit type können Sie klassifizieren, wie die Shell den angegebenen Namen interpretieren würde, wenn Sie diesen in der Kommandozeile verwenden. type unterscheidet hierbei zwischen einem Alias, einem Builtin (Shell-Funktion), einer Datei oder einer Skriptfunktion.
user$ type ls echo ./hallo ls is aliased to `/bin/ls $LS_OPTIONS' echo is a shell builtin ./hallo is ./hallo
umask – Dateierstellungsmaske ändern
Mit der Shell-Funktion umask setzen Sie eine Maske, mit der die Zugriffsrechte auf eine Datei bzw. auf Verzeichnisse direkt nach der Erzeugung durch einen von der Shell kontrollierten Prozess bestimmt werden. Die in der Maske gesetzten Bits werden bei den Zugriffsrechten für die neue Datei bzw. das Verzeichnis gelöscht (man sagt auch: Sie werden maskiert).
uniq – doppelte Zeilen nur einmal ausgeben
Mit uniq können Sie doppelt vorhandene Zeilen löschen. Voraussetzung ist allerdings, dass die Datei sortiert ist und die doppelten Zeilen direkt hintereinander folgen.
Beispielsweise:
user$ cat file1.txt file1:zeile1 file1:zeile2 file1:zeile2 file2:zeile3 user$ uniq file1.txt file1:zeile1 file1:zeile2 file2:zeile3
wc – Zeilen, Wörter und Zeichen zählen
Mit wc können Sie die Zeichen, Wörter und/oder Zeilen einer Datei zählen. Ohne spezielle Optionen wird eine Zeile mit den folgenden Zahlen ausgegeben:
user$ wc file1.txt 4 4 52 file1.txt
Die erste Spalte enthält die Anzahl der Zeilen, gefolgt von der Anzahl der Wörter und am Ende die Anzahl der Zeichen. Einzeln können Sie dies mit der Option -l (lines = Zeilen), -w (words = Wörter) und
-c (characters = Zeichen) ermitteln.
whereis – Suche nach Dateien
Mit dem Kommando whereis wird vorwiegend in wichtigen Pfaden (meistens allen Einträge in PATH) nach Binärdateien oder man-Dateien gesucht. whereis ist nicht so flexibel wie find, aber dafür erheblich schneller.
user$ whereis ls /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz user$ whereis -b ls /bin/ls user$ whereis -m ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
Zuerst wurde der Pfad zum Programm ls ermittelt. Hierbei werden allerdings auch gleich die Pfade zu den man-Seiten mit ausgegeben. Wollen Sie nur den Pfad zum Binärprogramm erhalten, müssen Sie die Option
-b verwenden. Wünschen Sie nur den Pfad zu den man-Seiten, so verwenden Sie die Option -m, wie im Beispiel gesehen.
zcat, zless, zmore – Ausgabe von zip-Dateien
Alle drei Funktionen haben dieselbe Funktionsweise wie ihre Gegenstücke ohne
»z«, nur dass hiermit gzip- bzw. gunzip-komprimierte Dateien gelesen und ausgegeben werden können, ohne dass diese dekomprimiert werden müssen. Auf manchen Systemen gibt es mit zgrep auch noch eine entsprechende grep-Version.
24.2.2 Verzeichnisorientierte Kommandos
basename – Dateianteil eines Pfadnamens
basename liefert den Dateinamen ohne den Pfadnamen zurück, indem dieser abgeschnitten wird. Geben Sie ein Suffix an, wird auch die Dateiendung abgeschnitten.
cd – Verzeichnis wechseln
Das Shell-Kommando cd wird zum Wechseln des aktuellen Verzeichnisses verwendet. Wird kein Verzeichnis angegeben, wird in das Heimverzeichnis gewechselt.
dirname – Verzeichnisanteil eines Pfadnamens
dirname ist das Gegenstück zu basename und gibt den Verzeichnisanteil zurück. Es wird hierbei also der Dateiname aus der absoluten Pfadangabe »ausgeschnitten«.
mkdir – ein Verzeichnis anlegen
Mit mkdir legen Sie ein leeres Verzeichnis an. Wollen Sie gleich beim Anlegen die Zugriffsrechte erteilen, können Sie dies mit der Option
-m vornehmen:
user$ mkdir -m 600 mydir
Wollen Sie ein neues Verzeichnis mitsamt Elternverzeichnissen anlegen, können Sie die Option -p verwenden:
user$ mkdir doku/neu/buch mkdir: kann Verzeichnis doku/neu/buch nicht anlegen: Datei oder Verzeichnis nicht gefunden user$ mkdir -p doku/neu/buch
pwd – aktuelles Arbeitsverzeichnis ausgeben
Mit pwd lassen Sie das aktuelle Arbeitsverzeichnis ausgeben, in dem Sie sich gerade befinden.
rmdir – ein leeres Verzeichnis löschen
Mit der Funktion rmdir können Sie ein leeres Verzeichnis löschen. Nicht leere Verzeichnisse können Sie mit rm -r rekursiv löschen. Etwas, was rm -r allerdings nicht kann, ist Verzeichnisse zu löschen, für die kein Ausführrecht vorhanden ist. Dies ist logisch, weil rm mit der Option -r im Verzeichnis enthalten sein muss. rmdir hingegen verrichtet hierbei seine Arbeit klaglos:
user$ mkdir -m 600 mydir user$ rm -r mydir rm: kann nicht aus Verzeichnis . in mydir wechseln: Keine Berechtigung user$ rmdir mydir
24.2.3 Verwaltung von Benutzern und Gruppe
exit, logout – eine Session (Sitzung) beenden
Mit beiden Befehlen beenden Sie eine Shell-Sitzung (eine Textkonsole bzw. ein Shell-Fenster). Gleiches würde man auch mit (Strg) + (D) erreichen.
finger – Informationen zu Benutzern abfragen
Mit finger können Sie detaillierte Informationen zu momentan angemeldeten Benutzern abfragen (ähnlich wie mit who, nur dass die Terminals nicht einzeln aufgelistet werden):
user$ finger Login Name Tty Idle Login Time hatt Rainer Hattenhauer *:0 Jan 2 10:42 hatt Rainer Hattenhauer pts/1 Jan 2 11:19
Ohne irgendwelche Optionen gibt finger zu allen aktiven Benutzern eine Informationszeile aus. Geben Sie einen Benutzernamen ein, bekommen Sie eine detailliertere Auskunft (im Langformat):
user$ finger hatt Login: hatt Name: Rainer Hattenhauer Directory: /home/hatt Shell: /bin/bash On since Mon Jan 2 10:42 (CET) on :0 (messages off) On since Mon Jan 2 11:19 (CET) on pts/1 from :0.0 No mail. No Plan.
Natürlich können Sie auch zu allen anderen aktiven Benutzern dieses Langformat mit der Option -l ausgeben lassen. Wollen Sie einen Benutzer auf einem entfernten System suchen, müssen Sie
»benutzername@hostname« für den Benutzer angeben.
groupadd etc. – Gruppenverwaltung
Eine neue Gruppe können Sie mit groupadd anlegen:
user$ sudo groupadd [-g GID] gruppenname
Die ID einer Gruppe (gid) können Sie mit groupmod verändern:
user$ sudo groupmod [-g neueGID] gruppenname
Eine Gruppe wieder löschen können Sie mit groupdel:
user$ sudo groupdel gruppenname
groups – Gruppenzugehörigkeit ausgeben
Um alle Gruppen eines Benutzers zu ermitteln, wird groups verwendet. Wird groups ohne Angabe eines bestimmten Benutzers ausgeführt, werden alle Gruppen des aktuellen Benutzers ausgegeben.
id – eigene Benutzer- und Gruppen-ID ermitteln
Mit id können Sie die User- und Gruppen-ID eines Benutzers ermitteln. Geben Sie keinen bestimmten Benutzer an, so werden die UID und GID des aktuellen Benutzers ermittelt und ausgegeben.
last – An- und Abmeldezeit eines Benutzers
Einen Überblick zu den letzten An- und Abmeldezeiten von Benutzern erhalten Sie mit last:
user$ last hatt pts/1 :0.0 Mon Jan 2 11:19 still logged in hatt pts/1 :0.0 Mon Jan 2 10:51 – 11:11 (00:20) wtmp begins Mon Jan 2 10:51:44 2006
Wollen Sie nur die Loginzeiten eines einzelnen Users ermitteln, so müssen Sie diesen als Argument angeben.
logname – Name des aktuellen Benutzers
Mit logname erhalten Sie den Benutzernamen, der von getty in der Datei /var/run/utmp gespeichert wird.
newgrp – Gruppenzugehörigkeit wechseln
Mit newgrp kann ein Benutzer während einer Sitzung in eine andere Gruppe wechseln (in der er ebenfalls Mitglied ist). Wird keine Gruppe als Argument verwendet, wird in eine Standardgruppe von /etc/passwd gewechselt. Als Argument wird der Gruppenname – wie dieser in /etc/group eingetragen ist – erwartet, nicht die Gruppen-ID.
passwd – Passwort ändern bzw. vergeben
Mit dem Kommando passwd können Sie die Passwörter aller Benutzer in der Datei /etc/passwd ändern. Damit hierbei wenigstens der Benutzer selbst (nicht root) die Möglichkeit hat, sein eigenes Passwort zu ändern, läuft passwd als SUID root. Damit hat der Anwender für kurze Zeit root-Rechte und kann somit sein Passwort ändern und darf in die Datei schreiben. Alle Passwörter darf nur root verändern, unter Ubuntu ist also die Voranstellung von sudo erforderlich:
user$ sudo passwd hatt Changing password for hatt. New password:******** Re-enter new password:******** Password changed
Wenn Sie mit root-Rechten arbeiten, haben Sie noch folgende Optionen, einen Benutzer mit den Passworteinstellungen zu verwalten:
Verwendung | Bedeutung |
passwd -l benutzername | Den Benutzer sperren (-l = lock) |
passwd -f benutzername | Den Benutzer dazu zwingen, beim nächsten Anmelden das Passwort zu verändern |
passwd -d benutzername | Passwort des Benutzers löschen. Danach kann sich der Benutzer ohne Passwort anmelden. |
useradd/adduser etc. – Benutzerverwaltung
Einen neuen Benutzer legen Sie mit useradd bzw. adduser an:
user$ sudo useradd testuser user$ sudo passwd testuser Changing password for testuser. New password:******** Re-enter new password:******** Password changed
Die Eigenschaften eines Users können Sie mit usermod modifizieren.
user$ sudo usermod -u 1235 -c "Test User" \ -s /bin/bash -d /home/testdir testuser
Hier haben Sie z. B. einem User die ID 1235, den Kommentar bzw. Namen »Test User«, die Bash als Shell und als Verzeichnis /home/testdir zugewiesen. Hierzu gibt es noch eine Menge Optionen mehr, die Sie mit usermod einstellen können (siehe auch man-Seite zu usermod). Wollen Sie einen Benutzer wieder entfernen, können Sie dies mit userdel erreichen:
user$ sudo userdel testuser
Beim Löschen wird eventuell noch überprüft, ob sich in crontab ein Eintrag für diesen User befindet. Dies ist sinnvoll, da der cron-Daemon sonst unnötig ins Leere laufen würde.
who – eingeloggte Benutzer anzeigen
Mit dem Kommando who werden alle angemeldeten Benutzer mitsamt dem Namen, der Loginzeit und dem Terminal ausgegeben.
user$ who hatt :0 Jan 2 10:42 hatt pts/1 Jan 2 11:19 (:0.0)
whoami – Namen des aktuellen Benutzers anzeigen
Mit whoami können Sie ermitteln, unter welchem Namen Sie gerade arbeiten. Dies wird oft verwendet, um zu überprüfen, ob man als root oder »normaler«
User arbeitet. Unter Ubuntu ist das Kommando freilich obsolet, da die Arbeit als Benutzer root eigentlich nicht vorgesehen ist.
user$ sudo whoami Password: root
24.2.4 Programm- und Prozessverwaltung
at – Zeitpunkt für Kommando festlegen
Mit dem Kommando at können Sie ein Kommando zum angegebenen Zeitpunkt ausführen lassen, auch wenn der Benutzer zu diesem Zeitpunkt nicht angemeldet ist.
Beispielsweise können Sie mit
user$ at 2130 -f myscript
das Skript »myscript« um 21:30 Uhr ausführen lassen. Natürlich lassen sich mehrere solcher zeitgesteuerten Kommandos einrichten. Jeder dieser at-Aufrufe wird an die at-Queue (atq) angehängt. Natürlich funktioniert dies auch mit Datum:
user$ at 2200 apr 21 -f myscript
So würde das Skript »myscript« am 21. April um 22 Uhr ausgeführt. Wollen Sie sich alle Aufträge der atq auflisten lassen, müssen Sie die Option -l verwenden:
user$ at -l
Wollen Sie den Status des Auftrags mit der Nummer 33 anzeigen lassen, geben Sie Folgendes ein:
user$ at -l 33
Soll dieser Auftrag gelöscht werden, so kann die Option -d verwendet werden:
user$ at -d 33
batch – Kommando später ausführen lassen
Mit batch lesen Sie Kommandos von der Kommandozeile, die zu einem späteren Zeitpunkt ausgeführt werden, sobald das System Zeit hat. Dies wird bei extrem belasteten Rechnern gern verwendet, wenn man das Kommando bzw. Skript zu einer Zeit ausführen lassen will, in der die Systemlast definitiv niedrig ist, und dies nicht nur zu vermuten ist. Die angegebenen Kommandos werden auch dann ausgeführt, wenn der Benutzer nicht angemeldet ist. Um batch auszuführen, muss auch hier der at-Daemon, der auch für das Kommando at verantwortlich ist, laufen.
user$ batch warning: commands will be executed using /bin/sh at> ls -l at> ./myscript at> sleep 1 at> (Strg) + (D) job 1 at 2005–12–21 23:30
Das Ende der Kommandozeileneingabe von batch müssen Sie mit (Strg) + (D) angeben.
bg – Prozess im Hintergrund
fortsetzen Mit dem Kommando bg können Sie einen (z. B. mit (Strg) + (Z) ) angehaltenen Prozess im Hintergrund fortsetzen.
cron/crontab – Programme zeitgesteuert
ausführen Mit cron können Sie beliebig viele Kommandos automatisch in bestimmten Zeitintervallen ausführen lassen. Einmal pro Minute sieht dieser Dämon in einen Terminkalender (crontab) nach und führt gegebenenfalls darin enthaltene Kommandos aus.
fg – Prozess im Vordergrund
fortsetzen Mit dem Kommando fg können Sie einen (z. B. mit (Strg) + (Z) ) angehaltenen Prozess im Vordergrund fortsetzen.
jobs – Anzeigen im Hintergrund laufender Prozesse
Mit jobs wird eine Liste mit den aktuellen Jobs zurückgegeben. Neben der Jobnummer stehen bei jedem Job der Kommandoname, der Status und eine Markierung. Die Markierung »+« steht für den aktuellen Job, »-« für den vorhergehenden Job.
kill – Signale an Prozesse mit Nummer
senden Mit kill senden Sie den Prozessen durch Angabe der Prozessnummer ein Signal. Standardmäßig wird das Signal SIGTERM zum Beenden des Prozesses gesendet. Es lassen sich aber auch beliebige andere Signale senden. Das Signal wird dabei als Nummer oder als Name übermittelt. Einen Überblick über die möglichen Signalnamen erhalten Sie mit der Option
-l.
killall – Signale an Prozesse mit Namen
senden Der Name killall führt schnell in die Irre. Damit lassen sich nicht etwa alle Prozesse »killen«, sondern killall stellt eher eine Erleichterung für kill dar. Anstatt wie mit kill einen Prozess mit der Prozessnummer zu beenden bzw. ein Signal zu senden, kann mit killall der Prozessname verwendet werden. Was gerade bei unzählig vielen gleichzeitig laufenden Prozessen eine erhebliche Erleichterung darstellt, weil man hier nicht mühsam erst nach der Prozessnummer (z. B. mit dem Kommando ps) suchen muss. Ansonsten lässt sich killall ähnlich wie kill verwenden, nur dass der Signalname ohne das vorangestellte SIG angegeben wird. Eine Liste aller Signale erhalten Sie auch hier mit der Option -l.
user$ sleep 60 & [1] 5286 user$ killall sleep [1]+ Beendet sleep 60
nice – Prozesse mit anderer Priorität ausführen
Mit nice können Sie veranlassen, dass ein Kommando mit einer niedrigeren Priorität ausgeführt wird. Die Syntax lautet:
nice [-n] kommando [argumente]
Für n können Sie dabei eine Ziffer angeben, um wie viel die Priorität verändert werden soll. Der Standardwert, falls keine Angabe erfolgt, lautet 10 (-20 ist die höchste und 19 die niedrigste Priorität). Prioritäten höher als 0 darf ohnehin nur root starten. Häufig wird man das Kommando mit nice im Hintergrund starten wollen:
user$ nice find / -name document -print > \ /home/tmp/find.txt &
Hier wird mit find nach einer Datei »document« gesucht und die Ausgabe in die Datei find.txt geschrieben. Der Hintergrundprozess find wird dabei von nice mit einer niedrigen (10) Priorität gestartet. Dies stellt eine gängige Verwendung von nice dar.
nohup – Prozesse nach Abmelden fortsetzen
Mit nohup schützen Sie Prozesse vor dem HANGUP-Signal. Dadurch ist es möglich, dass ein Prozess im Hintergrund weiterlaufen kann, auch wenn sich ein Benutzer abmeldet. Ohne nohup würden sonst alle Prozesse einer Login-Shell des Anwenders durch das Signal SIGHUP beendet.
ps – Prozessinformationen anzeigen
ps ist wohl das wichtigste Kommando für Systemadministratoren, um an Informationen zu aktiven Prozessen zu gelangen (neben top). Rufen Sie ps ohne irgendwelche Argumente auf, werden Ihnen die zum jeweiligen Terminal gestarteten Prozesse aufgelistet. Zu jedem Prozess erhalten Sie die Prozessnummer (PID), den Terminal-Namen (TTY), die verbrauchte Rechenzeit (TIME) und den Kommandonamen (COMMAND). Aber neben diesen Informationen lassen sich über Optionen noch viele weitere Informationen entlocken. Häufig verwendet wird dabei der Schalter -e, womit Informationen zu allen Prozessen zu gewinnen sind (also nicht nur zum jeweiligen Terminal), und ebenso der Schalter -f, womit Sie noch vollständigere Informationen bekommen:
user$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:41 ? 00:00:00 init [2] root 2 1 0 10:41 ? 00:00:00 [migration/0] root 3 1 0 10:41 ? 00:00:00 [ksoftirqd/0] root 4 1 0 10:41 ? 00:00:00 [events/0] … hatt 19380 13264 0 15:15 pts/1 00:00:00 ps -ef
Mittlerweile beinhaltet das Kommando ps unglaublich viele Optionen, Näheres liefert die man-Seite von ps. Häufig sucht man in der Liste von Prozessen nach einem bestimmten. Diesen können Sie folgendermaßen
»herauspicken«:
user$ ps -ax | grep apache 12444 ? SNs 0:00 /usr/sbin/apache2 -k start -DSSL …
Durch die Verwendung der obigen Parameter wird zugleich auch die Prozessnummer geliefert. Dieselbe Funktion hat pgrep:
pgrep – Prozesse über ihren Namen finden
Sofern Sie die Prozessnummer eines Prozessnamens benötigen, ist pgrep das Kommando der Wahl.
user$ pgrep kamix 3171
pgrep liefert zu jedem Prozessnamen die Prozessnummer, sofern ein entsprechender Prozess gerade aktiv ist und in der Prozessliste (ps) auftaucht.
pstree – Prozesshierachie in Baumform ausgeben
Mit pstree können Sie die aktuelle Prozesshierarchie in Baumform ausgeben lassen. Ohne Angabe von Argumenten zeigt pstree alle Prozesse an, angefangen vom ersten Prozess init (PID = 1). Geben Sie hingegen eine PID oder einen Loginnamen an, so werden nur die Prozesse des Benutzers oder der Prozessnummer hierarchisch angezeigt.
renice – Priorität laufender Prozesse verändern
Mit dem Kommando renice können Sie im Gegensatz zu nice die Priorität von bereits laufenden Prozessen verändern. Ansonsten gilt auch hier alles schon beim Kommando nice Gesagte. Komfortabler können Sie die Priorität laufender Prozesse übrigens mit dem Kommando top verändern. Ein Tastendruck R fragt Sie nach der Prozessnummer und dem nice-Wert des Prozesses, dessen Priorität Sie verändern wollen.
sleep – Prozesse schlafen legen
Mit sleep legen Sie einen Prozess für n Sekunden schlafen. Voreingestellt sind zwar Sekunden, aber über Optionen können Sie hierbei auch Minuten, Stunden oder gar Tage verwenden.
su – Ändern der Benutzerkennung
Dieses Kommando bedeutet SwitchUser. Durch die Angabe ohne Argumente wird hierbei gewöhnlich nach dem Passwort des Superusers gefragt. Unter Ubuntu erfordert das Nutzen des su-Befehls die Einrichtung und Freischaltung des root-Accounts:
user$ sudo passwd Password: <Hauptbenutzerpasswort eingeben> Enter new UNIX password: <Rootpasswort definieren> Retype new UNIX password: <Rootpasswort bestätigen> passwd: password updated successfully user$ whoami hatt user$ su Password: root# whoami root root# exit user$ whoami hatt
Wie bereits mehrfach erwähnt, sollte der root-Account nach Möglichkeit deaktiviert bleiben.
Sie können den root-Account nach Freischaltung über
user$ sudo passwd -l root
wieder zurücksetzen.
su startet immer eine neue Shell mit der neuen Benutzer- (UID) und Gruppenkennung (GID). Wie bei einem neuen Login wird nach einem Passwort gefragt. Geben Sie keinen Benutzernamen an, versucht su zu UID 0 zu wechseln, was der Superuser ist. Sofern Sie »Superuser« sind, können Sie auch die Identität eines jeden Benutzers annehmen, ohne ein entsprechendes Passwort zu kennen.
sudo – Programm als anderer Benutzer ausführen
sudo ist ein Kommando, womit ein bestimmter Benutzer ein Kommando ausführen kann, wozu er normalerweise nicht die Rechte hat (bspw. für administrative Aufgaben). Dazu legt root gewöhnlich in der Datei
/etc/sudoers folgenden Eintrag ab:
# Auszug aus /etc/sudoers john ALL=/usr/bin/kommando
Jetzt kann der User »john« das Kommando mit folgendem Aufruf starten:
user$ sudo /usr/bin/kommando Passwort: *********
Nachdem »john« sein Passwort eingegeben hat, wird das entsprechende Kommando ausgeführt, wozu er normalerweise ohne den Eintrag in
/etc/sudoers nicht im Stande wäre. Der Eintrag wird gewöhnlich mit dem Editor vi über den Aufruf visudo vorgenommen.
Unter Ubuntu wurde der während der Installation angelegte Standardbenutzer automatisch der Gruppe admin zugeordnet, so dass er sämtliche administrativen Aufgaben »aus dem Stand« erledigen kann:
# Auszug aus /etc/sudoers / Ubuntu # User privilege specification rootALL=(ALL) ALL # Members of the admin group may gain root privileges \%adminALL=(ALL) ALL
Soll ein weiterer Benutzer auf Ihrem System über root-Rechte und somit die Fähigkeit, via sudo root-Kommandos auszuführen verfügen, so ordnen Sie diesen Benutzer am besten über addgroup der Gruppe admin zu.
time – Zeitmessung für Prozesse
Mit time führen Sie das in der Kommandozeile angegebene Kommando bzw. Skript aus und bekommen die Zeit, die dafür benötigt wurde, zurückgeliefert. Diese Zeit wird dabei aufgeteilt in die tatsächlich benötigte Zeit (real), die Rechenzeit im Usermodus (user) und diejenige im Kernelmodus (sys).
user$ time find . -name *.tex … real 0m0.657s user 0m0.104s sys 0m0.127s
top – Prozesse nach CPU-Auslastung anzeigen
Mit top bekommen Sie eine Liste der gerade aktiven Prozesse angezeigt. Die Liste wird nach CPU-Belastung sortiert. Standardmäßig wird top alle fünf Sekunden aktualisiert; beendet wird top mit q. top kann aber noch mehr, als die Auslastung der einzelnen Prozesse anzuzeigen, beispielsweise können Sie mit dem Tastendruck k (kill) einem bestimmten Prozess ein Signal senden oder mit r (renice) die Priorität eines laufenden Prozesses verändern. Ein Blick auf die man-Seite von top bringt außerdem noch einen gewaltigen Überblick zu diesem auf den ersten Blick einfachen Kommando zum Vorschein.
24.2.5 Speicherplatzinformationen
df – Abfrage des Speicherplatzes für
Dateisysteme df zeigt den freien Festplattenplatz für das Dateisystem an, wenn Sie einen Pfad als Verzeichnis angegeben haben. Wird kein Verzeichnis angegeben, dann wird der freie Plattenplatz für alle montierten Dateisysteme angezeigt. Der zusätzliche Parameter h listet den Speicherplatz in menschenlesbarer Form (h=human), sprich in Giga- bzw. Megabyte auf:
user$ df -h Dateisystem Größe Benut Verf Ben\% Eingehängt auf /dev/sda11 20G 4,7G 14G 26\% / … /dev/sda3 23G 7,3G 15G 34\% /daten /dev/sdb5 29G 19G 8,4G 70\% /remaster /dev/hdc1 47G 3,2G 44G 7\% /video /dev/hdc3 51G 13G 36G 26\% /vmware
Die erste Spalte stellt hierbei die Gerätedatei dar, gefolgt von der Größe der Partition (hier in GByte), dann wie viel Speicherplatz benutzt wird und anschließend, wie viel noch verfügbar ist. Die Prozentangabe gibt den prozentualen Wert der Plattennutzung an. Am Ende finden Sie noch den Mountpoint im Dateisystem.
du – Größe eines Verzeichnisbaums ermitteln
du zeigt die Belegung (Anzahl von KByte-Blöcken) durch die Dateien an. In Verzeichnissen wird dabei die Belegung der darin enthaltenen Dateibäume ausgegeben. Um den Wert der Ausgabe zu steuern, können folgende Optionen verwendet werden:
Option | Bedeutung |
-b | Ausgabe in Bytes |
-k | Ausgabe in Kilobytes |
-m | Ausgabe in Megabytes |
-h | (human-readable) vernünftige Ausgabe in Byte, KB, MB oder GB |
Häufig will man nicht, dass bei umfangreichen Verzeichnissen jede Datei einzeln ausgegeben wird, sondern nur die Gesamtzahl der Blöcke. Dann verwendet man den Schalter -s (man nutzt diesen praktisch immer).
user$ du -s /home 582585 /home user$ du -sh /home 569M /home
Wollen Sie nicht der kompletten Tiefe eines Verzeichnisses folgen, so können Sie sie auch mittels --max-depth=n festlegen:
user$ du --max-depth=1 -m /home 519 /home/tot 25 /home/you 26 /home/john 569 /home
free – verfügbaren Speicherplatz anzeigen
Den verfügbaren Speicherplatz (RAM und Swapspeicher, also Arbeitsspeicher und Auslagerungsspeicher auf der Festplatte) können Sie sich mit free anzeigen lassen:
user$ free total used free shared buffers cached Mem: 1035300 695424 339876 0 57032 381024 -/+ buffers/cache: 257368 777932 Swap: 1052216 0 1052216
X.2.6 Dateisystem-Kommandos
Bei den Kommandos zu den Dateisystemen handelt es sich häufig um Kommandos, die zumeist auch nur als root ausführbar sind. Aus Erfahrung weiss ich, dass man schnell gern mit root-Rechten spielt, um mit solchen Kommandos zu experimentieren. Hiervor möchte ich Sie aber warnen, sofern Sie nicht sicher sind, was Sie da tun. Mit zahlreichen dieser Kommandos verlieren Sie häufig nicht nur ein paar Daten, sondern können z. T. ein ganzes Dateisystem korrumpieren – was sich so weit auswirken kann, dass Ihr Betriebssystem nicht mehr startet.
badblocks – überprüft defekte Sektoren
Mit dem Kommando badblocks testen Sie den physischen Zustand eines Datenträgers. Dabei sucht badblocks auf einer Diskette oder Festplatte nach defekten Blöcken.
user$ sudo badblocks -s -o block.log /dev/fd0 1440
Hier wird z. B. bei einer Diskette (1,44 MByte) nach defekten Blöcken gesucht. Das Fortschreiten der Überprüfung wird durch die Option -s simuliert. Mit -o schreiben Sie das Ergebnis defekter Blöcke in die Datei block.log, die wiederum von anderen Programmen verwendet werden kann, damit diese beschädigten Blöcke nicht mehr genutzt werden. Die Syntax sieht somit wie folgt aus:
user$ badblocks [-optionen] Gerätedatei [startblock]
Die »Gerätedatei« ist der Pfad zum entsprechenden Speichermedium (bspw.
/dev/hda1 = erste Festplatte). Es kann außerdem auch optional der
»startblock« festgelegt werden, von dem aus mit dem Testen begonnen werden soll. Die Ausführung dieses Kommandos bleibt selbstverständlich nur dem Superuser überlassen.
cfdisk – Partitionieren von Festplatten
Mit cfdisk teilen Sie eine formatierte Festplatte in verschiedene Partitionen ein. Natürlich kann man auch eine bestehende Partition löschen oder eine vorhandene verändern (bspw. eine andere Systemkennung vergeben). Man kann mit cfdisk allerdings auch eine »rohe«, ganze Festplatte bearbeiten (nicht nur einzelne Partitionen). Die Gerätedatei ist also
/dev/hda für die erste IDE-Festplatte, /dev/hdb für die zweite Festplatte, /dev/sda für die erste SCSI- bzw. S-ATA-Festplatte, /dev/sdb für die zweite SCSI- bzw. S-ATA- Festplatte usw.
Starten Sie cfdisk, werden alle gefundene Partitionen mitsamt ihren Größe angezeigt. Mit den Pfeiltasten »nach oben« und »nach-unten« können Sie hierbei eine Partition auswählen und mit den Pfeiltasten
»nach-rechts« bzw. »nach-links« ein Kommando. Mit q können Sie cfdisk beenden.
Selbstverständlich ist cfdisk nur als root ausführbar. Sollten Sie solche Rechte haben und ohne Vorwissen mit cfdisk herumspielen, ist Ihnen mindestens ein Datenverlust sicher.
Wenn Sie Ihre Festplatte wirklich
»zerschneiden« wollen, so sollten Sie vor dem Partitionieren die alte Partitionstabelle sichern. Im Fall eines Missgeschicks kann so die alte Partitionstabelle wieder hergestellt werden, wodurch auf die Daten dann noch zugegriffen werden kann.
dd – Datenblöcke zwischen Devices kopieren
Mit dd können Sie eine Datei lesen und den Inhalt in einer bestimmten Blockgröße mit verschiedenen Konvertierungen zwischen verschiedenen Speichermedien (Festplatte, Diskette usw.) übertragen.
Damit lassen sich neben einfachen Dateien auch ganze Festplattenpartitionen kopieren. Ein komplettes Backup kann mit diesem Kommando realisiert werden. Ein Beispiel:
user$ sudo dd if=/dev/hda bs=512 count=1
Damit geben Sie den Bootsektor (nur als root möglich) auf dem Bildschirm aus. Wollen Sie jetzt auch noch ein Backup des Bootsektors auf einer Diskette sichern, dann gehen Sie folgendermaßen vor:
user$ sudo dd if=/dev/hda of=/dev/fd0 bs=512 count=1
Bevor Sie jetzt noch weitere Beispiele zum mächtigen Werkzeug dd sehen werden, müssen Sie sich zunächst mit den Optionen vertraut machen – im Beispiel werden if, of, bs und count verwendet.
Option | Bedeutung |
if = Datei | (input file) Hier gibt man den Namen der Eingabedatei (Quelldatei) an – ohne Angaben wird die Standardeingabe verwendet. |
of = Datei | (output file) Hier kommt der Name der Ausgabedatei (Zieldatei) hin – ohne Angabe wird hier die Standardausgabe verwendet. |
ibs = Schritt | (input block size) Hier wird die Blockgröße der Eingabedatei angegeben. |
obs = Schritt | (output block size) Hier wird die Blockgröße der Ausgabedatei angegeben. |
bs = Schritt | (block size) Hier legt man die Blockgröße für Ein- und Ausgabedatei fest. |
cbs = Schritt | (conversion block size) Die Blockgröße für die Konvertierung wird bestimmt. |
skip = Blocks | Hier können Sie eine Anzahl Blocks angeben, die von der Eingabe zu Beginn ignoriert werden sollen. |
seek = Blocks | Hier können Sie eine Anzahl Blocks angeben, die von der Ausgabe am Anfang ignoriert werden sollen; unterdrückt am Anfang die Ausgabe der angegebenen Anzahl Blocks. |
count = Blocks | Hier wird angegeben, wie viele Blöcke kopiert werden sollen. |
Eine spezielle Option steht Ihnen mit conv-Konvertierung zur Verfügung. Folgende Konvertierungen sind dabei möglich:
Option | Konvertierung |
conv=ascii | EBCDIC nach ASCII |
conv=ebcdic | ASCII nach EBCDIC |
conv=ibm | ASCII nach big blue special EBCDIC |
conv=block | Es werden Zeilen in Felder mit der Größe cbs geschrieben und das Zeilenende wird durch Leerzeichen ersetzt. Der Rest des Feldes wird mit Leerzeichen aufgefüllt. |
conv=unblock | Abschließende Leerzeichen eines Blocks der Größe cbs werden durch ein Zeilenende ersetzt. |
conv=lcase | Großbuchstaben in Kleinbuchstaben |
conv=ucase | Kleinbuchstaben in Großbuchstaben |
conv=swab | Vertauscht je zwei Bytes der Eingabe. Ist die Anzahl der gelesenen Bytes ungerade, wird das letzte Byte einfach kopiert. |
conv=noerror | Lesefehler werden ignoriert. |
conv=sync | Füllt Eingabeblöcke bis zur Größe von ibs mit Nullen |
Jetzt noch einige interessante Beispiel zu dd:
user$ sudo dd if=/vmlinuz of=/dev/fd0
Damit kopieren Sie den Kernel (hier in »vmlinuz« – bitte anpassen) in den ersten Sektor der Diskette, die als Bootdiskette verwendet werden kann.
user$ sudo dd if=/dev/hda of=/dev/hdc
Mächtig, hiermit klonen Sie praktisch in einem Schritt die erste Festplatte am Master IDE-Kontroller auf die Festplatte am zweiten Master-Anschluss. Somit haben Sie auf /dev/hdc denselben Inhalt wie auf
/dev/hda. Natürlich kann die Ausgabedatei auch ganz woanders hingeschrieben werden, z. B. auf einen DVD-Brenner, eine Festplatte am USB-Anschluss oder in eine Datei.
Zwar ist dd ein mächtigeres Werkzeug, als es hier vielleicht den Anschein hat, doch trotzdem sollten Sie gewarnt sein vor wirren dd-Aufrufen. Der Datensalat ist auch hier schneller entstanden als sonstwo. Daher benötigt man wieder die allmächtigen root-Rechte. Falls Sie größere Datenmengen mit dd kopieren, können Sie dem Programm von einer anderen Konsole aus mittels kill das Signal SIGUSR1 senden, um dd zu veranlassen, den aktuellen Fortschritt auszugeben.
dd_rescue – fehlertolerantes Kopieren
Falls Sie z. B. eine defekte Festplatte – oder eine Partition auf derselben
– kopieren wollen, stößt dd schnell an seine Grenzen. Zudem ist beim Retten von Daten eines defekten Speichermediums die Geschwindigkeit wichtig, da das Medium weitere Fehler verursachen kann und somit weitere Dateien korrumpiert werden können. Ein Fehlversuch mit dd kann hier also fatale Folgen haben.
An dieser Stelle bietet sich das Werkzeug dd_rescue an, das bei Ubuntu mit Hilfe des gleichnamigen Pakets nachinstalliert wird. Sie können damit – ähnlich wie mit dd – Dateiblöcke auf Low-Level-Basis auf ein anderes Medium kopieren. Als Zielort ist eine Datei auf einem anderen Speichermedium sinnvoll. Von diesem Abbild der defekten Festplatte können Sie eine Kopie erstellen, um das ursprüngliche Abbild nicht zu verändern, und in einem der Abbilder versuchen, das Dateisystem mittels fsck wieder zu reparieren. Ist dies gelungen, können Sie das Abbild wieder mit dd_rescue auf eine neue Festplatte kopieren. Ein Beispiel:
user$ sudo dd_rescue -v /dev/hda1 \ /mnt/rescue/hda1.img
In dem Beispiel wird die Partition /dev/hda1 in die Abbilddatei
/mnt/ rescue/hda1.img kopiert.
dumpe2fs – Analyse von ext2/ext3-Systemen
dumpe2fs gibt eine Menge interne Informationen zum Superblock und anderen Blockgruppen zu einem ext2/ext3-Dateisystem aus (vorausgesetzt, dieses Dateisystem wird auch verwendet), zum Beispiel:
user$ sudo dumpe2fs -b /dev/hda6
Mit der Option -b werden alle Blöcke von /dev/hda6 auf die Konsole ausgegeben, die als »schlecht« markiert wurden.
e2fsck – repariert ein ext2/ext3-Dateisystem
e2fsck überprüft ein ext2/ext3-Dateisystem und repariert den Fehler. Damit e2fsck verwendet werden kann, muss fsck.ext2 installiert sein, welches das eigentliche Programm ist. e2fsck ist nur ein »Frontend« dafür. Die Befehlssyntax lautet:
user$ sudo e2fsck Gerätedatei
Mit der »Gerätedatei« geben Sie die Partition an, auf der das Dateisystem überprüft werden soll (das selbstverständlich wieder ein ext2/ext3Dateisystem sein muss). Bei den Dateien, bei denen die Inodes in keinem Verzeichnis notiert sind, werden sie von e2fsck im Verzeichnis lost+found eingetragen und können so repariert werden. e2fsck gibt beim Überprüfen einen Exit-Code zurück, den Sie mit echo $? abfragen können. Folgende wichtigen Exit-Codes und deren Bedeutung können dabei zurückgegeben werden:
Exit-Code | Bedeutung |
0 | Kein Fehler im Dateisystem |
1 | Einen Fehler im Dateisystem gefunden und repariert |
2 | Schweren Fehler im Dateisystem gefunden und korrigiert. Allerdings sollte das System neu gestartet werden. |
4 | Fehler im Dateisystem gefunden, aber nicht korrigiert |
8 | Fehler bei der Kommandoausführung von e2fsck |
16 | Falsche Verwendung von e2fsck |
128 | Fehler in den Shared-Libraries |
Wichtige Optionen, die Sie mit e2fsck angeben können, sind:
Option | Bedeutung |
-p | Alle Fehler automatisch reparieren ohne Rückfragen |
-c | Durchsucht das Dateisystem nach schlechten Blöcken |
-f | Erzwingt eine Überprüfung des Dateisystems, auch wenn der Kernel das System für OK befunden hat (valid-Flag gesetzt) |
fsck fragt meist nach, ob das Kommando wirklich ausgeführt werden soll. Bei der Antwort genügt der Anfangsbuchstabe »j« oder »y« als Antwort nicht, sondern es muss »yes« oder »ja« (je nach Fragestellung) eingegeben werden. Anderenfalls bricht fsck an dieser Stelle kommentarlos ab.
fdformat – formatiert eine Diskette
Auch wenn viele Rechner mittlerweile ohne Diskettenlaufwerk ausgeliefert werden, wird das Diskettenlaufwerk immer wieder einmal benötigt (z. B. für eine Rettungsdiskette mit einem Mini-Linux). Mit dem Kommando fdformat formatieren Sie eine Diskette. Das Format wird dabei anhand von im Kernel gespeicherten Parametern erzeugt. Beachten Sie allerdings, dass die Diskette nur mit leeren Blöcken beschrieben wird und nicht mit einem Dateisystem. Zum Erstellen von Dateisystemen stehen Ihnen die Kommandos mkfs, mk2fs oder mkreiserfs zur Verfügung. Die Syntax des Befehls lautet:
fdformat Gerätedatei
fdisk – Partitionieren von Speichermedien
fdisk ist die etwas unkomfortablere Alternative gegenüber cfdisk, eine Festplatte in verschiedene Partitionen aufzuteilen, zu löschen oder gegebenenfalls zu ändern. Im Gegensatz zu cfdisk können Sie hier nicht mit den Pfeiltasten navigieren und müssen einzelne Tastenkürzel verwenden. Allerdings hat fdisk den Vorteil, fast überall und immer präsent zu sein. Die wichtigsten Tastenkürzel zur Partitionierung selbst sind:
Taste | Bedeutung |
b | »bsd disklabel« bearbeiten |
d | Eine Partition löschen |
l | Die bekannten Dateisystemtypen anzeigen (Sie benötigen die Nummer) |
m | Ein Menü mit allen Befehlen anzeigen |
n | Eine neue Partition anlegen |
p | Die Partitionstabelle anzeigen |
q | Ende ohne Speichern der Änderungen |
s | Einen neuen leeren »Sun disklabel« anlegen |
t | Den Dateisystemtyp einer Partition ändern |
u | Die Einheit für die Anzeige/Eingabe ändern |
v | Die Partitionstabelle überprüfen |
w | Die Tabelle auf die Festplatte schreiben und das Programm beenden |
w | Zusätzliche Funktionen (nur für Experten) |
Noch ein Vorzug ist, dass fdisk nicht interaktiv läuft. Man kann es z. B. benutzen, um einen ganzen Schlag Festplatten automatisch zu formatieren. Das ist ganz praktisch, wenn man ein System identisch auf einer ganzen Anzahl Rechner installieren muss. Man installiert nur auf einem, erzeugt mit dd ein Image, erstellt ein kleines Skript, bootet die anderen Rechner z. B. von »damnsmall-Linux« (einer speziellen Mini-Distribution z. B. für den USB-Stick) und führt das Skript aus, das dann per fdisk formatiert und per dd das Image des Prototypen installiert. Danach muss man nur noch die IP-Adresse und den Hostname anpassen, was Sie auch skriptgesteuert vornehmen können. Einen komfortablen Überblick zu allen Partitionen auf allen Festplatten können Sie sich mit der Option -l anzeigen lassen:
user$ sudo fdisk -l Platte /dev/hdc: 120.0 GByte, 120034123776 Byte 255 Köpfe, 63 Sektoren/Spuren, 14593 Zylinder Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes Gerät Anfang Ende Blöcke Id System /dev/hdc1 1 6079 48829536 83 Linux /dev/hdc2 6080 7903 14651280 83 Linux /dev/hdc3 7904 14593 53737425 83 Linux
Zum Partitionieren müssen Sie fdisk mit der Angabe der Gerätedatei starten:
user$ sudo fdisk /dev/hda
fsck – Reparieren und Überprüfen
fsck ist ein unabhängiges Frontend zum Prüfen und Reparieren der Dateisystem-Struktur. fsck ruft gewöhnlich je nach Dateisystem das entsprechende Programm auf. Bei ext2/ext3 ist dies bspw. fsck.ext2, bei einem Minix-System fsck.minix, bei ReiserFS reiserfsck usw. Die Zuordnung des entsprechenden Dateisystems nimmt fsck anhand der Partitionstabelle oder durch eine Kommandozeilenoption vor. Die meisten dieser Programme unterstützen die Optionen -a, -A, -l, -r, -s und -v. Meistens wird hierbei die Option -a -A verwendet. Mit -a veranlassen Sie eine automatische Reparatur, sofern dies möglich ist, und mit -A geben Sie an, dass alle Dateisysteme getestet werden sollen, die in /etc/fstab eingetragen sind. fsck gibt beim Überprüfen einen Exit-Code zurück, den Sie mit echo $? abfragen können. Folgende wichtige Exit-Codes und deren Bedeutung können dabei zurückgegeben werden:
Exit-Code | Bedeutung |
0 | Kein Fehler im Dateisystem |
1 | Einen Fehler im Dateisystem gefunden und repariert |
2 | Schweren Fehler im Dateisystem gefunden und korrigiert. Allerdings sollte das System neu gestartet werden. |
4 | Fehler im Dateisystem gefunden, aber nicht korrigiert |
8 | Fehler bei der Kommandoausführung von fsck |
16 | Falsche Verwendung von fsck |
128 | Fehler in den Shared-Libraries |
Ganz wichtig ist es auch, fsck immer auf nicht eingebundene bzw. nur im readonly-Modus eingebundene Dateisysteme anzuwenden. Denn fsck kann sonst eventuell ein Dateisystem verändern (reparieren), ohne dass das System dies zu realisieren vermag. Ein Systemabsturz ist dann vorprogrammiert. Gewöhnlich wird fsck bzw. fsck.ext3 beim Systemstart automatisch ausgeführt, wenn eine Partition nicht sauber ausgebunden wurde oder nach jedem 30sten Booten bei Ubuntu in der Standardeinstellung.
mkfs – Dateisystem einrichten
Mit mkfs können Sie auf einer zuvor formatierten Festplatte bzw. Diskette ein Dateisystem anlegen. Wie schon fsck ist mkfs ein unabhängiges Frontend, das die Erzeugung des Dateisystems nicht selbst übernimmt, sondern auch hier das spezifische Programm zur Erzeugung des entsprechenden Dateisystems verwendet. Auch hierbei richtet sich mkfs wieder nach den Dateisystemen, die in der Partitionstabelle aufgelistet sind, oder gegebenenfalls nach der Kommandozeilenoption. Abhängig vom Dateisystemtyp ruft mkfs dann das Kommando mkfs.minix (für Minix), mk2fs (für ext2/ext3), mkreiserfs (für ReiserFS) usw. auf. Die Syntax lautet:
user$ mkfs [option] Gerätedatei [blöcke]
Für die »Gerätedatei« müssen Sie den entsprechenden Pfad angeben (z. B. /dev/hda1). Es kann außerdem auch die Anzahl von Blöcken angegeben werden, die das Dateisystem belegen soll. Auch mkfs gibt einen Exit-Code über den Verlauf der Kommandoausführung zurück, den Sie mit echo $? auswerten können.
Exit-Code | Bedeutung |
0 | Alles erfolgreich durchgeführt |
8 | Fehler bei der Programmausführung |
16 | Ein Fehler in der Kommandozeile |
Mit der Option -t können Sie den Dateisystemtyp des zu erzeugenden Dateisystems festlegen. Ohne
-t würde hier versucht, das Dateisystem anhand der Partitionstabelle zu bestimmen. Sie erzeugen z. B. mit
user$ sudo mkfs -f xfs /dev/hda7
auf der Partition /dev/hda7 ein Dateisystem xfs (alternativ zu ext2).
mkswap – eine Swappartition einrichten
Mit mkswap legen Sie eine Swappartition an. Diese können Sie z. B. dazu verwenden, schlafende Prozesse, die auf das Ende von anderen Prozessen warten, in die Swappartition der Festplatte auszulagern. So halten Sie Platz im Arbeitsspeicher für andere laufende Prozesse frei. Sofern Sie nicht schon bei der Installation von Ubuntu die (gewöhnlich) vorgeschlagene Swapppartition eingerichtet haben, können Sie dies nachträglich mit dem Kommando mkswap vornehmen. Zum Aktivieren einer Swappartition müssen Sie das Kommando swapon aufrufen. Ist Ihr Arbeitsspeicher ausgelastet, können Sie auch kurzfristig solch einen Swapspeicher einrichten.
Ein Beispiel:
user$ sudo dd bs=1024 if=/dev/zero \ of=/tmp/myswap count=4096 4096+0 Datensätze ein 4096+0 Datensätze aus user$ sudo mkswap -c /tmp/myswap 4096 Swapbereich Version 1 wird angelegt, Größe 4190 KBytes user$ sudo sync user$ sudo swapon /tmp/myswap
Zuerst legen Sie mit dd einen leere Swapdatei mit 4 Megabytes Größe mit Null-Bytes an. Anschließend verwenden Sie diesen Bereich als Swapdatei. Nach einem Aufruf von sync müssen Sie nur noch den Swapspeicher aktivieren. Wie dieser Swapbereich allerdings verwendet wird, haben Sie nicht in der Hand, dies wird vom Kernel mit dem »Paging« gesteuert.
Eine Datei, die als Swapbereich eingebunden wird, sollte nur genutzt werden, wenn keine Partition dafür zur Verfügung steht, da die Methode erheblich langsamer ist als eine Swap-Partition.
mount, umount – Dateisysteme an- bzw. abhängen
mount hängt einzelne Dateisysteme mit den verschiedensten Medien (Festplatte, CD-ROM, Diskette, ...) an einen einzigen Dateisystembaum an. Die einzelnen Partitionen werden dabei als Gerätedateien im Ordner /dev angezeigt. Rufen Sie mount ohne irgendwelche Argumente auf, werden alle »gemounteten« Dateisysteme aus /etc/mtab aufgelistet. Auch hier bleibt es wieder root überlassen, ob ein Benutzer ein bestimmtes Dateisystem einbinden kann oder nicht. Hierzu muss nur ein entsprechender Eintrag in /etc/fstab vorgenommen werden. In der folgenden Tabelle finden Sie einige Beispiele, wie verschiedene Dateisysteme eingehängt werden können:
Verwendung | Bedeutung |
mount /dev/fd0 | Hängt das Diskettenlaufwerk ein |
mount /dev/hda9 /home/you | Hier wird das Dateisystem /dev/hda9 an das Verzeichnis /home/you gemountet. |
mount goliath:/progs \ /home/progs | Mountet ein Dateisystem per NFS von einem Rechner namens »goliath« und hängt diesen an das lokale Verzeichnis /home/progs |
Wollen Sie ein Dateisystem wieder aushängen, egal ob jetzt lokale oder entfernte Partitionen, dann nehmen Sie dies mit umount vor:
user$ umount /dev/fd0
Hier wird das Diskettenlaufwerk aus dem Dateisystem ausgehängt. Wenn ein Eintrag für ein Dateisystem in der /etc/fstab besteht, reicht es aus, mount mit dem Device oder dem Mountpoint als Argument aufzurufen:
»mount /dev/fd0«.
parted – Partitionen anlegen etc.
Mit parted können Sie nicht nur – wie mit fdisk bzw. cfdisk – Partitionen anlegen oder löschen, sondern auch vergrößern, verkleinern, kopieren und verschieben. parted wird gern verwendet, wenn man Platz auf der Festplatte schaffen will für ein neues Betriebssystem oder alle Daten einer Festplatte auf eine neue kopieren will. Mehr hierzu entnehmen Sie der Manual-Seite von parted.
swapon, swapoff – Swapspeicher (de)aktivieren
Wenn Sie auf dem System eine Swap-Partition eingerichtet haben (siehe mkswap), existiert diese zwar, muss aber noch mit dem Kommando swapon aktiviert werden. Den so aktivierten Bereich können Sie jederzeit mit swapoff wieder aus dem laufenden System deaktivieren.
sync – gepufferte Schreiboperationen ausführen
Normalerweise verwendet Linux einen Puffer (Cache) im Arbeitsspeicher, worin sich ganze Datenblöcke eines Massenspeichers befinden. So werden Daten häufig temporär erst im Arbeitsspeicher verwaltet, da sich ein dauernd schreibender Prozess äußerst negativ auf die Performance des Systems auswirken würde. Stellen Sie sich das einmal bei 100 Prozessen vor!
Gewöhnlich übernimmt ein Daemon die Arbeit und entscheidet, wann die veränderten Datenblöcke auf die Festplatte geschrieben werden.
Mit dem Kommando sync können Sie nun veranlassen, dass veränderte Daten sofort auf die Festplatte (oder auch jeden anderen Massenspeicher) geschrieben werden. Dies kann häufig der letzte Rettungsanker sein, wenn das System sich nicht mehr richtig beenden lässt. Können Sie hierbei noch schnell ein sync ausführen, werden alle Daten zuvor nochmals gesichert und der Datenverlust kann eventuell ganz verhindert werden.
24.2.7 Archivierung und Backup
bzip2/bunzip2 – (De-)Komprimieren von Dateien
bzip2 ist dem Kommando gzip nicht unähnlich, nur dass bzip2 einen besseren Komprimierungsgrad als gzip erreicht. bzip arbeitet mit dem Burrows-Wheeler-Block-Sorting-Algorithmus, der den Text zwar nicht komprimiert, aber leichter komprimierbar macht, sowie mit der Huffman-Kodierung. Allerdings ist die Kompression mit bzip2 erheblich besser, aber dafür auch erheblich langsamer. Alle Dateien, die mit bzip2 komprimiert werden, bekommen automatisch die Dateiendung ».bz2«. TAR-Dateien, die mit bzip2 komprimiert werden, erhalten üblicherweise die Endung ».tbz«. Die »2« bei bzip2 bzw. bunzip2 kam dadurch, dass der Vorgänger bzip hieß, der allerdings aus patentrechtlichen Gründen nicht mehr weiterentwickelt wurde. Komprimieren können Sie Dateien mit bzip2 folgendermaßen:
user$ bzip2 file.txt
Entpacken können Sie die komprimierte Datei wieder mit der Option
-d und bzip2 oder mit bunzip2.
user$ bzip2 -d file.txt.bz2
oder
user$ bunzip2 file.txt.bz2
Sie können gern bzip2 mit der Option -d bevorzugen, weil bunzip2 nichts anderes ist als ein Link auf bzip2, wobei allerdings automatisch die Option -d verwendet wird. Interessant ist in diesem Zusammenhang auch das Kommando bzcat, womit Sie bzip2-komprimierte Dateien lesen können, ohne diese vorher zu dekomprimieren.
user$ bzcat file.txt.bz2 …
cpio, afio – Dateien archivieren
cpio (copy in and out) eignet sich hervorragend, um ganze Verzeichnisbäume zu archivieren. Etwas ungewöhnlich auf den ersten Blick ist, dass cpio die zu archivierenden Dateien nicht von der Kommandozeile, sondern von der Standardeingabe liest. Häufig wird daher cpio in Verbindung mit den Kommandos ls oder find und einer Pipe verwendet. Damit ist es möglich, ein spezielles Archiv zu erzeugen, das den Eigentümer, die Zugriffsrechte, die Erzeugungszeit, die Dateigröße usw. berücksichtigt. Gewöhnlich wird cpio auf drei verschiedenen Arten aufgerufen.
copy out
Diese Art wird mit der Option -o bzw. ---create verwendet. So werden die Pfadnamen der zu kopierenden Dateien von der Standardeingabe eingelesen und auf die Standardausgabe kopiert. Es können z. B. der Eigentümer, die Zugriffsrechte, die Dateigröße, ausgegeben werden. Gewöhnlich verwendet man copy out mit einer Pipe und einer Umlenkung:
user$ cd meinbuch user$ ls Kap001.txt Kap002.txt … user$ ls *.txt | cpio -o > meinbuch.cpio 1243 blocks
Hier wurden z. B. alle Textdateien im Verzeichnis meinbuch zu einem cpio-Archiv (meinbuch.cpio) gepackt. Allerdings konnten hier nur bestimmte Dateien erfasst werden. Wollen Sie ganze Verzeichnisbäume archivieren, dann verwenden Sie das Kommando find:
user$ find $HOME/meinbuch -print | cpio -o > \ meinbuch.cpio
Natürlich können Sie hierbei mit find-üblichen Anweisungen nur bestimmte Dateien archivieren. Ebenso lassen sich Dateien auch auf ein anderes Laufwerk archivieren:
user$ ls -a | cpio -o > /dev/fd0
Hier wurden beispielsweise alle Dateien des aktuellen Verzeichnisses auf die Diskette kopiert. Dabei können Sie genauso gut einen Streamer, eine andere Festplatte oder gar einen anderen Rechner verwenden.
copy in
Wollen Sie das mit cpio -o erzeugte Archiv wieder entpacken bzw. zurückspielen, so wird cpio mit dem Schalter -i bzw. ---extract verwendet. Damit liest cpio die archivierten Dateien von der Standardeingabe ein. Es ist sogar möglich, hierbei reguläre Ausdrücke zu verwenden. Mit folgender Befehlsausführung entpacken Sie das Archiv wieder:
user$ cpio -i < meinbuch.cpio
Um nur bestimmte Dateien zu entpacken, nutzen Sie folgenden Befehl:
user$ cpio -i "*.txt" < meinbuch.cpio
Hier entpacken Sie nur Textdateien mit der Endung ».txt«.
Natürlich funktioniert das Ganze auch mit den verschiedensten Speichermedien:
user$ cpio -i "*.txt" < /dev/fd0
Hier werden alle Textdateien von einer Diskette entpackt. Allerdings werden die Dateien immer ins aktuelle Arbeitsverzeichnis zurückgespielt, so dass Sie den Zielort schon zuvor angeben müssen, zum Beispiel:
user$ cd $HOME/meinbuch/testdir ; \ > cpio -i < /archive/meinbuch.cpio
Hier wechseln Sie zunächst in ein entsprechendes Verzeichnis, in dem Sie anschließend das Archiv entpacken wollen. Wollen Sie außerdem erst wissen, was Sie entpacken, also was für Dateien sich in einem cpio-Archiv befinden, dürfen Sie cpio nur mit der Option -t verwenden:
user$ cpio -t < meinbuch.cpio …
copy pass
Mit copy pass werden die Dateien von der Standardeingabe gelesen und in ein entsprechendes Verzeichnis kopiert, ohne dass ein Archiv erzeugt wird. Hierzu wird die Option -p eingesetzt. Voraussetzung ist natürlich, dass ein entsprechendes Verzeichnis existiert. Wenn nicht, können Sie zusätzlich die Option -d verwenden, womit dann ein solches Verzeichnis erzeugt wird.
user$ ls *.txt | cpio -pd /archive/testdir2
Hiermit werden aus dem aktuellen Verzeichnis alle Textdateien in das Verzeichnis testdir2 kopiert. Der Aufruf entspricht:
user$ cp *.txt /archive/testdir2
Einen ganzen Verzeichnisbaum des aktuellen Arbeitsverzeichnisses könnten Sie somit mit folgendem Aufruf kopieren:
user$ find . -print | cpio -pd /archiv/testdir3
afio
afio bietet im Gegensatz zu cpio die Möglichkeit, die einzelnen Dateien zu komprimieren. Somit stellt afio eine interessante tar-Alternative dar (für alle, die tar mit seinen typischen Optionsparametern nicht mögen). afio komprimiert die einzelnen Dateien noch, bevor sie in ein Archiv zusammengefasst werden. Unter Ubuntu muss afio allerdings zunächst mit dem gleichnamigen Paket nachinstalliert werden. Ein einfaches Beispiel zur Anwendung von afio:
user$ ls *.txt | afio -o -Z meinbuch.afio
Sie komprimieren zunächst alle Textdateien im aktuellen Verzeichnis und fassen dies dann in das Archiv meinbuch.afio zusammen. Die Platzeinsparung im Vergleich zu cpio ist beachtlich:
user$ ls -l Shellbook* -rw------- 1 tot users 209920 meinbuch.afio -rw------- 1 tot users 640512 meinbuch.cpio
Entpacken können Sie das Archiv wieder wie bei cpio mit dem Schalter -i:
user$ afio -i -Z Shellbook.afio
ccrypt – Dateien verschlüsseln
Mit dem Kommando ccrypt wird ein zu ver-/entschlüsselnder Text von der Standardeingabe gelesen, um diesen wieder ver-/entschlüsselt auf die Standardausgabe auszugeben. ccrypt wird unter Ubuntu mit Hilfe des gleichnamigen Pakets installiert. Ein Anwendungsbeispiel:
user$ ccrypt file.txt Enter encryption key: Enter encryption key: (repeat)
Wie oben zu sehen, ist die Eingabe eines Schlüssels erforderlich, der zusätzlich zu bestätigen ist. Es wird eine Binärdatei file.txt.cpt erzeugt. Diese lässt sich mit der Option -d dechiffrieren:
user$ ccrypt -d file.txt.cpt Enter encryption key:
Beachten Sie bitte die Gesetzeslage zur Verschlüsselung in Ihrem Heimatland. Kryptographie ist inzwischen in einigen Ländern verboten. So darf man in Frankreich zum Beispiel kein PGP einsetzen.
gzip/gunzip – (De-)Komprimieren von Dateien
gzip komprimiert Dateien und fügt am Ende des Dateinamens die Endung
».gz« an. Die Originaldatei wird hierbei durch die komprimierte Datei ersetzt. gzip basiert auf dem deflate-Algorithmus, der eine Kombination aus LZ77 und Huffman-Kodierung ist. Der Zeitstempel einer Datei und auch die Zugriffsrechte bleiben beim Komprimieren und auch beim Entpacken mit gunzip erhalten.
Sofern Sie Softwareentwickler in bspw. C sind und Datenkompression verwenden wollen, sollten Sie sich die Bibliothek zlib ansehen. Diese Bibliothek unterstützt das gzip-Dateiformat.
Sie komprimieren eine oder mehrere Datei(en) ganz einfach mit:
user$ gzip file1.txt
Und Dekomprimieren geht entweder mit gzip und der Option
-d:
user$ gzip -d file1.txt.gz
oder mit gunzip:
user$ gunzip file1.txt.gz
Wobei gunzip hier kein symbolischer Link ist, sondern ein echtes Kommando. gunzip kann neben gzip-Dateien auch Dateien dekomprimieren, die mit zip, compress oder pack komprimiert wurden.
Wollen Sie, dass beim (De-)Komprimieren nicht die Originaldatei berührt wird, so müssen Sie die Option -c verwenden:
user$ gzip -c file1.txt > file1.txt.gz
Dies können Sie ebenso mit gunzip anwenden:
user$ gunzip -c file1.txt.gz > file1_neu.txt
Damit lassen Sie die gzip-komprimierte Datei file1.txt.gz unberührt und erzeugen eine neue dekomprimierte Datei file1_neu.txt. Selbiges können Sie auch mit zcat erledigen:
user$ zcat file1.txt.gz > file1_neu.txt
mt – Streamer steuern
Mit mt können Magnetbänder vor- oder zurückgespult, positioniert und gelöscht werden. mt wird häufig in Shell-Skripten in Verbindung mit tar, cpio oder afio verwendet, weil jedes der Kommandos zwar auf Magnetbänder schreiben, aber diese nicht steuern kann. So wird mt wie folgt in der Praxis verwendet:
mt -f Tape Befehl [Nummer]
Mit »Tape« geben Sie den Pfad zu Ihrem Bandlaufwerk an und mit »Nummer«, wie oft »Befehl« ausgeführt werden soll.
In der folgenden Tabelle finden Sie hierzu die gängigsten Befehle, die dabei eingesetzt werden:
Befehl | Bedeutung |
eom | Band bis zum Ende der letzten Datei spulen. Ab hier kann mit tar, cpio und afio ein Backup aufgespielt werden. |
fsf Anzahl | Das Band um »Anzahl« Archive (Dateiendemarken) vorspulen. Nicht gleichzusetzen mit der letzten Datei (eom). |
nbsf Anzahl | Das Band um »Anzahl« Archive (Dateiendemarken) zurückspulen |
rewind | Das Band an den Anfang zurückspulen |
status | Statusinformationen vom Magnetlaufwerk ermitteln und ausgeben (bspw. ist ein Band eingelegt oder nicht) |
erase | Das Band löschen und initialisieren |
retension | Das Band einmal ans Ende spulen und wieder zum Anfang zurück, um es neu zu »spannen« |
offline | Band zum Anfang zurückspulen und auswerfen |
tar – Dateien und Verzeichnisse archivieren
tar (tape archiver) wurde ursprünglich zur Verwaltung von Bandarchiven verwendet. Mittlerweile wird tar aber auch auf Disketten oder für normale Dateien oder Verzeichnisse angewendet. Das Kommando wird zur Erstellung von Sicherungen bzw. Archiven sowie zu ihrem Zurückladen genutzt. Die Syntax lautet:
tar Funktion [Optionen] [Datei(en)]
Mit »Funktion« geben Sie an, wie die Erstellung bzw. das Zurückladen von Archiven erfolgen soll. Mit »Datei(en)« bestimmen Sie, welche Dateien oder Dateibäume herausgeschrieben oder wieder eingelesen werden sollen. Gibt man hierbei ein Verzeichnis an, so wird der gesamte darin enthaltene Dateibaum verwendet. Gewöhnlich werden Archive mittels tar nicht komprimiert, aber auch hier kann man mit tar die Ein- und Ausgabe durch einen Kompressor leiten. Neuere Versionen unterstützen sowohl compress als auch gzip und bzip2, das inzwischen einen recht hohen Stellenwert hat. Das gilt auch nicht nur für GNU-tar.
tar (besonders GNU-tar) ist gewaltig, was die Anzahl von Funktionen und Optionen betrifft. Da tar eigentlich zu einem sehr beliebten Archivierungswerkzeug gehört, sollen hierbei auch mehrere Optionen und Funktionen erwähnt werden. In der nachfolgenden Tabelle sind die Optionen, mit denen Sie die Funktion von tar festlegen, aufgelistet (es darf bei den 1-Zeichen-Funktionen auch das führende -weggelassen werden).
Option | Bedeutung |
-A | Hängt ein komplettes Archiv an ein zweites vorhandenes Archiv an (oder fügt es auf dem Band hinten an) |
-c | Erzeugt ein neues Archiv |
-d | Vergleicht die im Archiv abgelegten Dateien mit den angegebenen Dateien |
---delete Datei(en) | Löscht die angegebenen »Datei(en)« aus dem Archiv (nicht für Magnetbänder) |
-r | Erwähnte Dateien werden ans Ende von einem bereits existierenden Archiv angehängt (nicht für Magnetbänder) |
-t | Zeigt den Inhalt eines Archivs an |
-u | Benannte Dateien werden nur dann ins Archiv aufgenommen, wenn diese neuer als die bereits archivierten Versionen oder noch überhaupt nicht im Archiv vorhanden sind (nicht für Magnetbänder). |
-x | Bestimmte Dateien sollen aus einem Archiv gelesen werden; werden keine Dateien erwähnt, werden alle Dateien aus dem Archiv extrahiert. |
Darüber hinaus gibt es noch einige Zusatzoptionen. Die gängigsten sind:
Option | Bedeutung |
-f Datei | Benutzt »Datei« oder das damit verbundenen Gerät als Archiv; die Datei darf auch Teil von einem anderen Rechner sein. |
-l | Geht beim Archivieren nicht über die Dateisystemgrenze hinaus |
-v | tar gibt gewöhnlich keine speziellen Meldungen aus; mit dieser Option wird jede Aktion von tar gemeldet. |
-w | Schaltet tar in einen interaktiven Modus, wo zu jeder Aktion eine Bestätigung erfolgen muss |
-y | Komprimiert oder dekomprimiert die Dateien bei einer tar-Operation mit bzip2 |
-z | Komprimiert oder dekomprimiert die Dateien bei einer tar-Operation mit gzip bzw. gunzip |
-Z | Komprimiert oder dekomprimiert die Dateien bei einer tar-Operation mit compress bzw. uncompress |
Neben diesen zusätzlichen Optionen bietet tar noch mehr an. Weitere Informationen entnehmen Sie der man-Seite zu tar. Allerdings dürften Sie mit den genannten Optionen recht weit kommen. Am häufigsten wird tar wohl in folgender Grundform verwendet:
user$ tar cf Archiv_Name Verzeichnis
Damit wird aus dem Verzeichniszweig Verzeichnis ein Archiv mit dem Namen Archiv_Name erstellt.
In der Praxis sieht dies folgendermaßen aus:
user$ tar cf home_jan06 $HOME
Aus dem kompletten Heimverzeichnis des Benutzers wird das Archiv home_jan06 erstellt. Damit Sie beim Zurückspielen der Daten flexibler sind, sollten Sie einen relativen Verzeichnispfad angeben:
cd Verzeichnis ; tar cf Archiv_Name .
Im Beispiel:
user$ cd ; tar cf home_jan06 .
Hierfür steht Ihnen für das relative Verzeichnis auch die Option –C Verzeichnis zur Verfügung:
tar cf Archiv_Name -C Verzeichnis .
Wollen Sie die Dateien und Verzeichnisse des Archivs wiederherstellen, lautet der gängige Befehl hierzu wie folgt:
tar xf Archiv_Name
Um auf unser Beispiel zurückzukommen:
user$ tar xf home_jan06
Wollen Sie einzelne Dateien aus einem Archiv wiederherstellen, so ist dies auch kein allzu großer Aufwand:
user$ tar xf home_jan06 datei1 datei2 …
Beachten Sie allerdings, wie Sie die Datei ins Archiv gesichert haben (relativer oder absoluter Pfad). Wollen Sie bspw. die Datei meinbuch.cpio mit dem relativen Pfad wiederherstellen, so können Sie dies wie folgt tun:
user$ tar xf meinbuch_jan06 ./meinbuch.cpio
Ein häufiger Fehler, wenn etwas mit tar nicht klappt, ist eine falsche Pfadangabe. Man sollte daher immer überlegen, wo liegt das Archiv, wo soll rückgesichert werden und wie wurden die Dateien ins Archiv aufgenommen (absoluter oder relativer Pfad).
Wollen Sie außerdem mitverfolgen, was beim Erstellen oder Auspacken eines Archivs alles passiert, sollten Sie die Option v verwenden. Hierbei können Sie außerdem gleich erkennen, ob Sie die Dateien mit dem absoluten oder relativen Pfad gesichert haben.
# neues Archiv erzeugen, mit Ausgabe aller Aktionen tar cvf Archiv_Name Verzeichnis # Archiv zurückspielen, mit Ausgabe aller Aktionen tar xvf Archiv_Name
Den Inhalt eines Archivs können Sie mit der Option t ansehen:
tar tf Archiv_Name
In unserem Beispiel:
user$ tar tf home_jan06 ./ ./Ubuntubuch ./Ubuntubuch/kapitel_1.tex …
Hier wurde also der relative Pfadname verwendet. Wollen Sie ein ganzes Verzeichnis auf Diskette sichern, erledigen Sie dies folgendermaßen:
user$ tar cf /dev/fd0 Ubuntubuch
Hier kopieren Sie das ganze Verzeichnis auf eine Diskette. Zurückspielen können Sie das Ganze wieder wie folgt:
user$ tar xvf /dev/fd0 Ubuntubuch
Wollen Sie einen kompletten Verzeichnisbaum mit Kompression archivieren (bspw. mit gzip), gehen Sie so vor:
user$ tar czvf Ubuntubuch_jan06.tgz Ubuntubuch
Dank der Option z wird jetzt das ganze Archiv auch noch komprimiert.
Ansehen können Sie sich das komprimierte Archiv weiterhin mit der Option t:
user$ tar tzf Ubuntubuch_jan06.tgz Ubuntubuch Ubuntuch/ Ubuntubuch/kapitel_1.tex …
Hier wurde also der absolute Pfadname verwendet. Entpacken und wieder einspielen können Sie das komprimierte Archiv wieder mit (mit Meldungen):
user$ tar xzvf Ubuntubuch_jan06.tgz Ubuntubuch
Wollen Sie allerdings nur Dateien mit der Endung ».tex« aus dem Archiv extrahieren, können Sie dies so vornehmen:
user$ tar xzf Ubuntubuch_jan06.tgz '*.tex'
zip/unzip – (De-)Komprimieren von Dateien
Mit zip können Sie einzelne Dateien bis hin zu ganzen Verzeichnissen komprimieren und archivieren. Besonders gern werden zip und unzip allerdings verwendet, weil diese gänzlich zu den Versionen von Windows und DOS kompatibel sind. Wer sich also immer schon geärgert hat, dass sein Mailanhang wieder einmal etwas im ZIP-Format enthält, kann hier auf unzip zurückgreifen. Ein ZIP-Archiv aus mehreren Dateien können Sie so erstellen:
user$ zip files.zip file1.txt file2.txt file3.txt adding: file1.txt (deflated 56\%) adding: file2.txt (deflated 46\%) adding: file3.txt (deflated 24\%)
Hier packen und komprimieren Sie die Dateien zu einem Archiv namens files.zip. Wollen Sie eine neue Datei zum Archiv hinzufügen, nichts einfacher als das:
user$ zip files.zip hallo.c adding: hallo.c (deflated 3\%)
Möchten Sie alle Dateien des Archivs in das aktuelle Arbeitsverzeichnis entpacken, dann tun Sie dies so:
user$ unzip files.zip Archive: files.zip inflating: file1.txt inflating: file2.txt inflating: file3.txt inflating: hallo.c
Wenn Sie eine ganze Verzeichnishierarchie packen und komprimieren wollen, so müssen Sie die Option -r (rekursive) verwenden:
user$ zip -r Ubuntubuch.zip $HOME/Ubuntubuch …
Entpacken können Sie das Archiv wieder wie gewohnt mittels unzip.
Übersicht zu den Packprogrammen
In der folgenden Tabelle wird eine kurze Übersicht zu den Dateiendungen und den zugehörigen (De-)Komprimierungsprogrammen gegeben.
Endung | gepackt mit | entpackt mit |
*.bz und *.bz2 | bzip2 | bzip2 |
*.gz | gzip | gzip, gunzip oder zcat |
*.zip | Info-Zip, PKZip, zip | Info-Unzip, PKUnzip, unzip, gunzip (eineDatei) |
*.tar | tar | tar |
*.tbz | tar und bzip2 | tar und bzip2 |
*.tgz; *.tar.gz | tar und gzip | tar und g(un)zip |
*.Z | compress | uncompress; gunzip |
*.tar.Z | tar und compress | tar und uncompress |
*.pak | pack | unpack, gunzip |
X.2.8 Systeminformationen
cal – zeigt einen Kalender an
Das Kommando cal zeigt Ihnen einen Kalender wie folgt an:
user$ cal Januar 2006 So Mo Di Mi Do Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Ohne Angaben wird immer der aktuelle Monat aufgeführt. Wünschen Sie einen Kalender zu einem bestimmten Monat und Jahr, müssen Sie diese Syntax verwenden:
cal Monat Jahr
Wobei »Monat« und »Jahr« jeweils numerisch angegeben werden müssen. Den Kalender für April 2023 erhalten Sie so:
user$ cal 4 2023 April 2023 So Mo Di Mi Do Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
date – Datum und Uhrzeit
Mit date lesen bzw. setzen Sie die Linux-Systemzeit. date wird weniger in der Kommandozeile als vielmehr in Shell-Skripten eingesetzt. date ist im Grunde »nur« ein Frontend für die C-Bibliotheksfunktion strftime(3). Dabei leitet man durch ein Pluszeichen einen Formatstring ein, der durch entsprechende Datumsangaben ergänzt wird. Die Ausgabe erfolgt anschließend auf die Standardausgabe. Ein Beispiel:
user$ date +'\%Y-\%m-\%d' 2006–01–04
uname – Rechnername, Architektur und OS
Mit uname können Sie Betriebssystem, Rechnernamen, OS-Release und Version, Plattform, Prozessortyp und Hardwareklasse des Rechners anzeigen lassen. Hierzu rufen Sie uname mit der Option -a auf:
user$ uname -a Linux august 2.6.12–9-k7-smp #1 SMP Mon Oct 10 13:58:43 BST 2005 i686 GNU/Linux
uptime – Laufzeit des Rechners
Das Kommando uptime zeigt die Zeit an, wie lange der Rechner bereits läuft.
user$ uptime 15:07:38 up 3:36, 2 users, load average: …
24.2.9 System-Kommandos
dmesg – letzte Kernel-Boot-Meldungen
Wollen Sie sich die Kernel-Meldungen des letzten Bootvorgangs ansehen, können Sie sich diese mit dem Kommando dmesg anzeigen lassen. Dabei können Sie feststellen, welche Hardware beim Booten erkannt und initialisiert wurde. dmesg wird gern zur Diagnose verwendet, ob eine interne bzw. externe Hardware auch vom Betriebssystem korrekt erkannt wurde. Natürlich setzt dies auch entsprechende Kenntnisse der Hardware auf dem Computer und ihrer Bezeichnungen voraus.
halt – alle laufenden Prozesse beenden
Mit dem Kommando halt beenden Sie alle laufenden Prozesse. Damit wird das System komplett angehalten und reagiert auf keine Eingabe mehr. Selbstverständlich ist solch ein Befehl nur vom root ausführbar. Meistens ist halt ein Verweis auf shutdown.
reboot – System neu starten
Mit reboot werden alle noch laufenden Prozess auf dem System unverzüglich beendet und das System neu gestartet. Bei einem System im Runlevel 1 bis 5 wird hierzu ein shutdown aufgerufen. Selbstverständlich bleibt auch dieses Kommando dem root vorbehalten.
shutdown – System herunterfahren
Mit shutdown können Sie (root-Rechte vorausgesetzt) das System herunterfahren. Mit den Optionen -r und -h kann man zwischen einem »Halt« des Systems und einem »Reboot« auswählen. Damit das System ordentlich gestoppt wird, wird jedem Prozess zunächst das Signal SIGTERM gesendet, womit sich ein Prozess ordentlich beenden kann. Nach einer bestimmten Zeit (Standard ist zwei Sekunden oder einstellbar mit -t <SEKUNDEN>) wird das Signal SIGKILL an die Prozesse gesendet. Natürlich werden auch die Dateisysteme ordentlich abgehängt (umount), sync ausgeführt und in einen anderen Runlevel gewechselt. Die Syntax zu shutdown lautet:
shutdown [Optionen] Zeitpunkt [Nachricht]
Den Zeitpunkt zum Ausführen des shutdown-Kommandos können Sie entweder im Format hh:mm als Uhrzeit übergeben (bspw. 23:30) oder Sie können eine Angabe wie +m vornehmen, womit Sie die noch verbleibenden Minuten angeben (bspw. wird mit +5 in fünf Minuten der shutdown-Befehl ausgeführt). Ein sofortiger shutdown kann auch mit now bewirkt werden. Das Kommando shutdown benachrichtigt außerdem alle Benutzer, dass das System bald heruntergefahren wird, und lässt somit auch keine Neuanmeldungen zu. Hier können Sie eine eigene Nachricht an die Benutzer senden. Folgende Optionen stehen Ihnen zur Verfügung:
Option | Bedeutung |
-t Sekunden | Zeitspanne in »Sekunden«, die zwischen den SIGTERM- und SIGKILL-Signalen zum Beenden von Prozessen gewartet wird |
-k | Hier wird kein Shutdown ausgeführt, sondern es werden nur Meldungen an alle anderen Benutzer gesendet. |
-r | (reboot) Neustart nach dem Herunterfahren |
-h | System anhalten nach dem Herunterfahren |
-f | Beim nächsten Systemstart keinen Dateisystem-Check ausführen |
-F | Beim nächsten Systemstart Dateisystem-Check ausführen |
-c | Wenn möglich, wird der laufende Shutdown abgebrochen. |
X.2.10 Druckeradministration
Die Druckerbefehle werden aus Platzgründen nur mit Kommando und der jeweiligen Bedeutung beschrieben. Näheres müssen Sie hierbei den entsprechenden man-Seiten entnehmen.
Kommando | Bedeutung |
accept | Druckerwarteschlange auf empfangsbereit setzen |
cancel | Druckaufträge stornieren |
disable | Drucker deaktivieren |
enable | Drucker aktivieren |
lp | Ausgabe auf dem Drucker mit dem Print-Spooler |
lpadmin | Verwaltungsprogramm für das CUPS-Print-Spooler-System |
lpc | Steuerung von Druckern |
lphelp | Optionen eines Druckers ausgeben |
Kommando | Bedeutung |
lpmove | Druckerauftrag zu einem anderen Drucker verschieben |
lpq | Druckerwarteschlange anzeigen |
lpr | Dateien auf den Drucker ausgeben |
lprm | Druckaufträge in der Warteschlange stornieren |
lpstat | Status der Aufträge anzeigen |
reject | Warteschlange für weitere Aufträge sperren |
24.2.11 Netzwerkbefehle
Netzwerkbefehle erfordern ein tieferes Verständnis. Wenn Sie als Administrator mit Begriffen wie IP-Adresse, MAC-Adresse, DNS, FTP, SSH usw. nichts anfangen können, wäre eine fortführende Lektüre wichtig.
arp – Ausgeben von MAC-Adressen
Wenn Sie die Tabelle mit den MAC-Adressen der kontaktierten Rechner benötigen, können Sie das Kommandos arp verwenden. Ein Beispiel:
user$ arp -a fritz.box (192.168.0.254) auf 00:04:0E:A5:F5:4E [ether] auf eth0
Im obigen Fall ist der Rechner über eine DSL-Modem/Routerkombination an das Internet angeschlossen, eine so genannte FritzBox. Die MAC-Adresse ist hierbei die sechsstellige Hexadezimalzahl
»00:04:0E:A5: F5:4E«. Benötigen Sie hingegen die MAC-Nummer Ihrer eigenen Netzwerkkarte, so können Sie diese mit ifconfig ermitteln:
user$ ifconfig -a eth0 Protokoll:Ethernet Hardware Adresse 00:0E:A6:86:03:CF …
In der Zeile »eth0« finden Sie hierbei die entsprechende MAC-Adresse unter »Hardware Adresse«.
ftp – Dateien übertragen
Mit Hilfe von ftp (File Transfer Protocol) können Sie Dateien innerhalb eines Netzwerks (bspw. Internet) zwischen verschiedenen Rechnern transportieren.
Da ftp über eine Menge Features und Funktionen verfügt, soll hier nur auf den Hausgebrauch eingegangen werden, und zwar wie man Daten von einem entfernten Rechner abholt und hinbringt. Zunächst müssen Sie sich auf dem Server einloggen. Dies geschieht üblicherweise mit
ftp Server_Name
Nachdem ftp eine Verbindung mit dem Server aufgenommen hat, werden Sie aufgefordert, Ihren Benutzernamen und anschließend das Passwort einzugeben. Wenn alles korrekt war, befindet sich vor dem Prompt ftp> und wartet auf weitere Anweisungen. Jetzt können Sie im Eingabeprompt Folgendes machen:
- Gewünschtes Verzeichnis durchsuchen: cd, dir, lcd (lokales Verzeichnis)
- FTP-Parameter einstellen: type binary, hash, prompt
- Datei(en) abholen: get, mget
- Datei(en) hinbringen: put, mput
- Abmelden: bye oder exit
Natürlich bietet ftp weitaus mehr Befehle als diese an, aber alles andere würde hier über den Rahmen des Buchs hinausgehen. Im Folgenden soll der Umgang mit FTP anhand eines Beispiels erläutert werden.
Zunächst loggen Sie sich per FTP auf einen Server ein:
user$ ftp upload.meinserver.de Connected to upload.meinserver.de. 220 Welcome to FTP service. Name (upload.meinserver.de:hatt): <Mein Login> 331 Please specify the password. Password: 230 Login successful. Have fun. Remote system type is UNIX. Using binary mode to transfer files. ftp>
Zunächst werden Sie sich wohl das Inhaltverzeichnis ansehen wollen. Hierzu können Sie den Befehl dir (der auf Linux-Systemen meistens dem Aufruf von [ls -l entspricht) zum Auflisten verwenden:
user$ ftp> dir 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 9 1092 1091 4096 Dec 17 15:31 . drwxr-xr-x 8 0 0 4096 Mar 07 2005 .. drwxr-xr-x 5 1092 1091 4096 Sep 04 2001 OLD drwxr-xr-x 3 1092 1091 4096 Sep 03 2001 counter drwxr-xr-x 8 1092 1091 4096 Sep 02 2001 daten …
Wollen Sie nun in ein Verzeichnis wechseln, können Sie auch hier das schon bekannte Kommando cd verwenden. Ebenso sieht es aus, wenn Sie das aktuelle Arbeitsverzeichnis wissen wollen, in dem Sie sich gerade befinden. Hier leistet das bekannte pwd seine Dienste. Das aktuelle Verzeichnis auf dem lokalen Rechner können Sie mit dem Kommando lcd wechseln. Sie können übrigens auch die Befehle auf Ihrem lokalen Rechner verwenden, wenn Sie ein !-Zeichen davor setzen. Hierzu ein Beispiel, das die Befehle nochmals demonstriert.
ftp> pwd 257 "/htdocs" ftp> cd daten 250 Directory successfully changed. ftp> pwd 257 "/htdocs/daten" ftp> !pwd /home/hatt ftp> lcd text Local directory now /home/hatt/text ftp>
Hier befinden wir uns auf dem Remoterechner im Verzeichnis daten, lokal sind wir mittels lcd in das Verzeichnis text gewechselt. Im entfernten Verzeichnis soll sich die Datei server.txt befinden, die wir auf den Server befördern wollen. Das geschieht mit dem Kommando get:
user$ ftp> get server.txt local: server.txt remote: server.txt 200 PORT command successful 150 Opening BINARY mode data connection server.txt (3231 bytes) 226 Transfer complete.
Und schon haben wir die Datei server.txt auf den lokalen Rechner ins Verzeichnis text kopiert. Wollen Sie mehrere Dateien oder gar ganze Verzeichnisse holen, müssen Sie mget verwenden. Hierbei stehen Ihnen auch die Wildcard-Zeichen * und ? zur Verfügung. Da mget Sie bei mehreren Dateien nicht jedes Mal fragt, ob Sie diese wirklich holen wollen, können Sie den interaktiven Modus mit prompt abstellen.
Haben Sie jetzt die Datei server.txt bearbeitet und wollen diese wieder hochladen, verwenden Sie put (oder bei mehreren Dateien mput).
ftp> put server.txt local: server.txt remote: server.txt 200 PORT command successful 150 Opening BINARY mode data connection for server.txt 226 Transfer complete. 3231 bytes sent in 0.000106 secs
Damit sollten Sie erfolgreich Dateien ein- und auschecken können. Sie verlassen das System wieder mittels quit, bye oder exit.
Bedenken Sie, dass ftp nicht ganz sicher ist, da Sie bei der Authentifizierung das Passwort unverschlüsselt übertragen.
hostname – Rechnername ermitteln
Das Kommando hostname können Sie verwenden, um den Namen des lokalen Rechners anzuzeigen bzw. zu setzen oder zu verändern. So ein Name hat eigentlich erst im Netzwerkbetrieb seine echte Bedeutung. Im Netz besteht ein vollständiger Rechnername (Fully Qualified Domain Name) aus einem Eigennamen und einem Domainnamen. Der (DNS-) Domainname bezeichnet das lokale Netz, an dem der Rechner hängt.
Ohne Angabe einer Option wird der vollständige Rechnername ausgegeben. Mit der Option -s geben Sie nur den Eigennamen des Rechners aus und mit
-d nur den (DNS-)Domainnamen des lokalen Netzes.
user$ hostname ripley.nostromo.com user$ hostname -s ripley user$ hostname -d nostromo.com
ifconfig – Netzwerkzugang konfigurieren
Mit dem Kommando ifconfig kann man die Einstellungen einer Netzwerk-Schnittstelle abfragen oder setzen. Alle Einstellungen können Sie sich mit der Option -a anzeigen lassen, dabei werden auch die inaktiven Schnittstellen aufgelistet. Die Syntax zu ifconfig:
ifconfig Schnittstelle [Addresse [Parameter]]
Dabei geben Sie den Namen der zu konfigurierenden Schnittstelle an. Befindet sich bspw. auf Ihrem Rechner eine Netzwerkkarte, so lautet unter Linux die Schnittstelle hierzu »eth0«, die zweite Netzwerkkarte im Rechner (sofern eine vorhanden ist) wird mit »eth1« angesprochen. Die »Adresse« ist die IP-Adresse, die der Schnittstelle zugewiesen werden soll. Hierbei kann man die Dezimalnotation (xxx.xxx.xxx.xxx) verwenden oder einen Namen, den ifconfig in /etc/host nachschlägt.
Verwenden Sie ifconfig ohne die Option -a, um sich einen Überblick zu verschaffen, dann werden die inaktiven Schnittstellen nicht mit angezeigt. Der Aufruf für die Schnittstelle zu Ethernetkarte »eth0« sieht beispielsweise wie folgt aus:
user$ ifconfig eth0 Link encap:Ethernet HWaddr 00:02:2A:D4:2C:EB inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:80 errors:0 dropped:0 overruns:0 frame:0 TX packets:59 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:8656 (8.4 KiB) TX bytes:8409 (8.2 KiB) Interrupt:11 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:560 (560.0 b) TX bytes:560 (560.0 b) …
Wenn IPv6 konfiguriert ist, kommt noch die IPv6-Adresse dazu.
Aus der Ausgabe kann man entnehmen, dass auf dieser Netzwerkkarte 59 Pakete gesendet (TX) und 80 empfangen (RX) wurden. Die maximale Größe einzelner Pakete beträgt 1500 Byte (MTU). Die MAC-Adresse (Hardwareadresse), die unsere Netzwerkkarte eindeutig identifiziert (außer diese wird manipuliert) lautet »00:02:2A:D4:2C:EB«.
Wollen Sie eine Schnittstelle ein- bzw. ausschalten, können Sie dies mit den zusätzlichen Parametern up (für Einschalten) und down (für Abschalten) vornehmen. Als Beispiel wieder die Netzwerkkarte mit dem Namen
»eth0« als Schnittstelle:
user$ sudo ifconfig eth0 down
Hier haben Sie die Netzwerkkarte »eth0« abgeschaltet. Einschalten können Sie diese folgendermaßen:
user$ sudo ifconfig eth0 up
Eine IP-Adresse stellen Sie ein oder verändern Sie ebenfalls mit ifconfig:
user$ sudo ifconfig eth0 192.18.19.91
Wollen Sie bei der Schnittstelle die Netzmaske und Broadcast verändern, so ist dies mit ifconfig wenig Arbeit (unterlassen Sie es, wenn Sie nicht genau wissen, was die Netzmaske und Broadcast sind):
user$ sudo ifconfig eth0 10.25.38.41 netmask \ 255.255.255.0 broadcast 10.25.38.255
Damit weisen Sie der Netzwerkkarte die IP-Adresse 10.25.38.41 aus dem Netz
10.25.38.xxx zu. Mit »netmask« geben Sie an, wie groß das Netz ist (hier ein Netzwerk der Klasse C).
mail/mailx – E-Mails schreiben und empfangen
Mit dem Kommando mail können Sie aus einem Shell-Skript heraus E-Mails versenden. Zuvor muss für Ubuntu allerdings noch die Postfix-Konfiguration angepasst werden, Näheres entnehmen Sie der Dokumentation zu Postfix. Mithilfe der Option -s können Sie dann eine einfache Textmail mit Betreff (-s = Subject) an eine Adresse schicken, beispielsweise:
user$ echo "Hallo" | mail -s "Betreff" rhatt@gmx.de
Da nicht alle mail-Kommandos die Option -s für einen Betreff haben, können Sie gegebenenfalls auch auf mailx oder Mail (mit großen »M«) zurückgreifen, die auf einigen Systemen vorhanden sind. Mit cat können Sie natürlich auch den Inhalt einer ganzen Datei an die Mailadresse senden:
user$ cat datei.txt | mail -s "Ein Textdatei" \ rhatt@gmx.de
Dabei kann man auch die Ausgaben eines Kommandos per mail an eine Adresse versenden:
user$ ps -ef | mail -s "Prozesse 12Uhr" \ rhatt@gmx.de
Sinnvoll kann dies z. B. sein, wenn auf einem System ein bestimmtes Limit überschritten wurde. Dann können Sie sich (oder einem anderen Benutzer) eine Nachricht zukommen lassen. Ebenso kann überprüft werden, ob ein Server dauerhaft verfügbar ist. Testen Sie etwa stündlich (bspw. mit cron) mittels nmap (hier kann man nicht nur nachsehen, ob die Netzwerkkarte das UDP-Paket zurückschickt, sondern auch direkt nachschauen, ob der Port des betreffenden Dienstes noch offen ist), ob der Server erreichbar ist, und ist er es einmal nicht, können Sie sich hierbei eine Nachricht zukommen lassen.
Zusätzliche Optionen, die Sie mit mail bzw. mailx verwenden können, sind:
Option | Bedeutung |
-s Betreff | Hier können Sie den Betreff (Subject) der E-Mail angeben. |
-c adresse | Diese Adresse bekommt eine Kopie der Mail. |
-b adresse | Diese Adresse bekommt eine blind carbon copy der Mail. |
netstat – Statusinformationen über das Netzwerk
Für die Anwendung von netstat gibt es viele Möglichkeiten. Mit einem einfachen Aufruf von netstat zeigen Sie den Zustand einer bestehenden Netzwerkverbindung an. Neben der Überprüfung von Netzwerkverbindungen können Sie mit netstat Routentabellen, Statistiken zu Schnittstellen, maskierte Verbindungen und noch vieles mehr anzeigen lassen. In der Praxis lässt sich somit ohne Problem die IP oder der Port eines ICQ-Users (Opfer) ermitteln oder ob ein Rechner mit einen Trojaner infiziert ist. Hier einige Beispiele:
user$ netstat -nr
Hiermit lassen Sie die Routing-Tabelle (-r) des Kernels ausgeben.
user$ netstat -i
Mit der Option -i erhalten Sie die Schnittstellenstatistik.
user$ netstat -ta
Mit -ta erhalten Sie die Anzeige aller Verbindungen. Die Option
-t steht dabei für TCP. Mit -u, -w bzw.
-x zeigen Sie die UDP-, RAW- bzw. UNIX-Sockets an. Mit -a werden dabei auch die Sockets angezeigt, die noch auf eine Verbindung warten.
nslookup (host/dig) – DNS-Server abfragen
Mit nslookup können Sie aus dem Domainnamen eine IP-Adresse bzw. die IP-Adresse zu einem Domainnamen ermitteln. Zur Auflösung des Namens wird gewöhnlich der DNS-Server verwendet.
Bei der Verwendung von nslookup werden Sie lesen, dassnslookup künftig von den Kommandos host oder dig abgelöst wird.
Hier nslookup und host bei der Ausführung über einen vorgeschalteten Router (IP: 192.168.0.254):
user$ nslookup www.google.de Server: 192.168.0.254 Address: 192.168.0.254#53 Non-authoritative answer: … Name: www.l.google.com Address: 66.249.93.104 Name: www.l.google.com Address: 66.249.93.99
user$ host www.google.de www.google.de is an alias for www.google.com. www.google.com is an alias for www.l.google.com. www.l.google.com has address 64.233.183.104
ping – Verbindung zu anderem Rechner testen
Wollen Sie die Netzwerkverbindung zu einem anderen Rechner testen oder einfach nur den lokalen TCP/IP-Stack überprüfen, können Sie das Kommando ping (Paket Internet Groper) verwenden. Die Syntax lautet:
ping Host
ping überprüft dabei, ob »Host« (IP-Adresse oder Domainname) antwortet. ping bietet noch eine Menge Optionen an, die noch mehr Infos liefern, die allerdings hier nicht genauer erläutert werden. Zur Überprüfung sendet ping ein ICMP-Paket vom Typ ICMP Echo Request an die Netzwerkstation. Hat die Netzwerkstation das Paket empfangen, sendet es ebenfalls ein ICMP-Paket, allerdings vom Typ ICMP Echo Reply, zurück.
user$ ping -c3 www.google.de PING www.l.google.com (66.249.93.104) 56(84) bytes 64 bytes from 66.249.93.104: icmp_seq=1 time=74.8 ms 64 bytes from 66.249.93.104: icmp_seq=2 time=75.3 ms 64 bytes from 66.249.93.104: icmp_seq=3 time=75.5 ms --- www.l.google.com ping statistics --- 3 packets transmitted, 3 received, 0\% packet loss, time 2002ms rtt min/avg/max/mdev = 74.831/75.249/75.575/0.443 ms
Hier wurden drei Pakete (mit der Option -c kann die Anzahl der Pakete angegeben werden) an http://www.google.de gesendet und wieder erfolgreich empfangen, wie aus der Zusammenfassung am Ende zu entnehmen ist. Rufen Sie ping hingegen ohne eine Option auf
user$ ping www.google.de
so müssen Sie selbst für eine Beendigung des Datenaustausches zwischen den Rechnern sorgen. Ein einfaches (Strg) + (C) tut da seinen Dienst und man erhält ebenfalls wieder eine Zusammenfassung. Neben der Möglichkeit, auf die Verfügbarkeit eines Rechners und des lokalen TCP/IP-Stacks zu prüfen (ping localhost), können Sie außerdem auch die Laufzeit von Paketen vom Sender zum Empfänger ermitteln. Hierzu wird die Zeit halbiert, bis das »Reply« eintrifft.
Die r-Kommandos (rcp, rlogin, rsh)
Aus Sicherheitsgründen sei empfohlen, diese Tools nicht mehr einzusetzen und stattdessen auf die mittlerweile sichereren Alternativen ssh und scp zu setzen. Es fängt schon damit an, dass hier das Passwort beim Einloggen im Klartext, ohne jede Verschlüsselung, übertragen wird. Bedenken Sie, dass ein unverschlüsseltes Passwort, das zwischen zwei Rechnern im Internet übertragen wird, jederzeit (bspw. mit einem »Sniffer«) abgefangen und mitgelesen werden kann. Für Passwörter gilt im Allgemeinen, dass man diese niemals im Netz unverschlüsselt übertragen sollte. Da es mittlerweile Möglichkeiten zur Passwortübertragung mit der Secure Shell (ssh) gibt, haben die r-Kommandos eigentlich keine Berechtigung mehr.
Schlimmer noch, für die Befehle rsh und rcp war auf den Zielrechnern nicht einmal ein Passwort nötig. Eine Authentifizierung erfolgte hierbei über die Datei /etc/hosts.equiv und /.rhosts. Darin wurden einzelne Rechner eingetragen, die als vertrauenswürdig empfunden wurden und so die Passwort-Authentifizierung umgehen konnten.
ssh – sichere Shell auf anderem Rechner starten
ssh (Secure Shell) zählt mittlerweile zu einem der wichtigsten Dienste überhaupt. Mit diesem Dienst ist es möglich, eine verschlüsselte Verbindung zwischen zwei Rechnern aufzubauen. ssh wurde aus der Motivation heraus entwickelt, sichere Alternativen zu telnet und den r-Kommandos zu schaffen.
Wenn Sie zum ersten Mal eine Verbindung zu einem anderen Rechner herstellen, bekommen Sie gewöhnlich eine Warnung, in der ssh nachfragt, ob Sie dem anderen Rechner vertrauen wollen. Wenn Sie mit »yes« antworten, speichert ssh den Namen und den RSA-Fingerprint (dies ist ein Code zur eindeutigen Identifizierung des anderen Rechners) in der Datei
/.ssh/known_hosts. Beim nächsten Starten von ssh erfolgt diese Abfrage dann nicht mehr.
Im nächsten Schritt erfolgt die Passwortabfrage, die verschlüsselt übertragen wird. Bei korrekter Eingabe des Passworts beginnt die Sitzung am anderen Rechner (als hätte man diesen Rechner vor sich). Die Syntax:
ssh -l Loginname Rechnername
Noch ein paar Zeilen für die ganz Ängstlichen: Für jede Verbindung über ssh wird zwischen den Rechnern immer ein neuer Sitzungsschlüssel ausgehandelt. Will man einen solchen Schlüssel knacken, benötigt der Angreifer unglaublich viel Zeit. Sobald Sie sich ausloggen, müsste der Angreifer erneut versuchen, den Schlüssel zu knacken. Dies natürlich nur rein theoretisch, denn hierbei handelt es sich immerhin um Schlüssel wie RSA, BLOWFISH, IDEA und TRIPLEDES, zwischen denen man hier wählen kann. Alle diese Schlüssel gelten als sehr sicher.
scp – Dateien per ssh kopieren
Das Kommando scp ist Teil einer ssh-Installation, mit der man Dateien sicher zwischen unterschiedlichen Rechnern kopieren kann. scp funktioniert genauso wie das lokale cp. Der einzige Unterschied ist natürlich die Angabe der Pfade auf den entfernten Rechnern. Dabei sieht die Verwendung des Rechnernamens wie folgt aus:
benutzer@rechner:/verzeichnis/zum/ziel
Um auf einen Account meinserver.de zu gelangen, dessen Benutzername
»meinlogin« lautet, ist folgendermaßen zu verfahren:
user$ scp datei.txt meinlogin@meinserver.de:~ meinlogin@meinserver.de's password:******** datei.txt 100\% 3231 3.2KB/s 00:00 user$ scp meinlogin@meinserver.de:~/bilder/bild.gif \ $HOME meinlogin@meinserver.de's password:******** baum.gif 100\% 8583 8.4KB/s 00:00
Zuerst wurde die Datei datei.txt aus dem aktuellen lokalen Verzeichnis ins Heimverzeichnis von meinserver.de kopiert (/home/mein login). Anschließend wurde aus dem Verzeichnis /home/meinlogin/ bilder die GIF-Datei bild.gif auf meinen lokalen Rechner kopiert. scp ist in der Tat eine interessante Lösung, um Dateien auf mehreren Rechnern mit einem Skript zu kopieren.
Was allerdings bei der Skriptausführung stören dürfte (besonders wenn es automatisch geschehen sollte), ist die Passwortabfrage (hierbei würde der Prozess angehalten). Hierzu bietet es sich an, sich mithilfe eines asymmetrischen Verschlüsselungsverfahrens ein Login ohne Passwort zu verschaffen. Dazu stellt man am besten auf dem Clientrechner mit dem Programm ssh-keygen ein entsprechendes Schlüsselpaar (hier mit einem RSA-Schlüssel) bereit:
user$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/hatt/.ssh/id_rsa): (Enter) Enter passphrase (empty for no passphrase): (Enter) Enter same passphrase again: (Enter) Your identification has been saved in /home/hatt/.ssh/id_rsa. Your public key has been saved in /home/hatt/.ssh/id_rsa.pub. The key fingerprint is: 46:85:12:80:9d:a7:62:01:18:0f:1c:a0:27:61:a2:94 hatt@august
Hier wurden zwei RSA-Schlüssel ohne Passphrase erstellt. Jetzt haben Sie zwei Schlüssel, eine privaten (id_rsa.) und einen öffentlichen (id_ rsa.pub). Damit Sie jetzt alle ssh-Aktionen ohne Passwort durchführen können, müssen Sie den öffentlichen Schlüssel nur noch auf den Benutzeraccount des Servers hochladen.
user$ scp .ssh/id_rsa.pub \ meinlogin@meinserver.de:~/.ssh/ meinlogin@meinserver.de.de's password:******** id_rsa.pub 100\% 219 0.2KB/s 00:00
Jetzt nochmals einloggen und die Datei id_rsa.pub an die Datei
~/.ssh/authorized_keys hängen:
user$ ssh meinlogin@meinserver.de meinlogin@meinserver.de's password:******** … user$ cd ~/.ssh user$ ls id_rsa.pub known_hosts user$ cat id_rsa.pub >> authorized_keys
Nach erneutem Einloggen über ssh oder dem Kopieren mit scp sollte die Passwortabfrage der Vergangenheit angehören.
rsync – Replizieren von Dateien und Verzeichnissen
rsync wird verwendet, um Dateien bzw. ganze Verzeichnis(bäume) zu synchronisieren. Hierbei kann sowohl eine lokale als auch eine entfernte Synchronisation vorgenommen werden.
Der Ausdruck »synchronisieren« ist eigentlich rein syntaktisch nicht richtig. Man kann zwar bei einem Verzeichnisbaum »X« Daten hinzufügen, so dass dieser exakt denselben Inhalt erhält wie der Verzeichnisbaum »Y«. Dies funktioniert allerdings umgekehrt gleichzeitig nicht. Man spricht hierbei vom Replizieren. Die Syntax zu rsync lautet:
rsync [Optionen] Ziel Quelle
Einige Beispiele:
user$ rsync -avzb -e ssh meinserver.de:/ \ /home/hatt/backups/
Damit wird die Webseite im Internet meinserver.de mit dem lokalen Verzeichnis /home/hatt/backups synchronisiert. Mit a verwenden Sie den archive-Modus, mit b werden Backups erstellt und mit v (für verbose) wird rsync etwas gesprächiger. Durch die Option z werden die Daten komprimiert übertragen. Außerdem wird mit der Option -e und ssh eine verschlüsselte Datenübertragung verwendet.
Geben Sie bei der Quelle als letztes Zeichen einen Slash (/) an, wird dieses Verzeichnis nicht mitkopiert, sondern nur der darin enthaltene Inhalt, beispielsweise:
user$ rsync -av /home/hatt/ubuntubuch/ \ /home/hatt/backups
Hier wird der Inhalt von /home/hatt/ubuntubuch nach
/home/hatt /backups kopiert. Würden Sie hingegen Folgendes schreiben
user$ rsync -av /home/hatt/ubuntubuch \ /home/hatt/backups
so würde in /home/hatt/backups das Verzeichnis ubuntubuch angelegt (/home/hatt/backups/ubuntubuch/) und alles dorthin kopiert. Das hat schon viele einige Nerven gekostet.
Es folgt nun ein Überblick zu einigen Optionen von rsync. Weiterführende Informationen zu rsync finden Sie auf der entsprechenden Webseite von rsync (http://rsync.samba.org) oder wie üblich auf der Manual-Seite.
Option | Bedeutung |
-a | (archive mode): Kopiert alle Unterverzeichnisse, mitsamt Attributen (Symlinks, Rechte, Dateidatum, Gruppe, Devices) und (wenn man root ist) den Eigentümer der Datei(en) |
-v | (verbose): Gibt während der Übertragung eine Liste der übertragenen Dateien aus |
-n | (dry-run): Nichts schreiben, sondern den Vorgang nur simulieren – ideal zum Testen |
-e Programm | Wenn in der Quelle oder dem Ziel ein Doppelpunkt enthalten ist, interpretiert rsync den Teil vor dem Doppelpunkt als Hostnamen und kommuniziert über das mit -e spezifizierte Programm. Gewöhnlich wird hierbei als Programm ssh verwendet. Weitere Parameter können Sie diesem Programm in Anführungszeichen gesetzt übergeben. |
-z | Der Parameter -z bewirkt, dass rsync die Daten komprimiert überträgt. |
--delete --force, --delete-excluded | Damit werden alle Einträge im Zielverzeichnis gelöscht, die im Quellverzeichnis nicht (mehr) vorhanden sind. |
--partial | Wurde die Verbindung zwischen zwei Rechnern getrennt, wird die nicht vollständig empfangene Datei nicht gelöscht. So kann bei einem erneuten rsync die Datenübertragung fortgesetzt werden. |
--exclude=Pattern | Hier kann man Dateien (mit Pattern) angeben, die man ignorieren möchte. Selbstverständlich sind hierbei reguläre Ausdrücke möglich. |
-x | Damit werden alle Dateien auf einem Filesystem ausgeschlossen, die in ein Quellverzeichnis hineingemountet sind. |
traceroute – Route zu einem Rechner verfolgen
traceroute ist ein TCP/IP-Tool, mit dem Informationen darüber ermittelt werden können, welche Computer ein Datenpaket über ein Netzwerk passiert, bis es bei einem bestimmten Host ankommt, z. B.:
user$ traceroute www.heise.de traceroute to www.heise.de (193.99.144.85), 30 hops max, 38 byte packets 1 fritz.box (192.168.0.254) 0.660 ms 6.143 ms 2 217.0.116.165 (217.0.116.165) 32.240 ms 32.623 ms 3 217.0.71.242 (217.0.71.242) 32.934 ms 33.571 ms 4 m-ec1.M.DE.net.DTAG.DE (62.154.28.26) 46.186 ms …
24.2.12 Benutzerkommunikation
wall – Nachrichten an alle Benutzer verschicken
Mit dem Kommando wall senden Sie eine Nachricht an alle aktiven Benutzer auf dem Rechner. Damit ein Benutzer auch Nachrichten empfangen kann, muss dieser mit mesg yes diese Option einschalten. Natürlich kann ein Benutzer das Empfangen von Nachrichten auch mit mesg no abschalten. Nachrichten werden nach einem Aufruf von wall von der Standardeingabe eingelesen und mit der Tastenkombination (Strg) + (D) abgeschlossen und versendet. Gewöhnlich wird wall vom Systemadministrator verwendet, um den Benutzer auf bestimmte Ereignisse, wie etwa das Neustarten des Systems, hinzuweisen.
write – Nachrichten an Benutzer verschicken
Ähnlich wie mit wall können Sie mit write eine Nachricht versenden, allerdings an einen bestimmten oder mehrere Benutzer.
user$ wall Benutzer1 …
Ansonsten gilt bei der Verwendung von write das Gleiche wie für wall. Auch hier wird die von der Standardeingabe eingelesene Nachricht mit (Strg) + (D) beendet und auf der Gegenstelle muss auch hier mesg yes gelten, damit der Benutzer die Nachricht empfangen kann. Natürlich ist es dem Benutzer root gestattet, jedem Benutzer eine Nachricht zu senden, auch wenn dieser das Empfangen von Nachrichten mit mesg no abgeschaltet hat.
mesg – Nachrichten zulassen oder unterbinden
Mit dem Kommando mesg können Sie einem anderen Benutzer erlauben, auf das Terminal (bspw. mittels write oder wall) zu schreiben oder eben dies zu sperren. Rufen Sie mesg ohne Optionen auf, wird so ausgegeben, wie die Zugriffsrechte gesetzt sind y (für yes) und n (für no). Wollen Sie dem Benutzer explizit erlauben, dass er auf Ihre Dialogstation schreiben darf, können Sie dies mit mesg folgendermaßen erreichen:
user$ mesg yes
oder
user$ mesg -y
Wollen Sie hingegen unterbinden, dass jemand Nachrichten auf Ihre Dialogstation ausgibt, wird mesg so verwendet:
user$ mesg no
oder
user$ mesg -n
Beispielsweise:
user$ mesg is n user$ mesg yes user$ mesg ist y
24.2.13 Bildschirm- und Terminalkommandos
clear – Löschen des Bildschirms
Mit dem Kommando clear löschen Sie den Bildschirm, sofern dies möglich ist. Das Kommando sucht in der Umgebung nach dem Terminaltyp und dann in der terminfo-Datenbank, um herauszufinden, wie der Bildschirm für das entsprechende Terminal gelöscht wird.
reset – Zeichensatz wiederherstellen
Mit dem Kommando reset können Sie jedes virtuelle Terminal wieder in einen definierten Zustand (zurück) setzen.
setterm – Terminaleinstellung verändern
Mit setterm können die Terminaleinstellungen wie bspw. die Hintergrund- bzw. Vordergrundfarbe verändert werden. Ruft man setterm ohne Optionen auf, erhält man einen Überblick zu allen möglichen Optionen von setterm. Sie können setterm entweder interaktiv verwenden
user$ setterm -bold on
(hier schalten Sie bspw. die Fettschrift an) oder aber Sie sichern die Einstellungen dauerhaft in der Datei ~/.profile. Einige wichtige Einstellungen von setterm sind:
Verwendung | Bedeutung |
setterm -clear | Löscht den Bildschirm |
setterm -reset | Terminal wieder in einen defnierten Zustand zurückbringen |
setterm -blank n | Bildschirm nach n Minuten Untätigkeit abschalten |
stty – Terminaleinstellung abfragen oder setzen
Mit stty können Sie die Terminaleinstellung abfragen oder verändern. Rufen Sie stty ohne Argumente auf, wird die Leitungsgeschwindigkeit des aktuellen Terminals ausgegeben. Wenn Sie stty mit der Option -a aufrufen, erhalten Sie die aktuelle Terminaleinstellung.
user$ stty -a speed 38400 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 =M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt =^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Die Einstellungen lassen sich häufig schwer beschreiben. Hierzu bedarf es schon einer intensiveren Beschäftigung mit der Funktionsweise zeichenorientierter Gerätetreiber im Kernel und der seriellen Schnittstelle
– was hier allerdings nicht zur Diskussion steht.
Alle Flags, die sich mit stty verändern lassen, können Sie sich mit stty --help auflisten lassen. Viele dieser Flags lassen sich mit einem vorangestellten Minus abschalten und ohne ein Minus (wieder) aktivieren. Wenn Sie beim Ausprobieren der verschiedenen Flags das Terminal nicht mehr vernünftig steuern können, hilft Ihnen das Kommando reset oder setterm -reset, um das Terminal wiederherzustellen. Über
user$ stty -echo
beispielsweise schalten Sie die Ausgabe des Terminals ab und mit
user$ stty echo
stellen Sie die Ausgabe auf dem Bildschirm wieder her. Allerdings müssen Sie hier recht sicher im Umgang mit der Tastatur sein, weil Sie ja zuvor die Ausgabe deaktiviert haben.
tty – Terminalnamen erfragen
Mit tty können Sie den Terminalnamen inklusive Pfad erfragen, der die Standardeingabe entgegennimmt.
user$ tty /dev/pts/1
Verwenden Sie die Option -s, erfolgt keine Ausgabe, vielmehr wird nur der Status gesetzt. Dabei haben diese Werte folgende Bedeutung:
Status | Bedeutung |
0 | Standardeingabe ist ein Terminal. |
1 | Standardeingabe ist kein Terminal. |
2 | Ein unbekannter Fehler ist aufgetreten. |
Ein Beispiel:
user$ tty -s user$ echo $? 0
24.2.14 Online-Hilfen
apropos – nach Schlüsselwörtern suchen
Die Syntax für apropos lautet:
apropos Schlüsselwort
Mit apropos werden alle man-Seiten aufgelistet, in denen sich das Wort »Schlüsselwort« befindet. Selbiges kann auch mit dem Kommando man und der Option -k erreicht werden. Ein Beispiel:
user$ apropos bluetooth /etc/bluetooth/hcid.conf (5) [hcid.conf] - Configuration file for the hcid Bluetooth HCI daemon avctrl (8) – Bluetooth Audio/Video control utility bluepin (1) – bluetooth PIN helper ciptool (1) – Bluetooth Common ISDN Access Profile …
info – GNU-Online-Manual
info ist das Hilfesystem für die bei Linux mitgelieferte GNU-Software:
user$ info Kommando
Die wichtigsten Tasten zum Verwenden der Infoseiten sind:
Taste | Bedeutung |
(____) | Eine Seite nach unten blättern |
(æ___) | Eine Seite nach oben blättern |
(B) | Anfang des info-Textes |
(E) | Ende des info-Textes |
(ÿ) | Zum nächsten Querverweis springen |
(¢) | Querverweis folgen |
(H) | Anleitung zur Bedienung von info |
(?) | Kommandoübersicht von info |
(Q) | info beenden |
man – die traditionelle Onlinehilfe
Mit man geben Sie die Manual-Seiten zu einem entsprechenden Namen aus:
man Name
Die Anzeige der man-Seite erfolgt über einen Pager, was meistens less oder eventuell auch more ist. Den Pager können Sie aber auch mit der Option -P oder der Umgebungsvariablen PAGER selbst bestimmen.
Die man-Seiten werden in verschiedene Kategorien aufgeteilt:
1. | 1. Benutzerkommandos |
2. | 2. Systemaufrufe |
3. | 3. C-Bibliotheksfunktionen |
4. | 4. Beschreibungen der Gerätedateien |
5. | 5. Dateiformate |
6. | 6. Spiele |
7. | 7. Makropakete für die Textformatierer |
8. | 8. Kommandos für den Systemverwalter |
9. | 9. Kernelroutinen |
Die Reihenfolge, in der die Sektionen nach einer Manual-Page durchsucht werden, ist in der Konfigurationsdatei
/etc/man path.config festgelegt. In der MANSEC-Umgebungsvariablen kann jeder User für sich eine andere Reihenfolge bestimmen.
Ebenso sind die Verzeichnisse, in denen nach den man-Seiten gesucht werden soll, in manpath.config festgeschrieben. Da die Datei manpath.config nur von root bearbeitet werden darf, besteht auch hierbei die Möglichkeit, dass der Benutzer mit der Umgebungsvariablen MANPATH ein anderes Verzeichnis angeben kann.
Das Kommando man hat eine Reihe von Optionen, hier die wichtigsten:
- -a
-
- Häufig gibt es gleichnamige man-Seiten in verschiedenen Kategorien. Geben Sie bspw. man sleep ein, wird die erste gefundene Sektion (abhängig von der Reihenfolge, die in manpath.config oder MANSEC angegeben wurde) mit entsprechendem Namen ausgegeben.
-
- Wollen Sie alle man-Seiten zu einem bestimmten Namen bzw. Kommando lesen, so müssen Sie nur die Option -a verwenden. Mit man -a sleep erhalten Sie jetzt alle man-Seiten mit sleep.
- -k Schlüsselwort:
-
- Entspricht apropos Schlüsselwort; damit werden alle man-Seiten ausgegeben, die das Wort »Schlüsselwort« enthalten.
- -f Schlüsselwort
-
- Entspricht whatis Schlüsselwort; damit wird eine einzeilige Bedeutung von »Schlüsselwort« ausgegeben.
whatis – Kurzbeschreibung zu einem Kommando
Die Syntax:
user$ whatis Schlüsselwort
Mit dem Kommando whatis wird die Bedeutung von »Schlüsselwort« als ein einzeiliger Text ausgegeben. whatis entspricht einem Aufruf von man -f Schlüsselwort.
24.2.15 Alles rund um PostScript-Kommandos
Die Befehle rund um das Postscript-Format werden aus Platzgründen nur mit Kommando und Bedeutung beschrieben. Näheres entnehmen Sie den entsprechenden man-Seiten.
Kommando | Bedeutung |
a2ps | Textdatei umwandeln nach Postscript |
dvips | DVI-Dateien umwandeln nach Postscript |
enscript | Textdatei umwandeln nach Postscript |
gs | PostScript- und PDF-Dateien konvertieren |
html2ps | Umwandeln von HTML-Dateien nach PostScript |
pdf2ps | Umwandeln von PDF nach PostScript |
ps2ascii | Umwandeln von PostScript nach ASCII |
ps2pdf | Umwandeln von PostScript nach PDF |
psutils | Paket zur Bearbeitung von PostScript-Dateien |
24.2.16 Sonstige Kommandos
alias/unalias – Kurznamen für Kommandos
Mit alias können Sie für einfache Kommandos benutzerdefinierte Namen anlegen. Löschen können Sie dieses Synonym wieder mit unalias.
bc – Taschenrechner
bc ist ein arithmetischer, sehr umfangreicher Taschenrechner für die Konsole mit vielen ausgereiften Funktionen.
printenv / env – Umgebungsvariablen anzeigen
Mit printenv können Sie Umgebungsvariablen für einen Prozess anzeigen lassen. Geben Sie kein Argument an, werden alle Variablen ausgegeben, anderenfalls der entsprechende Wert der Umgebungsvariablen. Soll zum Beispiel der Standardpfad kontrolliert werden, so ist Folgendes einzugeben:
user$ printenv PATH /usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin: /bin:/usr/bin:/usr/bin/X11:/usr/games