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. Suites d’utilitaires de sauvegarde
10.2.2. 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.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:914, I:999 3152 .tar tar(1) archiveur standard (standard de fait)
cpio V:489, I:998 1144 .cpio cpio(1) archiveur de style UNIX System V, utiliser avec find(1)
binutils V:164, I:673 97 .ar ar(1) archiveur pour la création de bibliothèques statiques
fastjar V:2, I:25 183 .jar fastjar(1) archiveur pour Java (semblable à zip)
pax V:12, I:24 170 .pax pax(1) nouvel archiveur standard POSIX, compromis entre tar et cpio
gzip V:891, I:999 242 .gz gzip(1), zcat(1), … utilitaire de compression GNU LZ77 (standard de fait)
bzip2 V:147, I:973 122 .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: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), … 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: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) archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA)
p7zip-full V:102, I:469 4664 .7z 7z(1), 7za(1) archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA et autres)
lzop V:10, I:85 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:49, I:427 623 .zip zip(1) InfoZIP : outil d’archive et de compression DOS
unzip V:132, I:792 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.

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 »

  • Le paquet udisks fournit un démon et les utilitaires associés pour monter et démonter ces périphériques.

  • 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 ».

Le point de montage sous les environnements de bureau modernes est choisi avec le nom « /media/étiquette_disque », il peut être personnalisé avec les outils suivants :

  • 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 :

    • les fichiers que vous avez directement créés : données de « ~/ » ;

    • les fichiers de données créés par les applications que vous utilisez : données de « /var/ » (sauf « /var/cache/ », « /var/run/ » et « /var/tmp/ ») :

    • les fichiers de configuration du système : fichiers de « /etc/ » ;

    • logiciels locaux : données se trouvant dans « /usr/local/ » ou « /opt/ » ;

    • informations concernant l’installation du système : un mémo en texte concernant les étapes-clés ((partition, …) ;

    • un jeu de données testé : confirmé par des opérations de restauration expérimentales réalisées à l’avance.

  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 :

    • valeur des données perdues ;

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

    • mode de défaillance avec leur probabilité.

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

Comme pour l’enregistrement sécurisé de données, les données doivent se trouver de préférences sur différentes partitions de disque ou sur des disques différents ou des machines différentes afin de résister à une corruption du système de fichiers. Les données importantes seront, de préférence écrites sur des supports à écriture unique tels que les CD/DVD-R afin de prévenir l’écrasement accidentel des données (consultez Section 9.8, « Les données binaires » pour la manière d’écrire sur le support d’enregistrement depuis la ligne de commandes de l’interpréteur. L’interface graphique de l’environnement de bureau GNOME vous donne un accès facile depuis le menu : « Places→CD/DVD Creator :»).

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

[Note] Note

Vous devez prendre des précautions supplémentaires lors de la sauvegarde et de la restauration des fichiers de données relatifs à l’identité comme « /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 » et « /etc/exim4/passwd.client ». Certaines de ces données ne peuvent pas être recréées en entrant la même chaîne de caractères d’entrée sur le système.

[Note] Note

Si vous faites tourner une tâche programmée (« cron » en tant que processus d’utilisateur, vous devrez restaurer les fichiers de « /var/spool/cron/crontabs » et redémarrer cron(8). Consultez Section 9.4.14, « Planifier des tâches qui s’exécutent régulièrement  » pour cron(8) et crontab(1).

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:6 352 BSD 4.4 dump(8) et restore(8) pour les systèmes de fichiers ext2/ext3/ext4.
xfsdump V:0, I:9 854 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:14 2158 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:1, I:4 107 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:1, I:2 10030 Amanda : Advanced Maryland Automatic Network Disk Archiver (Libs). (Archiveur de disque par le réseau de Maryland avancé et automatique.
amanda-client V:1, I:2 1088 Amanda : Advanced Maryland Automatic Network Disk Archiver (Client)
amanda-server V:0, I:0 1075 Amanda : Advanced Maryland Automatic Network Disk Archiver (Serveur)
backup-manager V:1, I:1 571 outil de sauvegarde en ligne de commandes
backup2l V:0, I:1 114 outil de sauvegarde et restauration de faible maintenance pour des supports pouvant être montés (basé sur disque)
backuppc V:3, I:3 3183 BackupPC est un système de hautes performances pour effectuer la sauvegarde de PC au niveau de l’entreprise (basé sur disques)
duplicity V:9, I:19 1834 sauvegarde incrémentale (distante)
flexbackup V:0, I:0 243 sauvegarde incrémentale (distante)
rdiff-backup V:6, I:14 733 sauvegarde incrémentale (distante)
restic V:1, I:4 22540 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.2, « 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.

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 ecryptfs 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:123, I:721 248 patch(1) appliquer un fichier de différences (« diff ») à un original
vim V:102, I:404 3286 vimdiff(1) comparer deux fichiers côte à côte dans vim
imediff V:0, I:0 170 imediff(1) interactive full screen 2/3-way merge tool
meld V:14, I:38 3065 meld(1) comparer et fusionner des fichiers (GTK)
wiggle V:0, I:0 174 wiggle(1) appliquer les rustines rejetées
diffutils V:883, I:993 1598 diff(1) comparer des fichiers ligne à ligne
diffutils V:883, I:993 1598 diff3(1) comparer et fusionner trois fichiers ligne par ligne
quilt V:3, I:32 788 quilt(1) gérer une série de rustines
wdiff V:8, I:69 644 wdiff(1) afficher les différences de mots entre deux fichiers texte
diffstat V:14, I:146 81 diffstat(1) afficher un histogramme des modifications apportées par le fichier de différences
patchutils V:16, I:143 232 combinediff(1) créer une rustine (patch) cumulative à partir de deux rustines incrémentales
patchutils V:16, I:143 232 dehtmldiff(1) extraire un fichier de différences d’une page HTML
patchutils V:16, I:143 232 filterdiff(1) extraire ou exclure des différences d’un fichier de différences
patchutils V:16, I:143 232 fixcvsdiff(1) corriger les fichiers de différences créés par CVS que patch(1) interprète mal
patchutils V:16, I:143 232 flipdiff(1) échanger l’ordre de deux rustines
patchutils V:16, I:143 232 grepdiff(1) afficher quels sont les fichiers modifiés par une rustine correspondant un une expression rationnelle
patchutils V:16, I:143 232 interdiff(1) afficher les différences entre deux fichiers de différence unifiés
patchutils V:16, I:143 232 lsdiff(1) afficher quels sont les fichiers modifiés par une rustine
patchutils V:16, I:143 232 recountdiff(1) recalculer les nombres et les décalages dans un contexte unifié de fichiers de différences
patchutils V:16, I:143 232 rediff(1) corriger les décalages et les nombres d’un fichier de différences édité manuellement
patchutils V:16, I:143 232 splitdiff(1) séparer les rustines incrémentales
patchutils V:16, I:143 232 unwrapdiff(1) réparer les correctifs dont les mots ont été coupés
dirdiff V:0, I:2 166 dirdiff(1) afficher les différences et fusionner les modifications entre deux arbres de répertoires
docdiff V:0, I:0 555 docdiff(1) comparer deux fichiers mot par mot ou caractère par caractère
makepatch V:0, I:0 102 makepatch(1) créer des fichiers de rustines étendus
makepatch V:0, I:0 102 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 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.)

[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] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly.