Kapitel 10. Datenmanagement

Inhaltsverzeichnis

10.1. Austauschen, kopieren und archivieren von Dateien
10.1.1. Archivierungs- und Kompressionswerkzeuge
10.1.2. Kopier- und Synchronisationswerkzeuge
10.1.3. Aufrufe für Archivierungsoperationen
10.1.4. Aufrufe für Kopieroperationen
10.1.5. Aufrufe für die Auswahl von Dateien
10.1.6. Archivierungsmedien
10.1.7. Wechseldatenträger
10.1.8. Dateisystemauswahl für den Datenaustausch
10.1.9. Datenaustausch über das Netzwerk
10.2. Datensicherung und -wiederherstellung
10.2.1. Programmsammlungen für Datensicherungsaufgaben
10.2.2. Personal backup
10.3. Datensicherheits-Infrastruktur
10.3.1. Schlüsselverwaltung für GnuPG
10.3.2. Verwendung von GnuPG mit Dateien
10.3.3. Verwendung von GnuPG mit Mutt
10.3.4. Verwendung von GnuPG mit Vim
10.3.5. Die MD5-Prüfsumme
10.4. Werkzeuge zur Quellcode-Zusammenführung
10.4.1. Unterschiede für Quelldateien extrahieren
10.4.2. Aktualisierungen für Quelldateien zusammenführen
10.4.3. Interactive merge
10.5. Git
10.5.1. Konfiguration eines Git-Clients
10.5.2. Basic Git commands
10.5.3. Git tips
10.5.4. Weitere Referenzen zu Git
10.5.5. Other version control systems

Hier werden Werkzeuge und Tipps zur Verwaltung von Binär- und Textdateien auf einem Debian-System beschrieben.

[Warnung] Warnung

Nicht-koordinierte zeitgleiche Schreibzugriffe auf Geräte und Dateien durch mehrere Prozesse sind nicht erlaubt, da dadurch eine Race Condition (Wettlaufsituation um konkurrierende Zugriffe auf die Ressource) entstehen könnte. Dies kann über einen File locking-Mechanismus mittels flock(1) umgangen werden.

Die Sicherheit der Daten und deren kontrolliertes Austauschen mit anderen hat verschiedene Aspekte:

  • Erzeugung von Datenarchiven;

  • Fern-Speicherzugriff;

  • Vervielfältigung;

  • Nachverfolgung der Änderungshistorie;

  • Erleichterung des Tauschens von Daten;

  • Verhinderung von unerlaubten Dateizugriffen;

  • Erkennung von unerlaubten Dateiveränderungen.

Diese können über die Verwendung einer Kombination von Werkzeugen realisiert werden:

  • Archivierungs- und Kompressionswerkzeuge

  • Kopier- und Synchronisationswerkzeuge

  • Netzwerk-Dateisysteme;

  • Wechseldatenträger;

  • Secure Shell;

  • Authentifizierungssysteme;

  • Versionskontrollsysteme;

  • Hash- und kryptographische Verschlüsselungswerkzeuge.

Hier eine Zusammenfassung von Archivierungs- und Kompressionswerkzeugen im Debian-System:

Tabelle 10.1. Liste von Archivierungs- und Kompressionswerkzeugen

Paket Popcon Größe Erweiterung Befehl Erläuterung
tar V:914, I:999 3152 .tar tar(1) Standard-Archivierungs-Programm (De-Facto-Standard)
cpio V:489, I:998 1144 .cpio cpio(1) Unix-Archivier-Programm im System-V-Stil, zu verwenden mit find(1)
binutils V:164, I:673 97 .ar ar(1) Archivier-Programm zur Erstellung von statischen Bibliotheken
fastjar V:2, I:25 183 .jar fastjar(1) Archivier-Programm für Java (zip-artig)
pax V:12, I:24 170 .pax pax(1) neues POSIX-Archivier-Programm, Kompromiss zwischen tar und cpio
gzip V:891, I:999 242 .gz gzip(1), zcat(1), … GNU LZ77-Kompressionswerkzeug (De-Facto-Standard)
bzip2 V:147, I:973 122 .bz2 bzip2(1), bzcat(1), … Burrows-Wheeler Block-Sorting Kompressions-Werkzeug mit höherem Kompressionsverhältnis als gzip(1) (langsamer als gzip mit ähnlicher Syntax)
lzma V:2, I:27 149 .lzma lzma(1) LZMA compression utility with higher compression ratio than gzip(1) (deprecated)
xz-utils V:453, I:980 612 .xz xz(1), xzdec(1), … XZ-Kompressionswerkzeug mit höherem Kompressionsverhältnis als bzip2(1) (langsamer als gzip, aber schneller als bzip2; ersetzt das LZMA-Kompressionswerkzeug)
zstd V:4, I:24 1902 .zstd zstd(1), zstdcat(1), … Zstandard fast lossless compression utility
p7zip V:79, I:454 987 .7z 7zr(1), p7zip(1) 7-Zip-Dateiarchivier-Programm mit hohem Kompressionsverhältnis (LZMA-Kompression)
p7zip-full V:102, I:469 4664 .7z 7z(1), 7za(1) 7-Zip-Dateiarchivier-Programm mit hohem Kompressionsverhältnis (LZMA- und andere Kompressionsalgorithmen)
lzop V:10, I:85 164 .lzo lzop(1) LZO-Kompressionswerkzeug mit höherer Kompressions- und Dekompressionsgeschwindigkeit als gzip(1) (niedrigeres Kompressionsverhältnis als gzip mit ähnlicher Syntax)
zip V:49, I:427 623 .zip zip(1) InfoZIP: DOS-Archivierungs- und Kompressionswerkzeug
unzip V:132, I:792 385 .zip unzip(1) InfoZIP: DOS-Dearchivierungs- und Dekompressionswerkzeug

[Warnung] Warnung

Setzen Sie nicht die "$TAPE"-Variable, außer Sie sind sich über die Folgen im klaren. Sie verändern dadurch das Verhalten von tar(1).

Hier finden Sie mehrere Wege, um den kompletten Inhalt des Verzeichnisses "./source" mit verschiedenen Werkzeugen zu kopieren.

  • Lokale Kopie: "./source"-Verzeichnis → "/dest"-Verzeichnis

  • Kopie auf einen fernen Rechner: "./source"-Verzeichnis auf dem lokalen Rechner → "/dest"-Verzeichnis auf dem Rechner "user@host.dom"

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

Sie können auch die Syntax mit Schrägstrich am Ende des Zielverzeichnisses nutzen:

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

Alternativ auch:

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

GNU cp(1) und openSSH scp(1):

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

Sie können in allen Beispielen, die einen "." enthalten, diesen "." durch "foo" ersetzen, um Dateien aus dem Verzeichnis "./source/foo" in das Verzeichnis "/dest/foo" zu kopieren.

Auch kann in allen Beispielen, die einen "." enthalten, dieser "." durch einen absoluten Pfad wie "/pfad/zu/source/foo" ersetzt werden, damit kann dann auf "cd ./source;" verzichtet werden. Dadurch werden, abhängig von den verwendeten Werkzeugen, die Dateien an unterschiedliche Orte kopiert:

  • bei rsync(8), GNU cp(1) und scp(1): nach "/dest/foo";

  • bei GNU tar(1) und cpio(1): nach "/dest/pfad/zu/source/foo".

[Tipp] Tipp

rsync(8) und GNU cp(1) unterstützen die Option "-u", um Dateien zu überspringen, die am Zielort neuer sind als im Quellverzeichnis.

find(1) wird verwendet, um Dateien für Archivierungs- und Kopierbefehle auszuwählen (lesen Sie Abschnitt 10.1.3, „Aufrufe für Archivierungsoperationen“ und Abschnitt 10.1.4, „Aufrufe für Kopieroperationen“) oder xargs(1) (Näheres in Abschnitt 9.4.9, „Einen Befehl wiederholt mit einer Schleife über verschiedene Dateien ausführen“). Dies kann mit deren Befehlsargumenten noch erweitert werden.

Die grundsätzliche Syntax von find(1) kann wie folgt zusammengefasst werden:

  • Seine bedingten Argumente werden von links nach rechts ausgewertet.

  • Die Auswertung wird beendet, sobald ihr Resultat ermittelt wurde.

  • Ein "logisches ODER" (definiert über "-o" zwischen den Bedingungen) hat eine niedrigere Priorität als ein "logisches UND" (das über "-a" oder nichts zwischen den Bedingungen definiert wird).

  • Ein "logisches NICHT" (definiert über "!" vor der Bedingung) hat eine höhere Priorität als ein "logisches UND".

  • "-prune" liefert immer ein logisches WAHR zurück und, falls es ein Verzeichnis ist, wird die Suche nach Dateien an diesem Punkt beendet.

  • "-name" findet Dateien über den Anfang des Dateinamens mittels Shell-Glob-Suchmuster (lesen Sie dazu Abschnitt 1.5.6, „Shell-Glob“), findet sie aber über Metazeichen wie "*" und "?" auch bei einem führenden "." (neue POSIX-Funktionalität).

  • "-regex" findet Dateien mit vollständigem Pfad standardmäßig über Emacs-artige reguläre Ausdrücke (BRE, nähere Infos finden Sie in Abschnitt 1.6.2, „Reguläre Ausdrücke“).

  • "-size" findet Dateien basierend auf der Dateigröße (mit einem "+" vor dem Wert für größer, mit einem "-" für kleiner).

  • "-newer" findet Dateien, die neuer sind als in dem Argument angegeben.

  • "-print0" liefert immer ein logisches WAHR zurück und gibt den kompletten Dateinamen (abgeschlossen durch ein Nullzeichen) auf der Standardausgabe aus.

find(1) wird oft in einem idiomatischen Stil verwendet, wie hier:

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

Das bedeutet folgendes:

  1. nach allen Dateien suchen, beginnend in "/pfad/zu";

  2. die Suche global auf das Dateisystem beschränken, in dem sie begonnen wurde, und stattdessen reguläre Ausdrücke (ERE, lesen Sie dazu Abschnitt 1.6.2, „Reguläre Ausdrücke“) verwenden;

  3. Dateien ausschließen, auf die die regulären Ausdrücke ".*\.cpio" oder ".*~" zutreffen, indem die Suche abgebrochen wird;

  4. Verzeichnisse ausschließen, auf die der reguläre Ausdruck ".*/\.git" zutrifft, indem die Suche abgebrochen wird;

  5. Dateien ausschließen, die größer als 99 Megabyte (1048576 Byte) sind, indem die Suche abgebrochen wird;

  6. Dateinamen ausgeben, die obige Suchkriterien erfüllen und neuer als "/path/to/timestamp" sind.

Bitte beachten Sie die idiomatische Verwendung von "-prune -o", um in obigen Beispielen Dateien auszuschließen.

[Anmerkung] Anmerkung

Auf Unix-artigen Nicht-Debian-Systemen werden einige Optionen von find(1) unter Umständen nicht unterstützt. Versuchen Sie in diesem Fall, die Suchmethoden anzupassen und "-print0" durch "-print" zu ersetzen. Unter Umständen müssen Sie auch zugehörige Befehle anpassen.

Wenn Sie Speichermedien für die Sicherung wichtiger Daten suchen, sollten Sie sorgfältig deren Einschränkungen abwägen. Für eine kleine persönliche Datensicherung verwende ich CD-R und DVD-R von einem Markenhersteller und lagere die Disks in einer kühlen, dunklen, trockenen und sauberen Umgebung. (Für die professionelle Nutzung scheinen Tapes (Speicherbänder) zur Archivierung sehr beliebt zu sein.)

[Anmerkung] Anmerkung

Ein feuerbeständiger Tresor ist gedacht für Dokumente in Papierform. Jedoch haben die meisten Speichermedien eine niedrigere Temperaturtoleranz als Papier. Ich baue auf mehrere sicher verschlüsselte Kopien, die an verschiedenen sicheren Orten aufbewahrt werden.

Optimistische Angabe der Lebensdauer von Speichermedien, gefunden im Internet (überwiegend Herstellerangaben):

  • 100 Jahre und mehr: säurefreies Papier mit Tinte;

  • 100 Jahre: Optische Speichermedien (CD/DVD, CD-R/DVD-R);

  • 30 Jahre: Magnetische Speichermedien (Bänder, Disketten);

  • 20 Jahre: Optische Medien basierend auf Phasenänderung (CD-RW).

Hierbei sind keine mechanischen Ausfälle durch Handhabung usw. berücksichtigt.

Optimistische Angabe von Schreibzyklen der Speichermedien, gefunden im Internet (überwiegend Herstellerangaben):

  • 250000 Zyklen und mehr: Festplattenlaufwerk;

  • 10000 Zyklen und mehr: Flash-Speicher;

  • 1000 Zyklen: CD-RW/DVD-RW;

  • 1 Zyklus: CD-R/DVD-R, Papier.

[Achtung] Achtung

Die obigen Angaben zu Lebensdauer und Schreibzyklen sollten nicht für Entscheidungen bezüglich kritischer Datenspeicherung herangezogen werden. Bitte konsultieren Sie in diesem Fall die spezifischen Produktinformationen des Herstellers.

[Tipp] Tipp

Da CD-R/DVD-R und Papier nur einmal beschrieben werden können, schützen sie von Natur aus vor dem versehentlichen Datenverlust durch Überschreiben. Dies ist ein Vorteil!

[Tipp] Tipp

