Kapitel 4. Betrieb
Zurück | 4.14 Arbeiten mit Dateien - Mini-Workshop | Weiter

## 4.14 Arbeiten mit Dateien - Mini-Workshop

Um mit Ihrem System arbeiten zu können, müssen Sie etwas über das Erzeugen, Verschieben, Umbenennen und Löschen von Dateien und Verzeichnissen erfahren.

### 4.14.1 `pwd` - Ausgeben des aktuellen Verzeichnisses

Zunächst ist es jedoch wichtig zu wissen, an welcher Stelle des Verzeichnisbaumes man sich befindet. Wie schon beschrieben, „befinden“ Sie sich nach dem Anmelden am System in Ihrem Heimat-Verzeichnis. Sie können dies mit dem Kommando `pwd` überprüfen. Die Ausgabe sollte in etwa so aussehen:

    bash-2.02$ pwd
    /home/fr

Wobei auf Ihrem System statt `fr` Ihr eigener Benutzername, mit dem Sie sich angemeldet haben, erscheint.

### 4.14.2 `ls` - Auflisten von Dateien und Verzeichnissen

Dieses Kommando zeigt, wenn es ohne weitere Parameter verwendet wird, Dateien in dem aktuellen Verzeichnis an. Nach dem Anmelden an einem neu installierten Debian GNU/Linux-System befinden Sie sich in Ihrem Heimat-Verzeichnis, und dieses ist leer. Das Kommando `ls` wird also nichts anzeigen. (Das Verzeichnis ist nicht wirklich leer, Sie sehen lediglich mit dem Kommando `ls` ohne Parameter nicht die angelegten Dateien.)

### Versteckte Dateien

Einige Dateien im Heimatverzeichnis eines jeden Benutzers werden beim Anlegen des Benutzerkontos durch den Administrator als versteckte Dateien angelegt. Bei diesen Dateien und Verzeichnissen handelt es sich meistens um Konfigurationsdateien, die nicht oder nur selten verändert werden und aus diesem Grund nicht ständig sichtbar sein müssen. Dies erhöht die Übersichtlichkeit im Heimatverzeichnis.

Um Dateien auf einem Unix-System zu „verstecken“, sind keine großartigen Tricks notwendig. Es reicht, die Datei umzubenennen, so dass diese mit einem Punkt beginnt. Dateien mit einem führenden Punkt im Dateinamen werden von den Kommandos nicht ohne weiteres angezeigt. Wird dem Kommando `ls` die Option `-a` übergeben, so werden auch versteckte Dateien angezeigt.

Sie können aber auch das Kommando `ls` mit einem Pfad als Option aufrufen. Beispielsweise zeigt `ls /` das „root“-Verzeichnis des Systems an.

### 4.14.3 `cd` - Wechseln des Verzeichnisses

Mit diesem Kommando können Sie in ein anderes Verzeichnis (directory) wechseln. `cd /tmp` wechselt beispielsweise in das Verzeichnis für temporäre Dateien unterhalb von `/`.

Auf zwei Besonderheiten möchte ich an dieser Stelle eingehen, die nicht nur mit dem Kommando `cd` funktionieren, aber zum besseren Verständnis hier gut untergebracht sind.

Das Zeichen `~` steht als Abkürzung für den kompletten Pfad zu Ihrem privaten Heimat-Verzeichnis. `cd` mit der Option `~`, also `cd ~`, wechselt ins Heimat-Verzeichnis.

Weiterhin möchte man häufig in ein in der Struktur höher gelegenes Verzeichnis wechseln. Sicher könnte man mit `pwd` nachsehen, wo man sich gerade befindet und dann dem Kommando `cd` den passenden Pfad übergeben. Als einfache Alternative steht aber das Kürzel `..` für das übergeordnete Verzeichnis zur Verfügung. `cd ..` wechselt also in das unmittelbar übergeordnete Verzeichnis (beachten Sie das Leerzeichen).

Wurde in ein anderes Verzeichnis, durch angeben eines Pfadnamen, gewechselt, so kann mit dem Kommando `cd -` in das letzte Verzeichnis gewechselt werden.

Eine weitere Abkürzung stellt `.` dar. Diese steht für das aktuelle Verzeichnis, in dem Sie sich gerade befinden, doch dazu kommen wir gleich in einem anderen Beispiel.

### 4.14.4 `mkdir` - Erzeugen von Verzeichnissen

Mit diesem Kommando können Sie weitere Verzeichnisse anlegen. Wechseln Sie mit `cd ~` in Ihr Heimat-Verzeichnis, und erzeugen Sie ein Verzeichnis `test` (mit `mkdir test`). Überprüfen Sie mit `ls`, ob es funktioniert hat. Erzeugen Sie nach Belieben einige weitere Verzeichnisse, auch unterhalb von `test`.

### 4.14.5 `cp` - Kopieren von Dateien

Mit diesem Kommando können Sie Kopien von Dateien erzeugen. Kopieren Sie die Datei `/etc/profile` mit `cp /etc/profile .` in Ihr Heimat-Verzeichnis (hier also das versprochene Beispiel mit nur einem Punkt). Prüfen Sie mit `ls`, ob sich in Ihrem Verzeichnis nun eine Datei namens `profile` befindet.

### 4.14.6 `more` - Anzeigen von Dateien

`more profile` zeigt Ihnen den Inhalt der Datei `profile` seitenweise auf der Konsole an. Sie können mit der SPACE-Taste seitenweise weiterblättern und mit der Taste `q` das Programm `more` wieder verlassen. `more` zeigt am unteren Bildschirmrand die aktuelle Position in der Datei in Prozent an. Am Ende einer Datei wird `more` automatisch beendet. `more` kann, wie die meisten anderen Programme auch, über Optionen auf der Kommandozeile gesteuert werden. Sie können diese Optionen auch in die Umgebungsvariable `MORE` schreiben; die Optionen werden dann bei jedem Aufruf von `more` benutzt.

Lesen Sie die Manual-Seite zu `more`, das Programm hat noch einige andere interessante Möglichkeiten.

### Ansehen von gepackten Dateien

Sollten Sie auf eine gepackte Textdatei stoßen, so können Sie diese mit dem Kommando `zmore` ansehen.

Beispielsweise ist ein großer Teil der Dokumentation, die jedem mit fast jedem Debian-Paket installiert wird, komprimiert. In einem der Verzeichnisse unterhalb von `/usr/share/doc/` wird man sicherlich fündig.

Wenn Ihnen die Optionen von `more` nicht ausreichen, sollten Sie einen Blick auf das Programm `less` werfen. Es verfügt über die gleichen Funktionen, wurde aber noch um einige nützliche Funktionen erweitert.

### 4.14.7 `mv` - Verschieben und Umbenennen von Dateien und Verzeichnissen

Zum Verschieben von Dateien benötigt das Kommando `mv` mindestens zwei Parameter: der erste Parameter ist die Quelldatei, der zweite die Zieldatei. Verschieben Sie die Datei `profile` mit `mv profile test` in das erstellte Verzeichnis `test`. `mv` dient aber auch zum Umbenennen von Dateien. Wechseln Sie in das Verzeichnis `test`, und benennen Sie die Datei `profile` in `testdatei` um (`mv profile testdatei`).

Weiterhin können Sie mit `mv` auch Verzeichnisse verschieben oder umbenennen, die Syntax unterscheidet sich dabei nicht, egal ob Sie mit Dateien oder Verzeichnissen arbeiten.

Beachten Sie, dass es mit `mv` nicht möglich ist, mehrere Dateien auf einmal umzubenennen. Hierzu bedarf es eines kleinen Skriptes oder anderer entsprechender Hilfsmittel.

### 4.14.8 `rm` - Löschen von Dateien und Verzeichnissen

Mit dem Kommando `rm` können Sie eine oder mehrere Dateien löschen. Im einfachsten Fall geben Sie den Namen der zu löschenden Datei an, also: `rm ichwillweg.txt` (Sollte diese nicht existieren, so können Sie diese mit dem Kommando `touch ichwillweg.txt` anlegen). Als Parameter kann dem Kommando `rm` eine Reihe von Dateinamen mitgegeben werden, diese werden durch Leerzeichen getrennt: `rm ichwillweg.txt ichauch.txt metoo.asc removeme.txt done.sh`; dieses Kommando löscht fünf Dateien von der Festplatte. An dieser Stelle ein wichtiger Hinweis: Es gibt kein `undelete` unter Linux. Dateien, die Sie mit `rm` gelöscht haben, können Sie nicht zurückholen. (Es gibt Programme, die auch mit dem `ext3`-Dateisystem gelöschte Dateien zurückholen können. Dies ist aber momentan noch in der Entwicklung.)

Wenn Sie ein Verzeichnis inklusive aller darin enthaltenen Dateien löschen möchten, können Sie dies auch mit dem Kommando `rm` erledigen. Hierzu dient die Option `-rf`. Ein Beispiel: `rm -rf /home/fr/test/` löscht im Home-Verzeichnis das Verzeichnis `test` mit allen Dateien und Unterverzeichnissen. Etwas, was Sie nicht ausprobieren sollten (man findet das manchmal, weil sich Leute einen Spaß daraus machen...). Ein weiteres Beispiel wäre Folgendes (nicht abtippen!!!): `rm -rf /` (nicht abtippen!!!). Wie schon beschrieben, stellt `/` das Startverzeichnis des gesamten Verzeichnisbaums dar. Sie würden also Ihr komplettes System von der Festplatte verbannen; Fallen Sie also nicht auf diesen kleinen Spaß herein!

### 4.14.9 `rmdir` - Entfernen leerer Verzeichnisse

Nun fehlt uns noch ein Kommando, um lediglich ein Verzeichnis, in dem sich keine Dateien befinden, zu entfernen. `rmdir` mit dem Verzeichnisnamen erledigt dies für uns. Natürlich lässt sich auch `rm` mit den entsprechenden Optionen dafür nutzen. Sie können selbst entscheiden, welches Kommando Sie benutzen wollen... Noch schnell ein Beispiel: `rmdir test` entfernt das Verzeichnis `test` im aktuellen Verzeichnis.

### 4.14.10 Versteckte Dateien (`.datei`)

Namen von versteckten Dateien oder Verzeichnissen beginnen mit einem Punkt (.). Sie können das Kommando `ls` mit der Option `-a` dazu bringen, auch diese versteckten Dateien anzuzeigen. Sie können das sehr einfach in Ihrem Heimat-Verzeichnis ausprobieren; dort werden bei der Einrichtung eines neuen Benutzers und später durch verschiedene Programme diverse versteckte Dateien und Verzeichnisse angelegt.

Wechseln Sie in Ihr Heimat-Verzeichnis (mit dem Kommando `cd`), und sehen Sie sich den Inhalt des Verzeichnisses einmal an, inklusive der versteckten Dateien (mit dem Kommando `ls -la`). Sie sehen nun die „normalen“ Dateien sowie auch die versteckten Dateien. Dabei wird Ihnen vielleicht auffallen, dass es zwei etwas außergewöhnliche Dateien, nämlich `.` und `..`, gibt. Diese stellen das aktuelle Verzeichnis „.“, in dem Sie sich befinden, sowie das übergeordnete Verzeichnis „ `..` “ dar. Wenn Sie das Kommando `ls` mit der Option `-lA` benutzen, werden diese beiden Dateien nicht mit angezeigt.

Der Grund für versteckte Dateien liegt nicht in der Geheimhaltung von Daten. Vielmehr ist es im täglichen Umgang mit dem System nicht sinnvoll, alle möglichen Dateien anzuzeigen, die sich in Ihrem Heimat-Verzeichnis befinden. Viele Programme legen dort auch individuelle Konfigurationsdateien ab. Es hat sich eingebürgert, diese Dateien oder Verzeichnisse mit einem Punkt beginnen zu lassen, so dass diese nicht bei der normalen Arbeit mit Dateien stören.

Über diese Konfigurationsdateien in Ihrem Heimat-Verzeichnis können Sie das Verhalten oder Aussehen von Programmen verändern. Diese Änderungen sind nur wirksam, wenn Sie sich mit Ihrem Benutzernamen am System angemeldet haben. Systemweite Konfigurationsdateien finden Sie im Verzeichnis `/etc/`.

### 4.14.11 `find` + `locate` - Finden von Dateien

Um Dateien in Ihrem System zu finden, stehen Ihnen auf der Kommandozeile zwei Programme zur Verfügung: `find` und `locate`. Mit dem Programm `find` können Sie die Festplatte nach Dateien durchsuchen; dies kann je nach Größe der Festplatten einige Zeit dauern. `find` verfügt über sehr viele Parameter, die Sie in der Manpage nachlesen können.

    bash-2.03$ find --help
    Usage: find [path...] [expression]
    default path is the current directory; default expression is -print
    expression may consist of:
    operators (decreasing precedence; -and is implicit where no others are given):
          ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
          EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
    options (always true): -daystart -depth -follow --help
          -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev
    tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
          -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
          -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN
          -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
          -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
          -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME
          -xtype [bcdpfls]
    actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT
          -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls

Für den normalen Einsatz ist es allerdings ausreichend, wenn Sie sich folgendes Beispiel einprägen:

    bash-2.02$ find / -name resolv.conf
    /etc/resolv.conf
    find: /var/spool/cron/atjobs: Permission denied
    find: /var/spool/cron/atspool: Permission denied
    find: /var/lib/xdm/authdir: Permission denied

