Chapitre 10. Gestion des données

Table des matières

10.1. Partager, copier et archiver
10.1.1. Outils d’archivage et de compression
10.1.2. Outils de copie et de synchronisation
10.1.3. Idiomes pour les archives
10.1.4. Idiomes pour la copie
10.1.5. Idiomes pour la sélection de fichiers
10.1.6. Support d’archive
10.1.7. Périphériques d’enregistrement amovibles
10.1.8. Choix de système de fichiers pour les données partagées
10.1.9. Partage de données au travers du réseau
10.2. Sauvegarde et restauration
10.2.1. Backup and recovery policy
10.2.2. Suites d’utilitaires de sauvegarde
10.2.3. Personal backup
10.3. Infrastructure de sécurité des données
10.3.1. Gestion de clés pour GnuPG
10.3.2. Utilisation de GnuPG sur des fichiers
10.3.3. Utiliser GnuPG avec Mutt
10.3.4. Utiliser GnuPG avec Vim
10.3.5. La somme de contrôle MD5
10.3.6. Password keyring
10.4. Outils pour fusionner le code source
10.4.1. Extraire des différences pour des fichiers sources
10.4.2. Fusionner les mises à jour des fichiers source
10.4.3. Interactive merge
10.5. Git
10.5.1. Configuration du client Git
10.5.2. Basic Git commands
10.5.3. Git tips
10.5.4. Références de Git
10.5.5. Other version control systems

Des outils et astuces pour gérer les données binaires ou textuelles sur le système sont décrits.

[Avertissement] Avertissement

Il ne faut pas accéder de manière non coordonnée en écriture à des périphériques et des fichiers à haut trafic depuis différents processus pour éviter une compétition d’accès (« race condition ». Pour l’éviter, on peut utiliser les mécanismes de verrouillage de fichier (« File locking » en utilisant flock(1).

La sécurité des données et leur partage contrôlé présentent plusieurs aspects.

  • La création d’une archive des données

  • L’accès à un stockage distant

  • La duplication

  • Le suivi de l’historique des modifications

  • La facilité de partage des données

  • La prévention de l’accès non autorisé aux données

  • La détection des modifications de fichier non autorisées

Cela peut être réalisé avec certaines combinaisons d’outils.

  • Outils d’archivage et de compression

  • Outils de copie et de synchronisation

  • Systèmes de fichiers par le réseau

  • Supports d’enregistrement amovibles

  • L’interpréteur de commandes sécurisé

  • Le système d’authentification

  • Outils de système de contrôle de version

  • Outils de hachage et de chiffrement

Voici un résumé des outils d’archivage et de compression disponible sur le système Debian :

Tableau 10.1. Liste des outils d’archivage et de compression

paquet popcon taille extension commande commentaire
tar V:920, I:999 3144 .tar tar(1) archiveur standard (standard de fait)
cpio V:416, I:998 1141 .cpio cpio(1) archiveur de style UNIX System V, utiliser avec find(1)
binutils V:160, I:642 109 .ar ar(1) archiveur pour la création de bibliothèques statiques
fastjar V:1, I:19 183 .jar fastjar(1) archiveur pour Java (semblable à zip)
pax V:10, I:18 170 .pax pax(1) nouvel archiveur standard POSIX, compromis entre tar et cpio
gzip V:882, I:999 252 .gz gzip(1), zcat(1), … utilitaire de compression GNU LZ77 (standard de fait)
bzip2 V:161, I:970 121 .bz2 bzip2(1), bzcat(1), … utilitaire de transformée par tri de blocs de Burrows-Wheeler permettant un taux de compression plus élevé que gzip(1) (plus lent que gzip avec une syntaxe similaire)
lzma V:1, I:20 149 .lzma lzma(1) LZMA compression utility with higher compression ratio than gzip(1) (deprecated)
xz-utils V:432, I:979 1216 .xz xz(1), xzdec(1), … utilitaire de compression XZ avec un plus haut taux de compression que bzip2(1) (plus lent que gzip mais plus rapide que bzip2; le remplaçant de LZMA utilitaire de compression)
zstd V:34, I:91 2027 .zstd zstd(1), zstdcat(1), … Zstandard fast lossless compression utility
p7zip V:111, I:454 987 .7z 7zr(1), p7zip(1) archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA)
p7zip-full V:116, I:460 4664 .7z 7z(1), 7za(1) archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA et autres)
lzop V:13, I:133 164 .lzo lzop(1) utilitaire de compression LZO avec de plus hautes vitesses de compression et de décompression que gzip(1) (plus faible taux de compression que gzip avec une syntaxe similaire)
zip V:47, I:398 623 .zip zip(1) InfoZIP : outil d’archive et de compression DOS
unzip V:100, I:772 385 .zip unzip(1) InfoZIP : outil de désarchivage et de décompression DOS