Wenn Sie eine schnelle und wiederholte Sicherung großer Datenmengen benötigen, könnte eine Festplatte in einem fernen Rechner, verbunden über eine schnelle Internetverbindung, die einzige realistische Option sein.

Wechseldatenträger können folgende Geräte sein:

Sie können über eine dieser Möglichkeiten verbunden sein:

Moderne Arbeitsplatzumgebungen wie GNOME und KDE können diese Wechseldatenträger auch ohne einen entsprechenden "/etc/fstab"-Eintrag automatisiert einbinden.

  • Das udisks-Paket enthält einen Daemon und dazugehörige Hilfsprogramme, um diese Datenträger automatisch einzubinden und zu trennen.

  • D-bus erzeugt Ereignisse, um automatische Prozesse anzustoßen.

  • PolicyKit stellt die erforderlichen Berechtigungen bereit.

[Tipp] Tipp

Automatisch eingebundene Geräte haben eventuell die mount-Option "uhelper=", die von umount(8) genutzt wird.

[Tipp] Tipp

In modernen Arbeitsplatzumgebungen funktioniert das automatische Einbinden von Laufwerken nur, wenn diese Geräte nicht in "/etc/fstab" aufgelistet sind.

Der Einbindungspunkt wird in modernen Umgebungen als "/media/laufwerksbezeichnung" abgebildet; die Laufwerksbezeichnung (manchmal auch als Disk-Label bezeichnet) kann wie folgt angepasst werden:

  • mlabel(1) bei FAT-Dateisystemen;

  • genisoimage(1) mit der Option "-V" bei ISO9660-Dateisystemen;

  • tune2fs(1) mit der Option "-L" bei ext2-/ext3-/ext4-Dateisystemen.

[Tipp] Tipp

Die verwendete Zeichenkodierung muss unter Umständen als mount-Option angegeben werden (lesen Sie dazu Abschnitt 8.1.3, „Dateinamenkodierung“).

[Tipp] Tipp