Nach einiger Zeit hat `find` die Datei im Verzeichnis `/etc/` gefunden. Für Verzeichnisse, auf die Sie keinen Zugriff haben, gibt `find` eine entsprechende Fehlermeldung aus. Direkt hinter dem Kommando `find` können Sie das Verzeichnis angeben, in dem mit der Suche begonnen werden soll. Im Beispiel wird das gesamte Dateisystem (`/`) durchsucht. Wenn Sie den Namen einer Datei nicht genau kennen, können Sie auch nur einen Teil des Namens angeben und den Rest mit den üblichen Wildcards ersetzen. Beachten Sie, dass jedes Kommando zuerst von der Shell interpretiert und dann ausgeführt wird. Sie müssen also beispielsweise den `*` vor der Shell „verstecken“, indem Sie das Zeichen `\` voranstellen. Die Shell wird nun das folgende Zeichen ignorieren und direkt an das Kommando weiterreichen:

    bash-2.02$ find / -name resol\*
    /etc/resolv.conf
    find: /var/spool/cron/atjobs: Permission denied
    find: /var/spool/cron/atspool: Permission denied
    find: /var/lib/xdm/authdir: Permission denied

### Doppelte Dateien finden

`find` ist auch in der Lage, zusammen mit einigen anderen Werkzeugen aus dem Unix-Werkzeugkasten, doppelte Dateien auf der Festplatte zu ermitteln. Bei folgendem Beispiel wird ab der aktuellen Position im Dateisystem nach identischen Dateien gesucht. Hierzu wird von jeder Datei eine MD5-Checksumme erzeugt, die Liste wird sortiert und es werden doppelte Einträge einmalig ausgegeben. Das Ergebniss wird in die Datei`doppelte.asc` geschrieben.

    find . -exec md5sum {} 2>/dev/null \; | sort | uniq -W 1 -D > doppelte.asc

Soll dieser Vergleich über eine sehr grosse Anzahl von Dateien ausgeführt werden, so sollte statt dem Prgramm `md5sum` das schnellere `cfv` (versatile file checksum creator and verifier) eingesetzt werden. Dieses liegt als Debian Paket vor und muss gesondert installiert werden.

Der zweite Weg, um Dateien zu finden, bietet sich über das Programm `locate`. Dieses ist um einiges schneller beim Finden von Dateien, da es eine Datenbank benutzt, die einmal am Tag aktualisiert wird. Es ist also nicht notwendig, jedes Mal die komplette Festplatte zu durchsuchen. Allerdings funktioniert das Aktualisieren der Datenbank nur, wenn Ihr Rechner zu der Zeit in Betrieb ist, zu der auch diese Aktualisierung stattfinden soll. Da hierbei die komplette Festplatte durchsucht wird, kann der Vorgang einige Zeit dauern.

Sollten Sie Ihren Rechner nicht rund um die Uhr laufen lassen, so können Sie auch (als Administrator) die Datenbank von `locate` mit dem Kommando `updatedb` zu jeder anderen Zeit aktualisieren. Sie können aber auch die Zeit, zu der `updatedb` gestartet wird, in der Datei `/etc/crontab` Ihren Bedürfnissen anpassen.

Wenn Ihnen diese Änderungen zu kompliziert erscheinen, können Sie auch das Paket `anacron` installieren, das dafür sorgt, dass Cronjobs, die eigentlich während der Zeit ausgeführt werden sollten, zu der Sie Ihren Rechner ausgeschaltet hatten, nachträglich ausgeführt werden. Das Programm `cron` erlaubt es, zu bestimmten Zeitpunkten Programme auszuführen. Meistens sind dies administrative Aufgaben wie der Aufruf von `updatedb`.

Dadurch, dass die Datenbank einmal täglich aktualisiert wird, kann `locate` natürlich auch nur Dateien finden, die zu diesem Zeitpunkt bereits vorhanden waren. Später erzeugte Dateien werden von `locate` nicht angezeigt. Das klang jetzt etwas aufwendig; `locate` ist aber sehr leicht zu benutzen, wie folgendes Beispiel beweist:

    bash-2.02$ locate XF86Config
    /etc/X11/XF86Config
    /usr/X11R6/lib/X11/XF86Config
    /usr/X11R6/lib/X11/XF86Config.eg
    /usr/X11R6/man/man5/XF86Config.5x.gz

Wie Sie sehen, findet `locate` alle Dateien, die den Suchbegriff beinhalten, ohne dass Sie mit Wildcards arbeiten müssen.

Wenn Sie `find` und `locate` vergleichen, werden Sie feststellen, dass `find` leistungsfähiger ist, `locate` dagegen im täglichen Gebrauch Dateien wesentlich schneller finden kann.

Wenn Sie häufiger mit `locate` arbeiten oder auch die Datenbank nicht als Administrator aktualisieren lassen, werden Sie merken, dass unter Umständen nicht alle Dateien angezeigt werden. Dies liegt daran, dass nur Dateien in die Datenbank wandern, auf die das Programm `updatedb` Zugriff hat.

Weiterhin zeigt `locate` aber auch Dateien an, die ein normaler User nicht sehen sollte; dies ist vielleicht nicht gewünscht.

Debian GNU/Linux beinhaltet noch das Paket `slocate`. Diese spezielle Version zeigt nur die Dateien an, auf die der jeweilige User auch Zugriff hat. Sie können zusätzlich das Paket `suidmanager` installieren. Damit kann `slocate` über das dazugehörige Programm `suidregister` Ihnen auch die Dateien anzeigen, auf die Sie normalerweise keinen Zugriff haben; natürlich erst nach Angabe des entsprechenden Passwortes.

Beachten Sie bitte auch den Hinweis am Ende der Installation von `slocate`:

    sushi:/root# apt-get install slocate
    Reading Package Lists... Done
    Building Dependency Tree... Done
    The following NEW packages will be installed:
      slocate
    0 packages upgraded, 1 newly installed, 0 to remove and 27 not upgraded.
    Need to get 0B/23.2kB of archives. After unpacking 143kB will be used.
    Selecting previously deselected package slocate.
    (Reading database ... 67742 files and directories currently installed.)
    Unpacking slocate (from .../utils/slocate_2.1-5.1.deb) ...
    Adding `diversion of /usr/bin/locate to /usr/bin/locate.notslocate by slocate'
    Adding `diversion of /usr/bin/updatedb to /usr/bin/updatedb.notslocate by slocate'
    Adding `diversion of /usr/share/man/man1/locate.1.gz to /usr/share/man/ man1/locate.notslocate.1.gz by slocate'
    Adding `diversion of /usr/share/man/man1/updatedb.1.gz to /usr/share/ man/man1/updatedb.notslocate.1.gz by slocate'
    Adding `diversion of /etc/cron.daily/find to /etc/cron.daily/find.notslocate by slocate'
    Setting up slocate (2.1-5.1) ...
    Adding group slocate (104)...
    Done.
    Changing permissions on: /usr/bin/slocate
    Changing permissions on: /var/lib/slocate to: 0750

    WARNING: You should run '/etc/cron.daily/slocate' as root. locate will
    not work properly until you do or until it is run by cron (it is daily).

### 4.14.12 `gzip` - Packen und Entpacken von Dateien

Manchmal ist es sinnvoll, große Dateien zu komprimieren, sei es, um Festplattenplatz zu sparen, sei es, um Downloadzeiten zu verkürzen. Das Programm der Wahl unter Debian GNU/Linux ist `gzip` (GNU Zip).

Erstellen Sie zuerst eine Testdatei, um mit `gzip` experimentieren zu können, und sehen Sie sich die Größe dieser Datei an.

    bash-2.03$ cd
    bash-2.03$ cp /etc/profile ./testdatei
    bash-2.03$ ls -l testdatei
    -rw-r--r--    1 fr       fr            359 Jan 20 20:10 testdatei

Komprimieren Sie nun die Datei `testdatei` mit `gzip`, und sehen Sie sich wieder das Ergebnis an:

    bash-2.03$ gzip testdatei
    bash-2.03$ ls -l testdatei.gz
    -rw-r--r--    1 fr       fr            275 Jan 20 20:10 testdatei.gz

Beachten Sie, dass die Datei nun die Endung `.gz` bekommen hat. Somit ist klar zu erkennen, mit welchem Programm die Datei gepackt wurde und dass diese Datei überhaupt gepackt ist.

Um nun diese Datei wieder in den ursprünglichen Zustand zu versetzen, können Sie `gzip` mit der Option `-d` aufrufen:

    bash-2.03$ gzip -d testdatei.gz
    bash-2.03$ ls -l testdatei
    -rw-r--r--    1 fr       fr            359 Jan 20 20:10 testdatei

Somit ist der alte Zustand wieder hergestellt. Der Komprimierungserfolg ist bei so kleinen Dateien nicht sehr groß, Sie können das gleiche Experiment aber auch mit anderen, größeren Dateien probieren.

### 4.14.13 `split` - geteilte Dateien

Sicher standen Sie schon einmal vor dem Problem, dass eine Datei zu groß war. Sei es, um diese auf einem Medium zu transportieren oder um diese übers Netz zu verschicken. Unter Debian GNU/Linux ist es mit den Programmen `split` und `cat` möglich, Dateien zu zerteilen und wieder zusammenzufügen.

Kopieren Sie die Datei `/bin/bash` in Ihr Heimat-Verzeichnis. Diese Datei hat eine Größe von etwas mehr als 450 Kilobyte.

    bash-2.03$ cd
    bash-2.03$ cp /bin/bash .
    bash-2.03$ ls -l bash
    -rwxr-xr-x    1 fr       fr         461720 Jan 22 15:42 bash

Sie können nun diese Datei mit dem Kommando `split` in kleinere Stücke teilen. Hierzu benötigt `split` Angaben über die maximale Größe der einzelnen Fragmente sowie die Erweiterung des Dateinamens, die an jede der erzeugten Teil-Dateien angehängt werden soll.

Mit der Option `-b` teilen Sie `split` die Größe mit. Ohne weitere Angaben geht `split` davon aus, dass der Wert in Byte angegeben wurde. Das ist natürlich nicht sehr praktikabel. Deshalb können Sie hinter dem Zahlenwert die Buchstaben `k` für Kilobyte oder `m` für Megabyte angeben.

Als Kennung für die einzelnen Dateien erweitert `split` den Dateinamen der ersten Datei mit `aa`, den zweiten mit `ab` und so weiter. Wenn Sie eine eigene Erweiterung (Präfix) zu jeder Datei erzeugen wollen, so können Sie diese mit angeben. Hier im Beispiel wird „einzel“ angegeben:

    bash-2.03$ split -b100k bash einzel
    bash-2.03$ ls -l einzel*
    -rw-r--r--    1 fr       fr         102400 Jan 22 15:42 einzelaa
    -rw-r--r--    1 fr       fr         102400 Jan 22 15:42 einzelab
    -rw-r--r--    1 fr       fr         102400 Jan 22 15:42 einzelac
    -rw-r--r--    1 fr       fr         102400 Jan 22 15:42 einzelad
    -rw-r--r--    1 fr       fr          52120 Jan 22 15:42 einzelae

Das Zusammenfügen der Dateien ist ebenfalls sehr einfach.

    bash-2.03$ cat einzel* > bash-neu
    bash-2.03$ ls -l bash*
    -rwxr-xr-x    1 fr       fr         461720 Jan 22 15:42 bash
    -rw-r--r--    1 fr       fr         461720 Jan 22 15:43 bash-neu

Anhand der Länge sehen wir, dass die Datei wiederhergestellt wurde.

### 4.14.14 `tar` - Archivieren von Dateien

Häufig bekommt man Archive aus dem Netz in gepackter Form. Das Packen von Archiven beinhaltet zwei Dinge: erstens die Zusammenfassung von mehreren Dateien zu einer einzigen und zweitens das Komprimieren der Daten, um Festplattenplatz zu sparen oder auch die Übertragungszeit zu verringern. Historisch gesehen verteilen sich diese beiden Funktionen unter Unix auch auf zwei Programme. Üblicherweise benutzt man zum Zusammenfassen der Dateien das Programm `tar` (Tape Archive) und zum Komprimieren das Programm `gzip`. Etwas bessere Ergebnisse beim Komprimieren von Daten erreicht das (neuere) Programm `bzip2`. Die GNU-Version des Programms `tar`, die auch bei Debian GNU/Linux verwendet wird, kann beide Komprimierungsverfahren benutzen, so dass man nicht mit verschiedenen Programmen hantieren muss.

Altgediente Programme, wie zum Beispiel `tar`, verfügen häufig über eine Vielzahl von Funktionen. Einige davon werden heute kaum noch verwendet, sind aber trotzdem noch aus Kompatibilitätsgründen verfügbar. Beispielsweise können Sie die Blockgröße bestimmen, mit der die Daten auf das Medium geschrieben werden. Eine solche Funktion werden Sie heute nur noch in sehr seltenen Fällen benötigen.

Einen Überblick über die Optionen von `tar` bekommen Sie wie üblich mit der Option `--help`:

    bash-2.03$ tar --help

    GNU "tar" schreibt mehrere Dateien in ein Archiv auf Band oder Festplatte
    und kann einzelne Dateien aus diesem Archiv herausholen.

    Verwendung: tar [OPTION]... [Datei]...

    Beispiele:
      tar -cf archiv.tar foo bar  # archiv.tar mit den Dateien foo und bar
                                  # erzeugen.
      tar -tvf archiv.tar         # Inhalt von archiv.tar ausführlich anzeigen.
      tar -xf archiv.tar          # Alle Dateien aus archiv.tar extrahieren

    Wenn eine lange Option ein Argument erfordert, ist es für die entsprechende
    kurze Option auch erforderlich. Das Gleiche gilt für optionale Argumente.

    Aktionen:
      -t, --list              Inhalt eines Archivs anzeigen
      -x, --extract, --get    Dateien aus Archiv holen
      -c, --create            neues Archiv erzeugen
      -d, --diff, --compare   Dateien im Archiv und im Dateisystem vergleichen
      -r, --append            Dateien an das Archiv anhängen
      -u, --update            nur Dateien anhängen, die jünger sind als ihre
                              Archiv-Version
      -A, --catenate          "tar"-Dateien an ein Archiv anhängen
          --concatenate       wie '-A'
          --delete            aus Archiv löschen (nicht auf Magnetbändern!)

    Operation modifiers:
      -W, --verify               attempt to verify the archive after writing it
          --remove-files         remove files after adding them to the archive
      -k, --keep-old-files       don't replace existing files when extracting
          --overwrite            overwrite existing files when extracting
      -U, --unlink-first         remove each file prior to extracting over it
          --recursive-unlink     empty hierarchies prior to extracting directory
      -S, --sparse               handle sparse files efficiently
      -O, --to-stdout            extract files to standard output
      -G, --incremental          handle old GNU-format incremental backup
      -g, --listed-incremental=FILE
                                 handle new GNU-format incremental backup
          --ignore-failed-read   do not exit with nonzero on unreadable files

    Datei-Eigenschaften:
          --owner=NAME             Eigentümer für hinzugefügte Dateien auf NAME
                                   setzen
          --group=NAME             Gruppe für hinzugefügte Dateien auf NAME
                                   setzen
          --mode=RECHTE            Zugriffsrechte für hinzugefügte Dateien auf
                                   RECHTE setzen
          --atime-preserve         Zugriffszeit beim Auspacken erhalten
      -m, --modification-time      Änderungszeit beim Auspacken erhalten
          --same-owner             Eigentümer beim Auspacken erhalten
          --no-same-owner          Eigentümer beim Auspacken auf Ausführenden
                                   setzen
          --numeric-owner          Zahlen für Benutzer bzw. Gruppen benutzen
      -p, --same-permissions       Zugriffsrechte beim Auspacken erhalten
          --no-same-permissions    Keine Zugriffsrechte erhalten
          --preserve-permissions   wie '-p'
      -s, --same-order             zu entpackende Dateinamen wie im Archiv
                                   sortieren
          --preserve-order         wie '-s'
          --preserve               wie '-p' und '-s' zusammen

    Geräteauswahl und -einstellung:
      -f, --file=ARCHIV              Gerät oder Datei ARCHIV benutzen
          --force-local              Archiv-Datei ist lokal, auch wenn der Name
                                     einen Doppelpunkt enthält
          --rsh-command=BEFEHL       statt "rsh" den BEFEHL benutzen
      -[0-7][lmh]                    Laufwerk und Schreibdichte angeben
      -M, --multi-volume             mehrteiliges Archiv anlegen/listen/
                                     herausholen
      -L, --tape-length=ZAHL         Medium wechseln, wenn ZAHL KBytes
                                     geschrieben sind
      -F, --info-script=DATEI        am Ende jedes Mediums das Skript DATEI
                                     ausführen (impliziert '-M')
          --new-volume-script=DATEI  wie '-F DATEI'
          --volno-file=DATEI         Teil-Nummer in DATEI benutzen/aktualisieren

    Blockung des Gerätes:
      -b, --block-size=BLÖCKE    BLÖCKE a 512 Bytes pro Record
          --record-size=GRÖSSE   GRÖSSE Bytes pro Record, Vielfaches von 512
      -i, --ignore-zeros         Blöcke mit Nullen im Archiv ignorieren (heißt EOF)
      -B, --read-full-blocks     Blockung beim Lesen ändern (für 4.2BSD "Pipes")

    Archive format selection:
      -V, --label=NAME                   create archive with volume name NAME
                  PATTERN                at list/extract time, a globbing PATTERN
      -o, --old-archive, --portability   write a V7 format archive
          --posix                        write a POSIX format archive
      -j, --bzip2                        filter the archive through bzip2
      -z, --gzip, --ungzip               filter the archive through gzip
      -Z, --compress, --uncompress       filter the archive through compress
          --use-compress-program=PROG    filter through PROG (must accept -d)

    Local file selection:
      -C, --directory=DIR          change to directory DIR
      -T, --files-from=NAME        get names to extract or create from file NAME
          --null                   -T reads null-terminated names, disable -C
          --exclude=PATTERN        exclude files, given as a globbing PATTERN
      -X, --exclude-from=FILE      exclude globbing patterns listed in FILE
      -P, --absolute-names         don't strip leading `/'s from file names
      -h, --dereference            dump instead the files symlinks point to
          --no-recursion           avoid descending automatically in directories
      -l, --one-file-system        stay in local file system when creating archive
      -K, --starting-file=NAME     begin at file NAME in the archive
      -N, --newer=DATUM          nur Dateien jünger als DATUM sichern
          --newer-mtime          Datum und Zeit nur vergleichen, wenn sich der
                                 Datei-Inhalt geändert hat
          --after-date=DATUM     wie '-N'
          --backup[=CONTROL]       Sicherheitskopie vor dem Löschen, wählt
                                   Versionskontrolle
          --suffix=SUFFIX          Sicherheitskopie vor dem Löschen,
                                   Namenserweiterung SUFFIX

    Informationen:
          --help            Hilfe anzeigen und "tar" beenden
          --version         Versionsnummer anzeigen und "tar" benden
      -v, --verbose         zu bearbeitende Dateien ausführlich listen
          --checkpoint      Verzeichnisnamen beim Lesen des Archivs zeigen
          --totals          geschriebene Bytes beim Schreiben des Archivs
                            zeigen
      -R, --block-number    Blocknummer innerhalb des Archivs mit jeder
                            Meldung zeigen
      -w, --interactive     Bestätigung für jede Aktion verlangen
          --confirmation    wie '-w'

    Die Namenserweiterung für Sicherheitskopien ist `~', wenn nicht mit
    --suffix oder der Umgebungsvariablen SIMPLE_BACKUP_SUFFIX etwas anderes
    eingestellt ist. Die Versionskontrolle kann mit --backup oder der
    Umgebungsvariablen VERSION_CONTROL gesetzt werden. Mögliche Werte sind:

      t, numbered     nummerierte Sicherheitskopien
      nil, existing   nummerierte Sicherheitskopien, wenn schon nummerierte
                      vorhanden sind, sonst einfache
      never, simple   immer einfache Sicherheitskopien

    GNU "tar" kann keine '--posix'-Archive lesen.  Wenn die
    Umgebungsvariable POSIXLY_CORRECT gesetzt ist, sind GNU-Erweiterungen
    mit '--posix' nicht zulässig.
    Unterstützung für POSIX ist nur teilweise implementiert, rechne derzeit
    noch nicht damit!
    ARCHIV kann DATEI, RECHNER:DATEI oder BENUTZER@RECHNER:DATEI sein; DATEI
    kann eine Datei oder ein Gerät (z.B. ein Streamer) sein.
    Die Voreinstellung für _dieses_ "tar" ist '-f- -b20'.

    Fehlermeldungen an <bug-tar@gnu.org>.

### Lange Texte ansehen

Wenn die Anzeige eines längeren Textes nicht komplett auf dem Bildschirm erfolgen kann, können Sie den Text seitenweise ausgeben lassen, indem Sie die Ausgabe über eine „Pipe“ an das Programm `more` weiterreichen: `tar --help | more`

Für den täglichen Gebrauch kommen Sie aber mit maximal zehn von diesen vielen Optionen aus. Auch in diesem Abschnitt zeigen wir einige Beispiele aus der Praxis auf.

#### 4.14.14.1 `tar` - Packen von Dateien

Um mehrere Dateien in einem Archiv zusammenzufassen, benutzen Sie die Optionen `-cf` (create - erzeugen und file - Datei):

    linux:/home/fr# tar -cf /tmp/test.tar /etc/
    tar: Removing leading `/' from member names

Dies erzeugt eine neue Datei (`/tmp/test.tar`) mit allen Dateien und Unterverzeichnissen aus dem Verzeichnis `/etc/`.

`tar` entfernt automatisch das jedem Pfad vorangestellte `/`, bevor die Dateien in das Archiv aufgenommen werden. Dies verhindert, dass beim späteren Entpacken versehentlich Daten überschrieben werden.

#### 4.14.14.2 `tar` - Entpacken von Dateien

Um die Daten wieder zu entpacken, benutzen Sie die Option `-x` (extract - entpacken). Beachten Sie, dass die Daten per Voreinstellung immer an der aktuellen Position im Dateisystem entpackt werden. Wenn Sie sich nicht sicher sind, erstellen Sie ein temporäres Arbeitsverzeichnis, und verschieben Sie danach die Daten an die gewünschte Stelle:

    linux:/home/fr# mkdir bla
    linux:/home/fr# cd bla
    linux:/home/fr/bla# tar -xf /tmp/test.tar
    linux:/home/fr/bla# ls
    etc

### `tar` zum Plaudern bringen...

Benutzen Sie die zusätzliche Option `-v`, um den Vorgang des Packens oder Entpackens der Daten verfolgen zu können: `tar -xvf /tmp/test.tar`.

#### 4.14.14.3 `tar`- Komprimieren der Archive

Bisher haben wir `tar` zum Packen von Dateien benutzt. Nun werden wir das Archiv zusätzlich noch komprimieren. Hierzu stehen bei GNU-Tar die Optionen `-z` für das Komprimieren mit `gzip` und `-j` zum Komprimieren mit `bzip2` zur Verfügung. Die Benutzung ist ganz einfach: Verwenden Sie `tar` wie oben gezeigt, und fügen Sie beispielsweise die Option `-z` hinzu.

### Jedes Zeichen zählt...

Zur Vereinfachung können Sie den Strich `-` vor den Optionen einfach weglassen, `tar` versucht, die erste Zeichenkette hinter dem Kommando als Optionen zu interpretieren: `tar xvf /tmp/test.tar`.

Hier ein Beispiel, wie Sie ein gepacktes Archiv erzeugen können:

    linux:/home/fr# tar cvfz /tmp/test.tar.gz /etc/

Beachten Sie, dass es üblich ist, entweder (wie hier gezeigt) die Endung `.gz` anzuhängen, oder aber die Kurzform `.tgz` zu verwenden.

`tar` kann mit beiden Endungen „umgehen“, genau genommen ist der Dateiname völlig egal. Die Endungen dienen nur der besseren Übersicht für den Benutzer.

#### 4.14.14.4 `tar` - Benutzung von Bandlaufwerken (Streamern)

Wenn Sie die Daten auf einem Tape-Streamer speichern wollen, können Sie die Daten auch direkt auf das Gerät speichern. Geben Sie dazu statt des Dateinamens des Archivs einfach das entsprechende Device an:

    linux:/home/fr# tar cvfz /dev/st0 /etc/

Das Device `/dev/st0` wird von Streamern benutzt, die über einen SCSI-Anschluss verfügen. Wenn Sie die Daten von diesem Gerät wieder einlesen wollen, benutzen Sie dazu ebenfalls das entsprechende Device.

    linux:/home/fr# tar xvfz /dev/st0

### 4.14.15 `file` - Ermitteln von Dateitypen

Es ist üblich, Dateien so zu benennen, dass der Typ der Datei am Namen zu erkennen ist. Programme sind nicht zwingend auf eine solche Endung angewiesen, diese dient nur der besseren Übersicht für den Benutzer (mit Ausnahme von Dateinamen, die fest in das Programm einkompiliert sind, wie zum Beispiel Namen von Konfigurationsdateien). Textdateien bekommen die Endung `.txt`, Perl-Programme die Endung `.pl` und Bilder die Endung `.jpeg` oder `.tiff` und so weiter. Trotzdem kann es passieren, dass Dateien entweder keine oder eine falsche Endung haben. Debian GNU/Linux stellt Ihnen das Programm `file` zur Verfügung, das die meisten Dateitypen ermitteln kann.

Das Programm `file` ist denkbar einfach zu benutzen: Rufen Sie das Programm einfach zusammen mit dem Namen der zu bestimmenden Datei(en) auf. Sie können hier einen oder mehrere Dateinamen, auch mit Wildcards, angeben:

    bash-2.03$ file /bin/bash /etc/passwd /etc/init.d/lpd
    /bin/bash:       ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped
    /etc/passwd:     ASCII text
    /etc/init.d/lpd: Bourne shell script text

`file` listet nun die verschiedenen Dateinamen mit den Dateitypen auf.

Zurück | Nach oben | Weiter
4.13 Orientierung innerhalb von Debian | Zum Anfang | 4.15 Einige bash-Funktionen

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).