[Avertissement] Avertissement

Ne positionnez par la variable « $TAPE » à moins que vous ne sachiez à quoi vous attendre. Elle modifie le comportement de tar(1).

Voici une liste d’outils simples de copie et de sauvegarde sur le système Debian :


Copier des fichiers avec rsync(8) offres des fonctionnalités plus riches que les autres méthodes.

  • algorithme de transfert delta qui n’envoie que la différence entre les fichiers source et les fichiers existants sur la destination

  • algorithme de vérification rapide (par défaut) recherchant les fichiers dont la taille ou l’heure de dernière modification a été modifiée

  • Les options « --exclude » et « --exclude-from » sont semblables à celles de tar(1)

  • La syntaxe « un slash en fin de répertoire source » qui évite la création d’un niveau de répertoire supplémentaire à la destination.

[Astuce] Astuce

Les outils de système de contrôle de version (VCS) de Tableau 10.14, « List of other version control system tools » peuvent fonctionner comme outils de synchronisation et de copie multi-voies.

Voici quelques manières d’archiver et de désarchiver le contenu entier du répertoire « ./source » en utilisant différents outils.

  • Copie locale du répertoire « ./source » → répertoire « /dest »

  • Faire le copie distante du répertoire « ./source » de la machine locale → répertoire « /dest » situé sur la machine « user@host.dom »

rsync(8) :

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

Vous pouvez, en remplacement, utiliser la syntaxe « un slash en fin du répertoire source ».

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

ou encore, comme suit :

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

GNU cp(1) et 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

Vous pouvez remplacer « . » par « truc » dans tous les exemples comportant « . » pour copier les fichiers du répertoire « ./source/truc » vers le répertoire « /dest/truc ».

Vous pouvez remplacer « . » par le chemin absolu « /chemin/vers/source/truc » dans tous les exemples comportant « . » pour éviter « cd ./source; ». Cela permet de copier les fichiers vers différents emplacements selon les outils utilisés de la manière suivante :

  • « /dest/truc » : rsync(8), GNU cp(1) et scp(1)

  • « /dest/chemin/vers/source/truc »: GNU tar(1) et cpio(1)

[Astuce] Astuce

rsync(8) et GNU cp(1) possèdent l’option « -u » pour sauter les fichiers qui sont plus récents sur la destination.

find(1) est utilisé pour la sélection de fichiers pour les commandes d’archive et de copie (consultez Section 10.1.3, « Idiomes pour les archives » et Section 10.1.4, « Idiomes pour la copie ») ou pour xargs(1) (consultez Section 9.4.9, « Répéter une commande en bouclant entre des fichiers »). Cela peut être amélioré en utilisant ces paramètres de commande.