Die Verwendung des grafischen GUI-Menüs zur Trennung eines eingebundenen Dateisystems könnte auch dessen dynamisch erzeugte Gerätedatei (z.B. "/dev/sdc" entfernen. Falls Sie diese Gerätedatei erhalten möchten, trennen Sie die Einbindung mit dem umount(8)-Befehl von einem Shell-Prompt.

Um Daten mit anderen Systemen über Wechseldatenträger auszutauschen, sollten Sie diese mit einem Dateisystem formatieren, das von beiden Systemen unterstützt wird.


[Tipp] Tipp

Details zum plattformübergreifenden Datenaustausch mit Verschlüsselung auf Geräteebene finden Sie in Abschnitt 9.9.1, „Verschlüsselung von Wechseldatenträgern mit dm-crypt/LUKS“.

Das FAT-Dateisystem wird von nahezu allen modernen Dateisystemen unterstützt und ist für den Datenaustausch über Wechseldatenträger sehr nützlich.

Wenn Sie Geräte wie externe Festplatten für den plattformübergreifenden Datenaustausch mit dem FAT-Dateisystem formatieren, sollten die folgenden Varianten eine sichere Wahl sein:

Wenn das FAT- oder ISO9660-Dateisystem für den Dateiaustausch verwendet wird, sollte folgendes eine sichere Variante sein:

  • archivieren der Dateien in eine Archivdatei mittels tar(1) oder cpio(1), um die langen Dateinamen, symbolischen Links, originalen Unix-Dateiberechtigungen und Benutzerinformationen zu erhalten;

  • splitten der Archivdatei in Stücke kleiner als 2 GiB mittels split(1), um so die Beschränkung der Dateigröße zu umgehen;

  • verschlüsseln der Archivdatei, um den Inhalt vor unberechtigtem Zugriff zu schützen.

[Anmerkung] Anmerkung

Bei dem FAT-Dateisystem liegt, begründet durch sein Design, die maximale Dateigröße bei (2^32 - 1) Byte = (4 GiB - 1 Byte). Bei einigen Anwendungen auf älteren 32-Bit-Betriebssystemen war die maximale Dateigröße sogar noch kleiner: (2^31 - 1) Byte = (2 GiB - 1 Byte). Debian ist von letzterem nicht betroffen.

[Anmerkung] Anmerkung

Microsoft selbst empfiehlt FAT nicht für Laufwerke oder Partitionen über 200 MB Größe. Microsoft hebt die Nachteile wie ineffiziente Speicherplatznutzung in seiner "Übersicht über die Dateisysteme FAT, HPFS und NTFS" hervor. Natürlich sollten wir für Linux normalerweise das ext4-Dateisystem nutzen.

[Tipp] Tipp

Mehr Informationen über Dateisysteme und Dateisystemzugriffe finden Sie im "Filesystems HOWTO".

Wir alle wissen, dass Computer manchmal defekt sein können oder menschliche Fehler System- und Datenausfälle verursachen. Aktionen zur Datensicherung und -wiederherstellung sind unverzichtbarer Teil einer erfolgreichen Systemadministration. Alle möglichen Fehlervarianten werden Sie eines Tages ereilen.

[Tipp] Tipp

Halten Sie Ihr Datensicherungssystem einfach und führen Sie häufig Sicherungen durch. Aktuelle Sicherungen von seinen Daten zu haben ist wichtiger als die technische Qualität der Sicherungsmethodik.

Es gibt drei Schlüsselfaktoren, die letztendig die Sicherungs- und Wiederherstellungsstrategie bestimmen:

  1. Zu wissen, was man sichern und wiederherstellen muss:

    • Daten, die direkt von Ihnen selbst erstellt wurden: Daten in "~/";

    • Daten, die von Anwendungen, die Sie verwenden, erstellt wurden: Daten in "/var/" (außer "/var/cache/", "/var/run/" und "/var/tmp/");

    • Systemkonfigurationsdateien: Daten in "/etc/";

    • Lokale Software: Daten in "/usr/local/" oder "/opt/";

    • Informationen zur Systeminstallation: Aufzeichnungen über wichtige Schritte (Partitionierung, …) in einfacher Textform;

    • Daten, von denen Sie wissen, dass sie wichtig sind, bestätigt durch im Vornherein versuchsweise durchgeführte Wiederherstellungsoperationen.

  2. Wissen, wie Sie Daten sichern und wiederherstellen:

    • Sicheres Speichern von Daten: geschützt vor Überschreiben und Systemausfällen;

    • Häufige Datensicherungen: Sicherungen planen;

    • Redundante Datensicherungen: Spiegeln der Sicherungsdateien;

    • Idiotensicheres Vorgehen: Sicherung durch einen einfachen Befehl.

  3. Bewertung der entstehenden Risiken und Kosten:

    • Wert der Daten, falls sie verloren gehen;

    • Für die Sicherung benötigte Ressourcen: Personen, Hardware, Software, …;

    • Mögliche Ausfälle und deren Wahrscheinlichkeit.

[Anmerkung] Anmerkung

Machen Sie keine Sicherungen von den Pseudo-Dateisystemen in /proc, /sys, /tmp und /run (Näheres dazu in Abschnitt 1.2.12, „procfs und sysfs“ und Abschnitt 1.2.13, „tmpfs“). Dies sind absolut nutzlose Daten, außer Sie genau wissen, was Sie tun.

Aus Gründen der sicheren Speicherung sollten die Daten zumindest auf verschiedenen Festplattenpartitionen, bevorzugt sogar auf separaten Festplatten und Rechnern abgelegt werden, um Beschädigungen von Dateisystemen standzuhalten. Wichtige Daten werden am besten auf Medien gespeichert, die nur einmal beschrieben werden können (wie CD-R/DVD-R), um versehentliches Überschreiben auszuschließen. (In Abschnitt 9.8, „Binärdaten“ lesen Sie, wie Sie von der Befehlszeile aus auf die Speichermedien schreiben können. Die grafische Oberfläche der GNOME-Arbeitsplatzumgebung bietet Ihnen auch einen einfachen Weg über das Menü: "Orte→CD/DVD-Ersteller".)

[Anmerkung] Anmerkung

Sie sollten eventuell einige Anwendungs-Daemons wie den MTA (lesen Sie dazu Abschnitt 6.2.4, „Mail Transfer Agent (MTA)“) beenden, während Sie die Datensicherung durchführen.

[Anmerkung] Anmerkung

Besondere Sorgfalt bei Sicherung und Wiederherstellung sollte Identitäts-bezogenen Dateien gelten, wie "/etc/ssh/ssh_host_dsa_key", "/etc/ssh/ssh_host_rsa_key", "~/.gnupg/*", "~/.ssh/*", "/etc/passwd", "/etc/shadow", "/etc/fetchmailrc", "popularity-contest.conf", "/etc/ppp/pap-secrets" und "/etc/exim4/passwd.client". Einige dieser Daten können nicht wiederhergestellt werden, selbst wenn die exakt gleichen Eingaben erneut getätigt werden.

[Anmerkung] Anmerkung

Wenn Sie einen Cron-Job als Benutzerprozess ausführen, müssen Sie die Dateien im Verzeichnis "/var/spool/cron/crontabs" wiederherstellen und cron(8) neu starten. Informationen über cron(8) und crontab(1) finden Sie in Abschnitt 9.4.14, „Regelmäßige Aufgaben planen“.

Hier eine Auswahl erwähnenswerter, im Debian-System verfügbarer Datensicherungsprogramme:

Tabelle 10.5. Liste von Datensicherungsprogrammen

Paket Popcon Größe Beschreibung
dump V:1, I:6 352 4.4bsd dump(8)- und restore(8)-Programm für ext2/ext3/ext4-Dateisysteme
xfsdump V:0, I:9 854 dump (Abbilderstellung) und restore (Wiederherstellung) mit xfsdump(8) und xfsrestore(8) für das XFS-Dateisystem unter GNU/Linux und IRIX
backupninja V:3, I:4 367 ressourcenschonendes, erweiterbares Meta-Backup-System
bacula-common V:10, I:14 2158 Bacula: Datensicherung, -wiederherstellung und -verifizierung über das Netzwerk - gemeinsame Hilfsdateien
bacula-client I:3 183 Bacula: Datensicherung, -wiederherstellung und -verifizierung über das Netzwerk - Client-Metapaket
bacula-console V:1, I:4 107 Bacula: Datensicherung, -wiederherstellung und -verifizierung über das Netzwerk - Textkonsole
bacula-server I:1 183 Bacula: Datensicherung, -wiederherstellung und -verifizierung über das Netzwerk - Server-Metapaket
amanda-common V:1, I:2 10030 Amanda: Advanced Maryland Automatic Network Disk Archiver (Netzwerk-Backup-System - Bibliotheken)
amanda-client V:1, I:2 1088 Amanda: Advanced Maryland Automatic Network Disk Archiver (Netzwerk-Backup-System - Client)
amanda-server V:0, I:0 1075 Amanda: Advanced Maryland Automatic Network Disk Archiver (Netzwerk-Backup-System - Server)
backup-manager V:1, I:1 571 befehlszeilen-basiertes Datensicherungs-Werkzeug
backup2l V:0, I:1 114 wartungsarmes Sicherungs-/Wiederherstellungsprogramm für mount-fähige Medien (festplatten-basiert)
backuppc V:3, I:3 3183 BackupPC ist ein hochleistungsfähiges System der Enterprise-Klasse zur Datensicherung von PCs (festplatten-basiert)
duplicity V:9, I:19 1834 Inkrementelles Backup (auch von fern)
flexbackup V:0, I:0 243 Inkrementelles Backup (auch von fern)
rdiff-backup V:6, I:14 733 Inkrementelles Backup (auch von fern)
restic V:1, I:4 22540 Inkrementelles Backup (auch von fern)
slbackup V:0, I:0 151 Inkrementelles Backup (auch von fern)

Datensicherungs-Werkzeuge haben alle ihren speziellen Fokus:

  • Mondo Rescue ist ein Backup-System, das die schnelle Wiederherstellung eines vollständigen Systems von CD/DVD ermöglicht, ohne dass dabei die normalen Systeminstallations-Prozesse durchlaufen werden müssen.

  • Bacula, Amanda und BackupPC sind voll ausgestattete Backup-Lösungen, die auf die regelmäßige Datensicherung über Netzwerk fokussiert sind.

  • Regular backups of user data can be realized by a simple script (Abschnitt 10.2.2, „Personal backup“).

Grundlegende Werkzeuge (in Abschnitt 10.1.1, „Archivierungs- und Kompressionswerkzeuge“ und Abschnitt 10.1.2, „Kopier- und Synchronisationswerkzeuge“ beschrieben) können verwendet werden, um Systemdatensicherungen über eigene Skripte durchzuführen. Solche Skripte können wie folgt erweitert werden:

  • Das restic-Paket ermöglicht inkrementelle Datensicherungen (auch auf ferne Rechner).

  • Auch das rdiff-backup-Paket ermöglicht inkrementelle Datensicherungen (ebenfalls auf ferne Rechner).

  • Das dump-Paket hilft bei der inkrementellen und effizienten Archivierung und Wiederherstellung eines kompletten Dateisystems.

[Tipp] Tipp

Lesen Sie "/usr/share/doc/dump/" und "Is dump really deprecated?", um mehr über das dump-Paket zu lernen.

Die Sicherheitsinfrastruktur für Ihre Daten wird durch eine Kombination verschiedener Programme gewährleistet: Verschlüsselungswerkzeug, Message-Digest-Werkzeug und Signaturwerkzeug.


See Abschnitt 9.9, „Tipps zur Datenverschlüsselung“ on dm-crypt and ecryptfs which implement automatic data encryption infrastructure via Linux kernel modules.

Hier einige Befehle für die grundlegende Schlüsselverwaltung mit GNU Privacy Guard:


Hier die Bedeutung des Vertrauenscodes:


Folgendes lädt meinen Schlüssel "1DD8D791" auf den populären Schlüsselserver "hkp://keys.gnupg.net" hoch:

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791

Ein gutes Standard-Schlüsselserver-Setup in "~/.gnupg/gpg.conf" (oder dem alten Ort "~/.gnupg/options") enthält folgendes:

keyserver hkp://keys.gnupg.net

Mit dem folgenden Befehl beziehen Sie unbekannte Schlüssel vom Schlüsselserver:

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
  cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

Es gab einen Fehler in OpenPGP Public Key Server (Versionen vor 0.9.6), durch den Schlüssel mit mehr als zwei Unterschlüsseln korrumpiert wurden. Das neue gnupg-Paket (>1.2.1-2) kann mit diesen korrumpierten Unterschlüsseln umgehen. Lesen Sie in gpg(1) den Abschnitt zur Option "--repair-pks-subkey-bug".

md5sum(1) enthält ein Werkzeug, um über die in RFC1321 beschriebene Methode eine Digest-Datei zu erzeugen und jede Datei darüber zu verifizieren:

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
[Anmerkung] Anmerkung

Die Berechnung der MD5-Prüfsumme ist weniger CPU-intensiv als die für die krypthographische Signatur durch GNU Privacy Guard (GnuPG). Üblicherweise ist nur die Digest-Datei der obersten Ebene (z.B. das Wurzelverzeichnis eines Verzeichnisbaums) kryptographisch signiert, um die Datenintegrität sicherzustellen.

Es gibt viele Werkzeuge für die Zusammenführung von Quellcode. Folgende Befehle haben meine Aufmerksamkeit erregt:

Tabelle 10.10. Liste von Werkzeugen zur Quellcode-Zusammenführung

Paket Popcon Größe Befehl Beschreibung
patch V:123, I:721 248 patch(1) eine diff-Datei auf ein Original anwenden
vim V:102, I:404 3286 vimdiff(1) zwei Dateien nebeneinander in vim vergleichen
imediff V:0, I:0 170 imediff(1) interaktives Zwei-/Dreiwege-Zusammenführungs-Werkzeug mit Vollbildschirmmodus
meld V:14, I:38 3065 meld(1) vergleichen und zusammenführen von Dateien (GTK)
wiggle V:0, I:0 174 wiggle(1) zurückgewiesene Patches anwenden
diffutils V:883, I:993 1598 diff(1) Dateien Zeile für Zeile vergleichen
diffutils V:883, I:993 1598 diff3(1) drei Dateien Zeile für Zeile vergleichen und zusammenführen
quilt V:3, I:32 788 quilt(1) Serien von Patches verwalten
wdiff V:8, I:69 644 wdiff(1) Wort-für-Wort-Unterschiede zwischen Textdateien anzeigen
diffstat V:14, I:146 81 diffstat(1) eine Grafik der Veränderungen für eine diff-Datei erstellen
patchutils V:16, I:143 232 combinediff(1) einen kumulativen Patch aus zwei inkrementellen Patches erzeugen
patchutils V:16, I:143 232 dehtmldiff(1) ein Diff aus einer HTML-Seite extrahieren
patchutils V:16, I:143 232 filterdiff(1) Diffs aus einer Diff-Datei extrahieren oder entfernen
patchutils V:16, I:143 232 fixcvsdiff(1) von CVS erstellte Diff-Dateien, die patch(1) falsch interpretiert, reparieren
patchutils V:16, I:143 232 flipdiff(1) die Reihenfolge zweier Patches ändern
patchutils V:16, I:143 232 grepdiff(1) anzeigen, welche Dateien von einem Patch entsprechend einem regulären Ausdruck modifiziert werden
patchutils V:16, I:143 232 interdiff(1) Unterschiede zwischen zwei Unified-Diff-Dateien anzeigen
patchutils V:16, I:143 232 lsdiff(1) zeigen, welche Dateien von einem Patch verändert werden
patchutils V:16, I:143 232 recountdiff(1) Zähler und Offsets in vereinheitlichten Context-Diffs neu berechnen
patchutils V:16, I:143 232 rediff(1) Offsets und Zähler eines hand-editierten Diffs bereinigen
patchutils V:16, I:143 232 splitdiff(1) inkrementelle Patches aussortieren
patchutils V:16, I:143 232 unwrapdiff(1) Patches von fehlerhaften Zeilenumbrüchen befreien
dirdiff V:0, I:2 166 dirdiff(1) Unterschiede zwischen Verzeichnissen anzeigen und zusammenführen
docdiff V:0, I:0 555 docdiff(1) zwei Dateien Wort-für-Wort / Buchstabe-für-Buchstabe vergleichen
makepatch V:0, I:0 102 makepatch(1) erweiterte Patch-Dateien erzeugen
makepatch V:0, I:0 102 applypatch(1) erweiterte Patch-Dateien anwenden

Git is the tool of choice these days for the version control system (VCS) since Git can do everything for both local and remote source code management.

Debian stellt freie Git-Dienste über Debian Salsa bereit. Dokumentation finden Sie unter https://wiki.debian.org/Salsa.

Here are some Git related packages.


Git operation involves several data.

  • The working tree which holds user facing files and you make changes to them.

    • The changes to be recorded must be explicitly selected and staged to the index. This is git add and git rm commands

  • The index which holds staged files.

    • Staged files will be committed to the local repository upon the subsequent request. This is git commit command.

  • The local repository which holds committed files.

    • Git records the linked history of the committed data and organizes them as branches in the repository.

    • The local repository can send data to the remote repository by git push command.

    • The local repository can receive data from the remote repository by git fetch and git pull commands.

      • The git pull command performs git merge or git rebase command after git fetch command.

      • Here, git merge combines two separate branches of history at the end to a point. (This is default of git pull without customization and may be good for upstream people who publish branch to many people.)

      • Here, git rebase creates one single branch of sequential history of the remote branch one followed by the local branch one. (This is pull.rebase true customization case and may be good for rest of us.

  • The remote repository which holds committed files.

    • The communication to the remote repository uses secure communication protocols such as SSH or HTTPS.

The working tree is files outside of the .git/ directory. Files inside of the .git/ directory hold the index, the local repository data, and some git configuration text files.

Here is an overview of main Git commands.


Here are some Git tips.

Tabelle 10.13. Git tips

Git command line Funktion
gitk --all see complete Git history and operate on them such as resetting HEAD to another commit, cheery-picking patches, creating tags and branches ...
git stash get the clean working tree without loosing data
git remote -v check settings for remote
git branch -vv check settings for branch
git status show working tree status
git config -l list git settings
git reset --hard HEAD; git clean -x -d -f revert all working tree changes and clean them up completely
git rm --cached filename revert staged index changed by git add filename
git reflog get reference log (useful for recovering commits from the removed branch)
git branch new_branch_name HEAD@{6} create a new branch from reflog information
git remote add new_remote URL add a new_remote remote repository pointed by URL
git remote rename origin upstream rename the remote repository name from origin to upstream
git branch -u upstream/branch_name set the remote tracking to the remote repository upstream and its branch name branch_name.
git remote set-url origin https://foo/bar.git change URL of origin
git remote set-url --push upstream DISABLED disable push to upstream (Edit .git/config to re-enable)
git checkout -b topic_branch ; git push -u topic_branch origin make a new topic_branch and push it to origin
git branch -m oldname newname rename local branch name
git push -d origin branch_to_be_removed remove remote branch (new method)
git push origin :branch_to_be_removed remove remote branch (old method)
git checkout --orphan unconnected create a new unconnected branch
git rebase -i origin/main reorder/drop/squish commits from origin/main to clean branch history
git reset HEAD^; git commit --amend squash last 2 commits into one
git checkout topic_branch ; git merge --squash topic_branch squash entire topic_branch into a commit
git ime split the last commit into a series of file-by-file smaller commits etc. (imediff package required)
git repack -a -d; git prune repack the local repository into single pack (this may limit chance of lost data recovery from erased branch etc.)

[Warnung] Warnung

Nutzen Sie in der Tag-Zeichenkette keine Leerzeichen, auch wenn Werkzeuge wie gitk(1) dies ermöglichen. Andere git-Befehle könnten dadurch ins Stocken geraten.

[Achtung] Achtung

If a local branch which has been pushed to remote repository is rebased or squashed, pushing this branch has risks and requires --force option. This is usually not an acceptable for main branch but may be acceptable for a topic branch before merging to main branch.

[Achtung] Achtung

Der direkte Aufruf eines git-Unterbefehls mittels "git-xyz" über die Befehlszeile ist seit dem Frühjahr 2006 veraltet.

[Tipp] Tipp

If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command.

Hier finden Sie weitere Informationen:



[4] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly.