Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 14 Linux-UNIX-Kommandoreferenz
  gp 14.1 Kurzübersicht
  gp 14.2 Dateiorientierte Kommandos
  gp 14.3 Verzeichnisorientierte Kommandos
  gp 14.4 Verwaltung von Benutzern und Gruppe
  gp 14.5 Programm- und Prozessverwaltung
  gp 14.6 Speicherplatzinformationen
  gp 14.7 Dateisystem-Kommandos
  gp 14.8 Archivierung und Backup
  gp 14.9 Systeminformationen
  gp 14.10 System-Kommandos
  gp 14.11 Druckeradministration
  gp 14.12 Netzwerkbefehle
  gp 14.13 Benutzerkommunikation
  gp 14.14 Bildschirm- und Terminalkommandos
  gp 14.15 Online-Hilfen
  gp 14.16 Alles rund um PostScript-Kommandos
  gp 14.17 Gemischte Kommandos


Rheinwerk Computing

14.2 Dateiorientierte Kommandodowntop


Rheinwerk Computing

bzcat – Ausgabe von bzip2-komprimierten Dateien  downtop

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 den Inhalt einer Datei sehen und sogar lesen können, obwohl Sie diese noch gar nicht dekomprimiert haben. Ansonsten funktioniert bzcat wie cat.


Rheinwerk Computing

cat – Datei(en) nacheinander ausgeben  downtop

cat wurde bereits mehrfach in diesem Buch verwendet und auch beschrieben. 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) (EOF) betätigt wurde.


Tabelle 14.2   Anwendungen von cat

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


Hinweis   cat wurde bereits separat in Abschnitt 1.7.2 behandelt.



Rheinwerk Computing

chgrp – Gruppe von Dateien oder Verzeichnissen ändern  downtop

Mit chgrp ändern Sie die Gruppenzugehörigkeit einer Datei oder eines Verzeichnisses. Dieses Kommando bleibt somit nur dem Eigentümer einer Datei/Verzeichnis 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.


Rheinwerk Computing

cksum/md5sum/sum – eine Prüfsumme für eine Datei ermitteln  downtop

Mit diesen Funktionen errechnet man die CRC-(cyclic redundancy check)-Prüfsumme 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 Daten identisch sind. So kann z. B. überprüft werden, ob eine Datei, die Sie aus dem Netz geladen haben, auch korrekt übertragen wurde. Voraussetzung hierfür ist natürlich, dass Sie die Prüfsumme der Quelle kennen. Häufig findet man dies beim Herunterladen von ISO-Distributionen. 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:

you@host > cksum data.conf
2935371588 51 data.conf
you@host > cksum data.conf
2935371588 51 data.conf
you@host > echo Hallo >> data.conf
you@host > cksum data.conf
966396470 57 data.conf

Hier eine Konfigurationsdatei data.conf, bei der zweimal mit cksum derselbe Wert berechnet wurde (nur zur Demonstration). Kurz darauf wurde am Ende dieser Datei ein Text angehängt und erneut cksum ausgeführt. Jetzt erhalten Sie eine andere Prüfsumme. Voraussetzung, 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:

you@host > 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:

you@host > sum data.conf
20121     1
you@host > cksum data.conf
966396470 57 data.conf
you@host > md5sum data.conf
5a04a9d083bc0b0982002a2c8894e406  data.conf

Hinweis   md5sum gibt es unter FreeBSD nicht, hier heißt es md5.


Noch ein beliebter Anwendungsfall von md5sum (bzw. md5):

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.


Rheinwerk Computing

chmod – Zugriffsrechte von Dateien oder Verzeichnissen ändern  downtop

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 muss eigentlich jedem Systemadministrator geläufig sein, weil es ein sehr häufig verwendetes Kommando ist. chmod kann zum Glück sehr flexibel eingesetzt werden. Man kann einen numerischen Wert wie folgt verwenden:

chmod 755 file

oder

chmod 0755 file

Einfacher anzuwenden ist chmod über eine symbolische Angabe wie:

chmode u+x file