La syntaxe de base de find(1) peut être résumée comme suit :

  • Ses paramètres conditionnels sont évalués de gauche à droite.

  • L’évaluation s’arrête lors que son résultat est déterminé.

  • Le « OU logique » (indiqué par « -o » entre les éléments conditionnels) a une plus faible priorité que le « ET logique » (indiqué par « -a » ou rien entre éléments conditionnels).

  • Le « NON logique » (indiqué par « ! » avant un élément conditionnel) a une priorité plus élevée que le « ET logique ».

  • « -prune » retourne toujours un VRAI logique et, si c’est un répertoire, la recherche de fichier est arrêtée au-delà de ce point.

  • « -name » correspond à la base du nom de fichier avec les motifs génériques de l’interpréteur de commandes (voir Section 1.5.6, « Motifs génériques (« glob ») de l’interpréteur de commandes ») mais il correspond aussi à son « . » de début avec des métacaractères comme « * » et « ? » (nouvelle fonctionnalité POSIX).

  • « -regex » correspond au chemin complet par défaut dans le style BRE Emacs (consultez Section 1.6.2, « Expressions rationnelles »).

  • « -size » correspond au fichier en se basant sur la taille du fichier (valeur précédée de « + » pour plus grand et précédée de « - » pour plus petit)

  • « -newer » correspond au fichier plus récent que celui indiqué comme paramètre.

  • « -print0 » retourne toujours la valeur logique VRAI et affiche sur la sortie standard le nom de fichier en entier (terminé par le caractère null).

find(1) est souvent utilisé dans un style idiomatique comme ce qui suit :

# 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

Cela signifie que les actions suivantes doivent être effectuées :

  1. rechercher tous les fichiers en partant de « /chemin/vers » ;

  2. limiter globalement sa recherche à l’intérieur du système de fichiers et utiliser ERE (consultez Section 1.6.2, « Expressions rationnelles ») ;

  3. exclure les fichiers correspondant à l’expression rationnelle de « .*\.cpio » ou « .*~ » de la recherche en arrêtant le traitement ;

  4. exclure les répertoires qui correspondent à l’expression rationnelle de « .*/\.git » de la recherche en arrêtant le traitement ;

  5. exclure les fichiers plus gros que 99 Megaoctets (unités de 1048576 octets) de la recherche en arrêtant le traitement ;

  6. Afficher les noms de fichiers qui satisfont aux conditions de recherche ci-dessus et qui sont plus récents que « /chemin/vers/horodatage ».

Remarquez l’utilisation idiomatique de « -prune -o » pour exclure les fichiers dans l’exemple ci-dessus.

[Note] Note

Pour les systèmes UNIX-like autre que Debian, certaines options peuvent ne pas être prises en compte par find(1). Dans un tel cas, essayez d’adapter la méthode de correspondance et remplacez « -print0 » par « -print ». Vous devrez aussi ajuster les commandes associées.

Lors du choix d’un support d’enregistrement de données informatiques destiné à l’archivage de données importantes, il faut faire attention à leurs limitations. Pour des petites sauvegardes de données personnelles, j’utilise des CD-R et des DVD-R provenant d’une grande marque et je les range dans un endroit frais, à l’ombre, sec et propre. (Les supports d’archive sur bande semblent être populaires pour les utilisations professionnelles).

[Note] Note

Un coffre-fort anti-feu est destiné aux documents sur papier. La plupart des supports de stockage de données informatiques ont une tolérance en température inférieure à celle du papier. J’utilise en général plusieurs copies chiffrées stockées dans différents endroits sûrs.

Durées de vie optimistes des moyens d’archivage trouvées sur le net (la plupart à partir d’informations des constructeurs).

  • 100 ans et plus : papier non acide et encre

  • 100 ans : stockage optique (CD/DVD, CD/DVD-R)

  • 30 ans : supports magnétiques (bande, disquette)

  • 20 ans : disque optique à changement de phase (CD-RW)

Cela ne prend pas en compte les défaillances mécaniques dues aux manipulations, etc.

Nombre de cycles d’écriture optimistes des moyens d’archivage trouvées sur le net (la plupart à partir d’informations des constructeurs).

  • plus de 250 000 : disque dur

  • plus de 10 000 cycles : mémoires Flash

  • 1000 cycles : CD/DVD-RW

  • 1 cycle : CD/DVD-R, papier

[Attention] Attention

Ces chiffres de durée de vie et de nombre de cycles ne devront pas être utilisés pour des décisions concernant l’enregistrement de données critiques. Veuillez consulter les informations spécifiques au produit fournies par le constructeur.

[Astuce] Astuce

Comme les CD/DVD-R et le papier n’ont qu’un cycle d’écriture de 1, ils évitent de manière inhérente le risque de perte de données par écrasement. C’est un avantage !

[Astuce] Astuce

Si vous devez faire des sauvegardes fréquentes et rapides d’un gros volume de données, un disque dur sur une liaison réseau à haute vitesse peut être la seule option réaliste.

[Astuce] Astuce

If you use re-writable media for your backups, use of filesystem such as btrfs or zfs which supports read-only snapshots may be a good idea.

Les périphériques d’enregistrement amovibles possibles sont les suivants.

Ils peuvent être connectés à l’aide de n’importe quel moyen suivant.

Les environnements de bureau modernes comme GNOME et KDE peuvent monter ces périphériques amovibles automatiquement sans entrée correspondante dans « /etc/fstab »

  • udisks2 package provides a daemon and associated utilities to mount and unmount these devices.

  • D-bus crée les événements pour initialiser les processus automatiques.

  • PolicyKit fournit les droits nécessaires.

[Astuce] Astuce

Les périphériques montés automatiquement pourraient avoir l’option de montage « uhelper= » qui est utilisée par umount(8).

[Astuce] Astuce

Le montage automatique sous les environnements de bureau modernes ne se produit que lorsque ces périphériques amovibles ne se trouvent pas dans « /etc/fstab ».

Mount point under modern desktop environment is chosen as "/media/username/disk_label" which can be customized by the following.

  • mlabel(1) pour le système de fichiers FAT ;

  • genisoimage(1) avec l’option « -V » pour le système de fichiers ISO9660 ;

  • tune2fs(1) avec l’option « -L » pour le système de fichiers ext2, ext3 ou ext4.

[Astuce] Astuce

Le choix du codage doit être fourni comme option de montage (consultez Section 8.1.3, « Coder les noms de fichiers »).

[Astuce] Astuce

L'utilisation d'une interface graphique pour démonter un système de fichiers peut supprimer son point de montage créé dynamiquement tel que « /dev/sdc ». Si vous souhaitez conserver son point de montage, démontez-le à l'aide de la commande umount(8) lancée depuis un interpréteur de commandes.

Lors du partage de données avec d’autres systèmes à l’aide de périphériques de stockage amovibles, vous devez les formatez avec un système de fichiers pris en charge par les deux systèmes. Voici une liste de choix de systèmes de fichiers :

Tableau 10.3. Liste de choix de systèmes de fichiers pour des périphériques amovibles avec des scénarios typiques d’utilisation

filesystem name typical usage scenario
FAT12 partage de données sur disquettes entre plateformes (<32Mio)
FAT16 partage entre plateformes de données sur des périphériques semblables à des disques durs de faible capacité (<2Gio)
FAT32 partage entre plateformes de données sur périphériques semblables à des disques durs de grande capacité (<8Tio, pris en charge par plus récent que MS Windows95 OSR2)
exFAT cross platform sharing of data on the large hard disk like device (<512TiB, supported by WindowsXP, Mac OS X Snow Leopard 10.6.5, and Linux kernel since 5.4 release)
NTFS partage entre plateformes de données sur périphériques semblables à des disques durs de grande capacité (pris en charge de manière native par MS Windows NT et versions plus récentes; et pris en charge par NTFS-3G par l’intermédiaire de FUSE sous Linux)
ISO9660 partage entre plateformes de données sur CD-R et DVD+/-R
UDF écriture incrémentale de CD-R et de DVD+/-R (nouveau)
MINIX enregistrement efficace en matière d’espace disque de fichiers de données unix sur disquette
ext2 partage de données sur disque dur avec les anciens systèmes Linux
ext3 partage de données sur disque dur avec les anciens systèmes Linux
ext4 partage de données sur disque dur avec les systèmes Linux actuels
btrfs sharing of data on the hard disk like device with current Linux systems with read-only snapshots

[Astuce] Astuce

Consultez Section 9.9.1, « Chiffrement des disques amovibles à l’aide de dm-crypt/LUKS » pour le partage de données entre plateformes en utilisant le chiffrement au niveau du périphérique.

Le système de fichiers FAT est pris en charge par la plupart des systèmes d’exploitation modernes et est assez utile pour l'échange des données par l’intermédiaire de supports du type disque dur amovible.

Pour le formatage de périphériques de type disque dur amovible pour l’échange de données entre plateformes avec un système de fichiers FAT, ce qui suit peut être un choix sûr :

Lors de l’utilisation des systèmes de fichiers FAT ou ISO9660 pour le partage de données ce qui suit sera une précaution sûre :

  • Archiver d’abord les fichiers dans un fichier d’archive en utilisant tar(1) ou cpio(1) afin de conserver les noms de fichiers longs, les permissions de fichiers d’origine d’UNIX et les informations de propriétaire.

  • Découper le fichier d’archive en éléments de moins de 2 Gio à l’aide de la commande split(1) afin de le protéger contre les limitations de taille de fichier.

  • Chiffrer le fichier d’archive afin de sécuriser son contenu contre un accès non autorisé.

[Note] Note

La taille maximum d’un fichier FAT, par conception, est de (2^32 - 1) octets = (4GiB - 1 octet). Pour certaines applications sur le système 32 bits plus ancien, la taille maximum était même plus faible (2^31 - 1) octets = (2Gio - 1 octet). Debian ne souffre pas de ce dernier problème.

[Note] Note

Microsoft lui-même ne recommande pas l’utilisation de FAT pour des disques ou des partitions de plus de 200 Mo. Microsoft met en avant ces limitations comme une utilisation inefficace de l’espace disque dans ses « Informations générales sur les systèmes de fichiers FAT, HPFS et NTFS ». Bien sûr, on peut normalement utiliser le système de fichiers ext4 pour Linux.

[Astuce] Astuce

Pour davantage d’informations sur les systèmes de fichiers et les accès aux systèmes de fichiers, veuillez consulter « Filesystems HOWTO ».

Lors du partage de données avec d’autres systèmes au travers du réseau, vous devrez utiliser un service commun. Voici quelques éléments :


Bien que ces systèmes de fichiers montés au travers du réseau et les méthodes de transfert au travers du réseau soient assez pratiques pour partager des données, elles peuvent être non sûres. Leur connexion réseau doit être sécurisée par ce qui suit :

consultez aussi Section 6.5, « Autres serveurs d’applications réseau » et Section 6.6, « Autres clients d’applications réseau ».

Nous savons tous que les ordinateurs sont parfois victimes de pannes ou que des erreurs humaines provoquent des dommages au système et aux données. Les opérations de sauvegarde et de restauration sont les parties essentielles d’une administration système réussie. Vous serez victime, un jour ou l’autre, de tous les modes de défaillance possibles.

[Astuce] Astuce

Mettez en place un système de sauvegardes simple et faites une sauvegarde fréquente de votre système. Avoir des données de sauvegarde est plus important que la qualité technique de votre méthode de sauvegarde.

Il y a 3 facteurs-clé qui permettent de définir une méthode pratique de sauvegarde et de restauration.

  1. Ce qu’il faut sauvegarder et restaurer :

  2. Comment sauvegarder et restaurer :

    • entreposer les données de manière sûre : protection des données contre la réécriture et les défaillances du système ;

    • sauvegardes fréquentes ! sauvegardes planifiées ;

    • sauvegardes redondantes : duplication (miroir) des données ;

    • processus indéréglable : sauvegarde facile en une seule commande.

  3. Risques et coûts :

    • Risk of data when lost

      • Data should be at least on different disk partitions preferably on different disks and machines to withstand the filesystem corruption. Important data are best stored on a read-only filesystem. [4]

    • Risk of data when breached

    • mode de défaillance avec leur probabilité.

      • Hardware (especially HDD) will break

      • Filesystem may be corrupted and data in it may be lost

      • Remote storage system can't be trusted for security breaches

      • Weak password protection can be easily compromised

      • File permission system may be compromised

    • ressources nécessaires pour effectuer les sauvegardes : humaines, matérielles, logicielles, …

      • Automatic scheduled backup with cron job or systemd timer job

[Note] Note

Ne sauvegardez pas le contenu des pseudo systèmes de fichiers se trouvant dans /proc, /sys, /tmp, et /run (voir Section 1.2.12, « procfs et sysfs » et Section 1.2.13, « tmpfs »). À moins que vous ne sachiez exactement ce que vous faites, ce ne sont que d’énormes quantités de données inutiles.

[Note] Note

Il faudra peut-être arrêter certains démons d’applications comme le MTA (consultez Section 6.2.4, « Agent de transport de courrier électronique (« MTA ») ») lors de la sauvegarde des données.

Voici une liste d’utilitaires de sauvegarde notables disponibles sur le système Debian :

Tableau 10.5. Liste de suites d’utilitaires de sauvegarde

paquet popcon taille description
dump V:1, I:5 351 BSD 4.4 dump(8) et restore(8) pour les systèmes de fichiers ext2/ext3/ext4.
xfsdump V:0, I:8 848 sauvegarder et restaurer avec xfsdump(8) et xfsrestore(8) pour le système de fichiers XFS sous GNU/Linux et IRIX
backupninja V:3, I:4 367 système de sauvegarde meta-backup léger et extensible
bacula-common V:10, I:12 2120 Bacula : sauvegarde, restauration et vérification par le réseau - fichiers communs
bacula-client I:3 183 Bacula : sauvegarde, restauration et vérification par le réseau - métapaquet du client
bacula-console V:0, I:4 104 Bacula : sauvegarde, restauration et vérification par le réseau - console en mode texte
bacula-server I:1 183 Bacula : sauvegarde, restauration et vérification par le réseau - métapaquet du serveur
amanda-common V:0, I:2 9937 Amanda : Advanced Maryland Automatic Network Disk Archiver (Libs). (Archiveur de disque par le réseau de Maryland avancé et automatique.
amanda-client V:0, I:2 1085 Amanda : Advanced Maryland Automatic Network Disk Archiver (Client)
amanda-server V:0, I:0 1077 Amanda : Advanced Maryland Automatic Network Disk Archiver (Serveur)
backup-manager V:0, I:1 571 outil de sauvegarde en ligne de commandes
backup2l V:0, I:0 115 outil de sauvegarde et restauration de faible maintenance pour des supports pouvant être montés (basé sur disque)
backuppc V:2, I:2 3178 BackupPC est un système de hautes performances pour effectuer la sauvegarde de PC au niveau de l’entreprise (basé sur disques)
duplicity V:19, I:40 1859 sauvegarde incrémentale (distante)
flexbackup V:0, I:0 243 sauvegarde incrémentale (distante)
rdiff-backup V:5, I:12 1162 sauvegarde incrémentale (distante)
restic V:2, I:5 21593 sauvegarde incrémentale (distante)
slbackup V:0, I:0 151 sauvegarde incrémentale (distante)

Les outils de sauvegarde ont chacun des objectifs particuliers.

  • Mondo Rescue est un système de sauvegarde qui facilite la restauration rapide d’un système complet depuis de CD/DVD etc. sans passer par le processus normal d’installation d’un système.

  • Bacula, Amanda et BackupPC sont des suites de sauvegardes ayant des fonctionnalités avancées qui sont orientées vers les sauvegardes fréquentes au travers du réseau.

  • Regular backups of user data can be realized by a simple script (Section 10.2.3, « Personal backup »).

Les outils de base décrits dans Section 10.1.1, « Outils d’archivage et de compression » et Section 10.1.2, « Outils de copie et de synchronisation » peuvent être utilisés pour faciliter la sauvegarde du système au moyen de scripts personnalisés. De tels scripts peuvent être améliorés comme suit :

  • Le paquet restic permet les sauvegardes incrémentales (distantes) .

  • le paquet rdiff-backup permet les sauvegardes incrémentales (distantes) ;

  • le paquet dump facilite l’archivage et la restauration d’un système de fichiers entier de manière incrémentielle et efficace.

[Astuce] Astuce

Consultez les fichiers dans « /usr/share/doc/dump/ » et « « Est-ce que dump est vraiment obsolète ? » pour en savoir plus sur le paquet dump.

For a personal Debian desktop system running testing suite, I only need to protect personal and critical data. I reinstall system once a year anyway. Thus I see no reason to backup the whole system or to install a full featured backup utility.

At the same time, it is very valuable to have frequent recent snapshots of personal data and system configuration, and occasional full backups of personal data.

I usually make these snapshots and backups with a simple shell script bss. This script is a short shell which uses standard utilities: btrfs subvolume snapshot, rsync. For data encryption, disk image is created by fallocate(1) and configured with cryptsetup(8).

[Astuce] Astuce

Vous pouvez récupérer les données de configuration de debconf avec « debconf-set-selections debconf-selections » et les données de sélection de dpkg avec « dpkg --set-selection <dpkg-selections.list".

L’infrastructure de sécurité des données est fournie par la combinaison d’un outil de chiffrement des données, d’un outil de condensé de messages et d’un outil de signature.


See Section 9.9, « Astuces de chiffrement des données » on dm-crypt and fscrypt which implement automatic data encryption infrastructure via Linux kernel modules.

Voici les commandes de GNU Privacy Guard pour la gestion de base des clés :


Voici la signification du code de confiance


Ce qui suit permet d’envoyer ma clé « 1DD8D791 » vers le serveur de clé populaire « hkp://keys.gnupg.net » :

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

Une bonne configuration de serveur de clés dans « ~/.gnupg/gpg.conf » (ou à l’ancien emplacement « ~/.gnupg/options ») contient ce qui suit :

keyserver hkp://keys.gnupg.net

Ce qui suit obtient les clés inconnues du serveur de clés :

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

Il y avait un bogue dans OpenPGP Public Key Server (pre version 0.9.6) qui corrompait les clés ayant plus de 2 sous-clés. Le paquet du serveur gnupg (>1.2.1-2) peut gérer ces sous-clés corrompues. Consultez gpg(1) sous l’option « --repair-pks-subkey-bug ».

Voici des exemples d’utilisation des commandes de GNU Privacy Guard sur des fichiers :

Tableau 10.9. Liste des commandes de GNU Privacy Guard sur des fichiers

commande description
gpg -a -s fichier signer « fichier » dans un fichier ASCII blindé fichier.asc
gpg --armor --sign fichier , ,
gpg --clearsign fichier signer un fichier en clair
gpg --clearsign fichier|mail truc@example.org envoyer un message signé en clair à truc@example.org
gpg --clearsign --not-dash-escaped fichier_rustine signer en clair un fichier_rustine
gpg --verify fichier vérifier fichier signé en texte clair
gpg -o fichier.sig -b fichier créer une signature détachée
gpg -o fichier.sig --detach-sig fichier , ,
gpg --verify fichier.sig fichier vérifier un fichier avec fichier.sig
gpg -o fichier_chiffré.gpg -r nom -e fichier chiffrement par clé publique destiné au « nom » depuis le « fichier » vers « fichier_chiffré.gpg » binaire
gpg -o fichier_chiffré.gpg --recipient nom --encrypt fichier , ,
gpg -o fichier_chiffré.asc -a -r nom -e fichier chiffrement par clé publique destiné au « nom » depuis le « fichier » vers le fichier ASCII blindé « fichier_chiffré.asc »
gpg -o fichier_chiffré.gpg -c fichier chiffrement symétrique depuis « fichier » vers « fichier_chiffré.gpg »
gpg -o fichier_chiffré.gpg --symmetric fichier , ,
gpg -o fichier_chiffré.asc -a -c fichier chiffrement symétrique prévu destiné au « nom » depuis le « fichier » vers le fichier ASCII blindé « fichier_chiffré.asc »
gpg -o fichier -d fichier_crypt.gpg -r nom déchiffrement
gpg -o fichier --decrypt fichier_chiffré.gpg , ,

md5sum(1) fournit un utilitaire permettant de créer un fichier de résumé en utilisant la méthode se trouvant dans rfc1321 et en l’utilisant pour vérifier chaque fichier qu’il contient.

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

Le calcule de somme de contrôle MD5 consomme moins de ressources processeur que celles utilisées pour le chiffrement des signatures en utilisant GNU Privacy Guard (GnuPG). Habituellement, pour s’assurer de l’intégrité des données, seul le résumé de plus haut niveau est signé par chiffrement.

Il existe de nombreux outils pour fusionner du code source. Les commandes qui suivent ont attiré mon attention :

Tableau 10.10. Liste d’outils destinés à fusionner du code source

paquet popcon taille commande description
patch V:90, I:702 248 patch(1) appliquer un fichier de différences (« diff ») à un original
vim V:97, I:390 3570 vimdiff(1) comparer deux fichiers côte à côte dans vim
imediff V:0, I:0 169 imediff(1) interactive full screen 2/3-way merge tool
meld V:11, I:34 3500 meld(1) comparer et fusionner des fichiers (GTK)
wiggle V:0, I:0 174 wiggle(1) appliquer les rustines rejetées
diffutils V:876, I:995 1597 diff(1) comparer des fichiers ligne à ligne
diffutils V:876, I:995 1597 diff3(1) comparer et fusionner trois fichiers ligne par ligne
quilt V:3, I:26 773 quilt(1) gérer une série de rustines
wdiff V:8, I:59 648 wdiff(1) afficher les différences de mots entre deux fichiers texte
diffstat V:12, I:127 74 diffstat(1) afficher un histogramme des modifications apportées par le fichier de différences
patchutils V:14, I:125 232 combinediff(1) créer une rustine (patch) cumulative à partir de deux rustines incrémentales
patchutils V:14, I:125 232 dehtmldiff(1) extraire un fichier de différences d’une page HTML
patchutils V:14, I:125 232 filterdiff(1) extraire ou exclure des différences d’un fichier de différences
patchutils V:14, I:125 232 fixcvsdiff(1) corriger les fichiers de différences créés par CVS que patch(1) interprète mal
patchutils V:14, I:125 232 flipdiff(1) échanger l’ordre de deux rustines
patchutils V:14, I:125 232 grepdiff(1) afficher quels sont les fichiers modifiés par une rustine correspondant un une expression rationnelle
patchutils V:14, I:125 232 interdiff(1) afficher les différences entre deux fichiers de différence unifiés
patchutils V:14, I:125 232 lsdiff(1) afficher quels sont les fichiers modifiés par une rustine
patchutils V:14, I:125 232 recountdiff(1) recalculer les nombres et les décalages dans un contexte unifié de fichiers de différences
patchutils V:14, I:125 232 rediff(1) corriger les décalages et les nombres d’un fichier de différences édité manuellement
patchutils V:14, I:125 232 splitdiff(1) séparer les rustines incrémentales
patchutils V:14, I:125 232 unwrapdiff(1) réparer les correctifs dont les mots ont été coupés
dirdiff V:0, I:2 167 dirdiff(1) afficher les différences et fusionner les modifications entre deux arbres de répertoires
docdiff V:0, I:0 553 docdiff(1) comparer deux fichiers mot par mot ou caractère par caractère
makepatch V:0, I:0 100 makepatch(1) créer des fichiers de rustines étendus
makepatch V:0, I:0 100 applypatch(1) appliquer des fichiers de rustines étendus

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 provides free Git services via Debian Salsa service. Its documentation can be found at 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.

Tableau 10.13. Git tips

Git command line fonction
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 fetch upstream foo:upstream-foo create a local (possibly orphan) upstream-foo branch as a copy of foo branch the upstream repository
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 fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' convert a shallow clone to the full clone of all branches
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.)

[Avertissement] Avertissement

Ne pas utiliser d'espaces dans la chaîne de balise même si certains outils comme gitk(1) vous permettent de le faire. Cela peut perturber d'autres commandes de git.

[Attention] Attention

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.

[Attention] Attention

L’appel d’une sous-commande git directement avec « git-xyz » depuis la ligne de commandes est devenu obsolète depuis début 2006.

[Astuce] Astuce

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.

Consultez ce qui suit.



[4] A write-once media such as CD/DVD-R can prevent overwrite accidents. (See Section 9.8, « Les données binaires » for how to write to the storage media from the shell commandline. GNOME desktop GUI environment gives you easy access via menu: "Places→CD/DVD Creator".)

[5] Some of these data can not be regenerated by entering the same input string to the system.

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