Hier bekommt der User (u; Eigentümer) der Datei file das Ausführrecht (+x) erteilt.

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 geht dies so:

chmod a+x file

Mit chmod können Sie auch die Spezialbits setzen (SUID=4000; SGUID=2000 oder Sticky=1000). Wollen Sie z. B. für eine Datei das setuid-(Set-User-ID)-Bit setzen, funktioniert dies folgendermaßen:

chmod 4744 file

Das setgid-(Set Group ID)-Bit 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.


Rheinwerk Computing

chown – Eigentümer von Dateien oder Verzeichnissen ändern  downtop

Mit chown können Sie den Eigentümer von Dateien oder Verzeichnissen ändern. Als neuen Eigentümer kann man entweder den Login-Namen 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.

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 auch hierbei die Option –R verwendet werden.

Wollen Sie sowohl den Eigentümer als auch die Gruppe einer Datei ändern, nutzen Sie folgende Syntax:

chown john:user file1 file2

Rheinwerk Computing

cmp – Dateien miteinander vergleichen  downtop

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.

you@host > cmp out.txt textfile.txt
out.txt textfile.txt differieren: Byte 52, Zeile 3.

Rheinwerk Computing

comm – zwei sortierte Textdateien miteinander vergleichen  downtop

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 Tabulatorenvorschüben angeführt werden.

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.

you@host > cat file1.txt
# wichtige Initialisierungsdatei
# noch eine Zeile
Hallo
you@host > cat file2.txt
# wichtige Initialisierungsdatei
# noch eine Zeile
Hallo
you@host > comm file1.txt file2.txt
                # wichtige Initialisierungsdatei
                # noch eine Zeile
                Hallo
you@host > echo "Neue Zeile" >> file2.txt
you@host > comm file1.txt file2.txt
                # wichtige Initialisierungsdatei
                # noch eine Zeile
                Hallo
        Neue Zeile
you@host > 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:


Tabelle 14.3   Optionen für comm

Verwendung Bedeutung
–23 file1 file2 Es werden nur Zeilen ausgegeben, die in file1 vorkommen.
–123 file1 file2 Es wird keine Ausgabe erzeugt.


Rheinwerk Computing

cp – Dateien kopieren  downtop

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.


Tabelle 14.4   Anwendungen von cp

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 kopiert.


Hinweis   cp wurde bereits separat in Abschnitt 1.7.2 beschrieben.



Rheinwerk Computing

csplit – Zerteilen von Dateien (kontextabhängig)  downtop

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:

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 »Abschnitt4«. Hier können Sie allerdings auch einzelne Zeilen angeben, ab denen Sie eine Datei teilen wollen:

csplit -f Abschnitt Kapitel20.txt 20 40

Hier haben Sie mit der Option –f veranlasst, dass statt eines Dateinamens wie »xx01«, »xx02« usw. dem darauf folgenden Namen 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. Beispielsweise:

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.


Rheinwerk Computing

cut – Zeichen oder Felder aus Dateien herausschneiden  downtop

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 ein Komma 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.


Hinweis   cut wurde bereits in Abschnitt 2.3.1 ausführlich beschrieben und demonstriert.



Rheinwerk Computing

diff – Vergleichen zweier Dateien  downtop

diff vergleicht den Inhalt von zwei Dateien. Da diff zeilenweise vergleicht, sind keine binären Dateien erlaubt. Ein Beispiel:

you@host > 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. Noch ein Beispiel:

you@host > 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:

you@host > 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:

diff -r dir1 dir2

Rheinwerk Computing

diff3 – Vergleich von drei Dateien  downtop

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:

diff file1 file2 file3

Tabelle 14.5   Bedeutung der Ausgabe von diff3

Ausgabe Bedeutung
==== Alle drei Dateien sind unterschiedlich.
====1 file1 ist unterschiedlich.
====2 file2 ist unterschiedlich.
====3 file3 ist unterschiedlich.


Rheinwerk Computing

dos2unix – Dateien vom DOS- in UNIX-Format umwandeln  downtop

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.

you@host > dos2unix file1.txt file2.txt
dos2unix: converting file file1.txt to UNIX format ...
dos2unix: converting file file2.txt to UNIX format ...

Rheinwerk Computing

expand – Tabulatoren in Leerzeichen umwandeln  downtop

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 mit nur drei Leerzeichen ersetzt werden, erreichen Sie dies folgendermaßen:

you@host > 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.


Rheinwerk Computing

file – den Inhalt von Dateien analysieren  downtop

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 (der Datei /etc/magic oder /etc/usr/share/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.

you@host > cat > hallo.c
#include <stdio.h>
int main(void) {
   printf("Hallo Welt\n");
   return 0;
}
(Strg)+(D)
you@host > file hallo.c
hallo.c: ASCII C program text
you@host > gcc -o hallo hallo.c
you@host > ./hallo
Hallo Welt
you@host > file hallo
hallo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, 
dynamically linked (uses shared libs), not stripped
you@host > file file1.txt
file1.txt: ASCII text
you@host > mkfifo abc
you@host > file abc
abc: fifo (named pipe)
...

Rheinwerk Computing

find – Suchen nach Dateien  downtop

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 – allerdings gilt dies nur bei GNU-find. Von daher sollte man aus Kompatibilitätsgründen möglichst das Verzeichnis angeben. Wenn keine Aktion angegeben ist, wird meistens –print (abhängig von einer eventuell angegebene Option) für die Ausgabe auf dem Bildschirm verwendet. Hierzu einige Beispiele.

Alle Verzeichnisse und Unterverzeichnisse ab dem Heimverzeichnis ausgeben:

find $HOME -print

Gibt alle Dateien mit dem Namen »kapitel« aus dem Verzeichnis (und dessen Unterverzeichnisse) /dokus aus:

find /dokus -name kapitel -print

Gibt alle Dateien aus dem Verzeichnis (und dessen Unterverzeichnisse) dokus mit dem Namen »kap...«, bei denen »you« der Eigentümer ist, aus:

find /dokus /usr -name 'kap*' -user you -print

Damit durchsuchen Sie ab dem Wurzelverzeichnis nach einem Verzeichnis (–type d = directory) mit dem Namen »dok...« und geben dies auf dem Bildschirm aus:

find / -type d -name 'dok*' -print

Sucht leere Dateien (size = 0) und löscht diese nach einer Rückfrage (–ok):

find / -size 0 -ok rm {} \;

Gibt alle Dateien ab dem Wurzelverzeichnis aus, die in den letzten sieben Tagen verändert wurden:

find / -mtime –7 -print

Rheinwerk Computing

fold – einfaches Formatieren von Dateien  downtop

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:

you@host > 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.

you@host > 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:

you@host > fold -s –72 text.txt | mail -s "Betreff" name@host.de

Rheinwerk Computing

head – Anfang einer Datei ausgeben  downtop

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:

you@host > head –5 file

Hier werden die ersten fünf Zeilen von file auf dem Bildschirm ausgegeben.


Rheinwerk Computing

less – Datei(en) seitenweise ausgeben  downtop

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.


Rheinwerk Computing

ln – Links auf eine Datei erzeugen  downtop

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.

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:

ln filea fileb

Smalltalk   Mit den Hardlinks kann man unter BSD und Jails nette Sachen machen. Unter BSD gibt es ja das »imutable flag« für Dateien, das das Schreiben auch für root verbietet. Nur root kann das Flag verändern. Man kann aber mit »make world« ein Betriebssystem in einem Verzeichnis für eine Jail bauen. Das Verzeichnis kann man dann rekursiv mit dem »imutable flag« versehen und per Hardlink in die Jail verlinken. Das »imutable flag« kann nur root vom Hostsystem aus verändern, Nicht-root aus der Jail. Somit kann man das root-Passwort im Internet bekannt geben (wurde auch schon oft gemacht) und es hat bisher noch nie jemand geschafft, solch eine Jail zu knacken.



Rheinwerk Computing

ls – Verzeichnisinhalt auflisten  downtop

Mit ls wird der Inhalt eines Verzeichnisses auf dem Dateisystem angezeigt. Da ls bereits in Abschnitt 1.7.2 behandelt wurde, wird hier nicht mehr näher darauf eingegangen.


Rheinwerk Computing

more – Datei(en) seitenweise ausgeben  downtop

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.


Rheinwerk Computing

mv – Datei(en) und Verzeichnisse verschieben oder umbenennen  downtop

Mit mv können Sie eine oder mehrere Dateien bzw. Verzeichnisse verschieben oder umbenennen.


Tabelle 14.6   Anwendungen von mv

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


Hinweis   mv wurde bereits in Abschnitt 1.7.2 behandelt.



Rheinwerk Computing

nl – Datei mit Zeilennummer ausgeben  downtop

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, Body und einen Footer unterteilen und in unterschiedlichen Stilen nummerieren, zum Beispiel:

you@host > 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:

you@host > nl hallo.c -s' : ' > hallo_line
you@host > 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.


Rheinwerk Computing

od – Datei(en) hexadezimal bzw. oktal ausgeben  downtop

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:

you@host > od file1.txt
0000000 064546 062554 035061 062572 066151 030545 063012 066151
0000020 030545 075072 064545 062554 005062 064546 062554 035062
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.


Rheinwerk Computing

paste – Dateien spaltenweise verknüpfen  downtop

Mit paste führen Sie Zeilen von mehreren Dateien zusammen. Das Kommando wurde bereits in Abschnitt 2.3.1 behandelt, weshalb Sie gegebenenfalls hierhin zurückblättern sollten.


Rheinwerk Computing

pcat – Ausgabe von pack-komprimierten Dateien  downtop

Mit pcat kann man den Inhalt von pack-komprimierten Dateien ausgeben, ohne dass man die komprimierte Datei dekomprimieren muss. Ansonsten funktioniert pcat wie cat.


Rheinwerk Computing

rm – Dateien und Verzeichnisse löschen  downtop

Mit dem Kommando rm können Sie Dateien und Verzeichnisse löschen.


Tabelle 14.7   Anwendungen von rm

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 eine Warnung auszugeben


Hinweis   Das Kommando rm wurde bereits in den Abschnitten 1.7.2 und 1.7.3 (rmdir) behandelt.



Rheinwerk Computing

sort – Dateien sortieren  downtop

Gewöhnlich wird sort zum Sortieren einzelner Zeilen einer Datei oder der Standardeingabe verwendet. sort kann aber auch Dateien ü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:

you@host > sort kommandos.txt
a2ps – Textdatei umwandeln nach Postscript
accept – Druckerwarteschlange auf empfangsbereit setzen
afio – Ein cpio mit zusätzlicher Komprimierung
alias – Kurznamen für Kommandos vergeben
...
you@host > ls | sort
abc
bin
cxoffice
Desktop
Documents
...

Häufig verwendete Optionen zum Sortieren, die mit sort benutzt werden:


Tabelle 14.8   Optionen für das Kommando sort

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, welches Dateien topologisch sortiert.


Rheinwerk Computing

split – Dateien in mehrere Teile zerlegen  downtop

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:

you@host > split –50 kommandos.txt
you@host > ls x*
xaa  xab  xac  xad  xae

Die Datei können Sie folgendermaßen wieder zusammensetzen:

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:

you@host > split –50 kommandos.txt kommandos
you@host > 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.


Rheinwerk Computing

tac – Dateien rückwärts ausgeben  downtop

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.

you@host > cat file1.txt
file1:zeile1
file1:zeile2
file2:zeile3
you@host > tac file1.txt
file2:zeile3
file1:zeile2
file1:zeile1

Rheinwerk Computing

tail – Ende einer Datei ausgeben  downtop

tail gibt die letzten Zeilen (standardmäßig, ohne spezielle Angaben die letzten zehn) einer Datei aus.

you@host > tail –5 kommandos.txt
write – Nachrichten an andere Benutzer verschicken
zcat – Ausgabe von gunzip-komprimierten Dateien
zip/unzip – (De-) Komprimieren von Dateien
zless – gunzip-komprimierte Dateien seitenweise ausgeben
zmore – gunzip-komprimierte Dateien seitenweise ausgeben

Hier gibt tail die letzten fünf Zeilen der Datei kommandos.txt aus. Wollen Sie eine Datei ab einer bestimmten Zeile ausgeben lassen, gehen Sie wie folgt vor:

you@host > 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:

you@host > 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.


Rheinwerk Computing

tee – Ausgabe duplizieren  downtop

Mit tee lesen Sie von der Standardeingabe und verzweigen die Ausgabe auf die Standardausgabe und Datei. Da tee ein eigener Abschnitt (1.10.5) im Buch gewidmet ist, sei hier auf diesen verwiesen.


Rheinwerk Computing

touch – Anlegen von Dateien oder Zeitstempel verändern  downtop

Mit touch verändern Sie die Zugriffs- und Änderungszeit einer Datei auf die aktuelle Zeit. Existiert eine solche Datei nicht, wird diese angelegt. touch wurde bereits in Abschnitt 1.7.2 behandelt, aber dennoch sollen hier noch einige Optionen zu touch und ihre jeweilige Bedeutung erwähnt werden:


Tabelle 14.9   Optionen für das Kommando touch

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


Rheinwerk Computing

tr – Zeichen ersetzen bzw. Umformen von Dateien  downtop

Mit tr können Zeichen durch andere Zeichen ersetzt werden. Dies gilt auch für nicht druckbare Zeichen.

tr str1 str2 file

Wird in der Datei file ein Zeichen aus »str1« gefunden, wird es durch das entsprechende Zeichen in »str2« ersetzt.


Hinweis   tr wurde bereits in Abschnitt 2.3.1 behandelt.



Rheinwerk Computing

type – Kommandos klassifizieren  downtop

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 (Shellfunktion), einer Datei oder einer Scriptfunktion. Kann type nichts mit dem Namen anfangen, wird auch nichts ausgegeben.

you@host > type ls echo ./hallo
ls is aliased to `/bin/ls $LS_OPTIONS'
echo is a shell builtin
./hallo is ./hallo

Hinweis   type selbst ist ein Builtin und daher nicht in jeder Shell verfügbar.



Rheinwerk Computing

umask – Dateierstellungsmaske ändern bzw. ausgeben  downtop

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 wird. Die in der Maske gesetzten Bits werden bei den Zugriffsrechten für die neue Datei bzw. das Verzeichnis gelöscht (man spricht auch von: Sie werden maskiert). Mehr zu diesem Kommando entnehmen Sie bitte dem Abschnitt 9.4, wo es näher behandelt wurde.


Rheinwerk Computing

uniq – doppelte Zeilen nur einmal ausgeben  downtop

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:

you@host > cat file1.txt
file1:zeile1
file1:zeile2
file1:zeile2
file2:zeile3
you@host > uniq file1.txt
file1:zeile1
file1:zeile2
file2:zeile3

Rheinwerk Computing

unix2dos – Dateien vom UNIX- in DOS-Format umwandeln  downtop

Das Gegenstück von dos2unix. Damit wandeln Sie eine Textdatei vom Unix-Format wieder zurück in das DOS-Format um.

unix2dos fileunix filedos

Rheinwerk Computing

wc – Zeilen, Wörter und Zeichen einer Datei zählen  downtop

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:

you@host > wc file1.txt
 4  4 52 file1.txt

Die erste Spalte enthält die Anzahl der Zeilen, gefolgt von der Anzahl der Worte 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.


Hinweis   wc wurde bereits in Abschnitt 1.7.2 behandelt.



Rheinwerk Computing

whereis – Suche nach Dateien  downtop

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.

you@host > whereis ls
/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
you@host > whereis -b ls
/bin/ls
you@host > 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.


Rheinwerk Computing

zcat, zless, zmore – (seitenweise) Ausgabe von gunzip-komprimierten Dateien  toptop

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.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-Programmierung


Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern