Table des matières
Des outils et astuces pour gérer les données binaires et de texte sur le système sont décrits.
![]() |
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 partager les données
La prévention de l’accès non autorisé aux données
La détection des modifications de fichier non autorisée
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:568, I:999 | 2464 |
.tar
|
tar(1) | archiveur standard (standard de fait) |
cpio
|
V:508, I:998 | 855 |
.cpio
|
cpio(1) | archiveur de style UNIX System V, utiliser avec find(1) |
binutils |
V:550, I:741 | 14618 |
.ar
|
ar(1) | archiveur pour la création de bibliothèques statiques |
fastjar |
V:13, I:130 | 191 |
.jar
|
fastjar(1) | archiveur pour Java (semblable à zip) |
pax
|
V:23, I:82 | 181 |
.pax
|
pax(1) |
nouvel archiveur standard POSIX, compromis entre tar et
cpio
|
gzip
|
V:901, I:999 | 202 |
.gz
|
gzip(1), zcat(1), … | utilitaire de compression GNU LZ77 (standard de fait) |
bzip2
|
V:491, I:812 | 91 |
.bz2
|
bzip2(1), bzcat(1), … | utilitaire de transformée
par tri de blocs de Burrows-Wheeler block-sorting permettant un taux
de compression plus élevé que
gzip(1)
(plus lent que gzip avec une syntaxe similaire)
|
lzma
|
V:27, I:304 | 144 |
.lzma
|
lzma(1) | utilitaire de compression LZMA avec un plus haut taux de compression que gzip(1) (obsolète) |
xz-utils |
V:196, I:831 | 470 |
.xz
|
xz(1), xzdec(1), … | utilitaire de compression XZ avec un plus haut
taux de compression que
bzip2(1)
(plus lent quegzip mais plus rapide que
bzip2 ; le remplacement pour LZMA utilitaire de compression)
|
p7zip
|
V:11, I:101 | 986 |
.7z
|
7zr(1), p7zip(1) | archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA) |
p7zip-full |
V:256, I:449 | 3895 |
.7z
|
7z(1), 7za(1) | archiveur de fichiers 7-Zip avec un haut taux de compression (compression LZMA et autres) |
lzop
|
V:4, I:42 | 112 |
.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:63, I:388 | 597 |
.zip
|
zip(1) | InfoZIP : outil d'archive et de compression DOS |
unzip
|
V:287, I:714 | 377 |
.zip
|
unzip(1) | InfoZIP : outil de désarchivage et de décompression DOS |
![]() |
Avertissement |
---|---|
Ne positionnez par la variable « |
![]() |
Note |
---|---|
L’archive
tar(1)
utilise l’extension de fichier « |
![]() |
Note |
---|---|
L’archive
tar(1)
utilise l’extension de fichier « |
![]() |
Note |
---|---|
La méthode de compression habituelle des outils FOSS tels que
tar(1)
a été modifiée de la manière suivante : |
![]() |
Note |
---|---|
cp(1), scp(1) et tar(1) peuvent avoir certaines limitations pour des fichiers spéciaux. cpio(1) est plus souples. |
![]() |
Note |
---|---|
cpio(1) est conçu pour être utilisé avec find(1) et d'autres commandes et est adapté à la création de scripts de sauvegarde car la partie correspondant à la sélection de fichier du script peut être testée indépendamment. |
![]() |
Note |
---|---|
La structure interne des fichiers de données d'OpenOffice sont des fichiers
« |
Voici un résumé d'outils simple de copie et de sauvegarde sur le système Debian system :
Tableau 10.2. Liste des outils de copie et de synchronisation
paquet | popcon | taille | outil | fonction |
---|---|---|---|---|
coreutils |
V:901, I:999 | 14184 | GNU cp | copier localement des fichiers et répertoires (« -a » pour récursif) |
openssh-client |
V:563, I:995 | 2276 | scp |
copier à distance des fichiers et des répertoires (client,
« -r » pour récursif)
|
openssh-server |
V:683, I:843 | 708 | sshd | copier à distance des fichiers et des répertoires (serveur distant) |
rsync
|
V:198, I:612 | 638 | - | synchronisation et sauvegarde distantes unidirectionnelles |
unison |
V:8, I:29 | 1987 | - | synchronisation et sauvegarde distantes bidirectionnelles |
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 |
---|---|
L’exécution du script |
![]() |
Astuce |
---|---|
Les outils de système de contrôle de version (VCS) de Tableau 10.15, « Liste d'outils pour les systèmes de contrôle de version » 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.
GNU tar(1) :
$ tar cvzf archive.tar.gz ./source $ tar xvzf archive.tar.gz
cpio(1) :
$ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; gzip archive.cpio $ zcat archive.cpio.gz | cpio -i
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 -av . /dest # cd ./source; rsync -av . user@host.dom:/dest
Vous pouvez, en remplacement, utiliser la syntaxe « un slash en fin du répertoire source ».
# rsync -av ./source/ /dest # rsync -av ./source/ 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)
« /chemin/vers/source/truc
»: GNU
tar(1)
et
cpio(1)
![]() |
Astuce |
---|---|
rsync(8)
et GNU
cp(1)
possèdent l’option « |
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 archive » et Section 10.1.4, « Idiomes pour la copie ») ou pour xargs(1) (consultez Section 9.5.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 (voit
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 /chemin/vers/ \ -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 /chemin/vers/horodatage -print0
Cela signifie que les actions suivantes doivent être effectuées :
rechercher tous les fichiers en partant de
« /chemin/vers
» ;
limiter globalement sa recherche à l’intérieur du système de fichiers et utilise ERE (consultez Section 1.6.2, « Expressions rationnelles ») ;
exclure les fichiers correspondant à l’expression rationnelle de
« .*\.cpio
» ou
« .*~
» de la recherche en arrêtant le
traitement ;
exclure les répertoire qui correspondent à l’expression rationnelle de
« .*/\.git
» de la recherche en arrêtant le
traitement ;
exclure fichiers plus gros que 99 Megaoctets (unités de 1048576 octets) de la recherche en arrêtant le traitement ;
afficher les noms de fichiers qui satisfont aux conditions de recherche
précédents et plus récents que
« /chemin/vers/horodatage
».
Remarquez l’utilisation idiomatique de « -prune
-o
» pour exclure les fichiers dans l’exemple ci-dessus.
![]() |
Note |
---|---|
Pur 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
« |
Nous savons tous que les ordinateurs sont parfois victimes de pannes ou que des erreurs humaines provoquent des dommages au système et auxdonné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 |
---|---|
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.
Ce qu'il faut sauvegarder et restaurer :
les fichiers que vous avez directement créé : 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.
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.
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é.
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 10.3, « 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 une accès facile depuis le menu : « Places→CD/DVD Creator :»).
![]() |
Note |
---|---|
Il faudra peut-être arrêter certains démons d'applications comme le MTA (consultez Section 6.3, « Agent de transport de courrier électronique (« MTA ») ») lors de la sauvegarde des données. |
![]() |
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
« |
![]() |
Note |
---|---|
Si vous faites tourner une tâche programmée (« cron » en tant que
processus d'utilisateur, vous devrez restaurer les fichiers de
« |
Voici une liste d'utilitaires de sauvegarde notables disponibles sur le système Debian :
Tableau 10.3. Liste de suites d'utilitaires de sauvegarde
paquet | popcon | taille | description |
---|---|---|---|
obnam
|
V:0, I:1 | 409 | sauvegarde incrémentale (distante) |
rdiff-backup |
V:13, I:29 | 704 | sauvegarde incrémentale (distante) |
dump
|
V:3, I:12 | 716 | BSD 4.4 dump(8) et restore(8) pour les systèmes de fichiers ext2/ext3 |
xfsdump |
V:1, I:20 | 595 | sauvegarder et restaurer avec xfsdump(8) et xfsrestore(8) pour le système de fichiers XFS sous GNU/Linux et IRIX |
backupninja |
V:4, I:5 | 277 | système de sauvegarde meta-backup léger et extensible |
sbackup |
V:0, I:0 | 488 | suite de sauvegarde simple pour le bureau GNOME |
bacula-common |
V:12, I:25 | 1148 | Bacula : sauvegarde, restauration et vérification par le réseau - fichiers communs |
bacula-client |
I:8 | 102 | Bacula : sauvegarde, restauration et vérification par le réseau - métapaquet du client |
bacula-console |
V:3, I:11 | 162 | Bacula : sauvegarde, restauration et vérification par le réseau - console en mode texte |
bacula-server |
I:4 | 102 | Bacula : sauvegarde, restauration et vérification par le réseau - métapaquet du serveur |
amanda-common |
V:3, I:6 | 6825 | Amanda : Advanced Maryland Automatic Network Disk Archiver (Libs). (Archiveur de disque par le réseau de Maryland avancé et automatique. |
amanda-client |
V:3, I:6 | 718 | Amanda : Advanced Maryland Automatic Network Disk Archiver (Client) |
amanda-server |
V:0, I:2 | 845 | Amanda : Advanced Maryland Automatic Network Disk Archiver (Serveur) |
backuppc |
V:7, I:9 | 1956 | BackupPC est un système de hautes performances pour effectuer la sauvegarde de PC au niveau de l’entreprise (basé sur disques) |
backup-manager |
V:3, I:5 | 615 | outil de sauvegarde en ligne de commandes |
backup2l |
V:1, I:2 | 86 | outil de sauvegarde et restauration de faible maintenance pur des support pouvant être montés (basé sur disque) |
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.
sbackup
et keep
fournissent une
interface graphique facile pour les utilisateurs de bureau afin
d'effectuerdes sauvegardes régulières des données de l’utilisateur. Une
fonction équivalente peut être réalisée par un simple script (Section 10.1.8, « Script d'exemple pour la sauvegarde du système ») et
cron(8).
Bacula, Amanda et BackupPC sont des suites de sauvegardes ayant des fonctionnalités avancées qui sont orientée vers les sauvegardes fréquentes au travers du réseau.
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 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 |
---|---|
Consultez les fichiers dans
« |
Pour un système de bureau personnel Debian sur lequel tourne la version
unstable
, je n'ai besoin de protéger que les données
personnelles et les données critiques. Je réinstalle cependant le système
une fois par an. Je ne vois donc aucune raison de sauvegarder l’ensemble du
système ou d'installer un utilitaire de sauvegarde ayant des fonctionnalités
avancées.
J'utilise un simple script pour réaliser des archives de sauvegarde et les graver sur CD/DVD en utilisant une interface graphique. Voici un exemple de script pour ce faire :
#!/bin/sh -e # Copyright (C) 2007-2008 Osamu Aoki <osamu@debian.org>, Public Domain BUUID=1000; USER=osamu # UID and name of a user who accesses backup files BUDIR="/var/backups" XDIR0=".+/Mail|.+/Desktop" XDIR1=".+/\.thumbnails|.+/\.?Trash|.+/\.?[cC]ache|.+/\.gvfs|.+/sessions" XDIR2=".+/CVS|.+/\.git|.+/\.svn|.+/Downloads|.+/Archive|.+/Checkout|.+/tmp" XSFX=".+\.iso|.+\.tgz|.+\.tar\.gz|.+\.tar\.bz2|.+\.cpio|.+\.tmp|.+\.swp|.+~" SIZE="+99M" DATE=$(date --utc +"%Y%m%d-%H%M") [ -d "$BUDIR" ] || mkdir -p "BUDIR" umask 077 dpkg --get-selections \* > /var/lib/dpkg/dpkg-selections.list debconf-get-selections > /var/cache/debconf/debconf-selections { find /etc /usr/local /opt /var/lib/dpkg/dpkg-selections.list \ /var/cache/debconf/debconf-selections -xdev -print0 find /home/$USER /root -xdev -regextype posix-extended \ -type d -regex "$XDIR0|$XDIR1" -prune -o -type f -regex "$XSFX" -prune -o \ -type f -size "$SIZE" -prune -o -print0 find /home/$USER/Mail/Inbox /home/$USER/Mail/Outbox -print0 find /home/$USER/Desktop -xdev -regextype posix-extended \ -type d -regex "$XDIR2" -prune -o -type f -regex "$XSFX" -prune -o \ -type f -size "$SIZE" -prune -o -print0 } | cpio -ov --null -O $BUDIR/BU$DATE.cpio chown $BUUID $BUDIR/BU$DATE.cpio touch $BUDIR/backup.stamp
C'est destiné à être un script d'exemple exécuté avec le compte de l’administrateur.
Vous devrez le modifier et l’exécuter comme suit :
éditez ce script afin de couvrir l’ensemble de vos données importantes (consultez Section 10.1.5, « Idiomes pour la sélection de fichiers » et Section 10.1.6, « Sauvegarde et restauration ») ;
remplacez « find … -print0
» par
« find … -newer $BUDIR/backup.stamp -print0
»
afin d'effectuer des sauvegardes incrémentales ;
transférez les sauvegardes sur la machine distante en utilisant scp(1) ou rsync(1) ou gravez-les sur CD/DVD pour plus de sécurité (j'utilise l’interface graphique du bureau GNOME pour graver les CD/DVD. Consultez Section 12.1.8, « Exemple de script avec zenity » pour une redondance supplémentaire).
Faites simple !
![]() |
Astuce |
---|---|
Vous pouvez récupérer les données de configuration de debconf avec
« |
Pour les données se trouvant sous l’arborescence d'un répertoire, une copie
avec « cp -a
» permet une sauvegarde normale.
Pour un gros ensemble de données statiques ne devant pas être réécrites se
trouvant dans une arborescence de répertoires telle que celle se trouvant
sous le répertoire
« /var/cache/apt/packages/
», les liens
physiques avec « cp -al
» fournissent une
alternative à la sauvegarde normale avec une utilisation efficace de
l’espace disque.
Voici un script de copie, que j'ai appelé bkup
, destiné à
la sauvegarde de données. Ce script copie tous les fichiers (non-VCS) du
répertoire actuel vers le répertoire daté du répertoire parent ou sur une
machine distante.
#!/bin/sh -e # Copyright (C) 2007-2008 Osamu Aoki <osamu@debian.org>, Public Domain fdot(){ find . -type d \( -iname ".?*" -o -iname "CVS" \) -prune -o -print0;} fall(){ find . -print0;} mkdircd(){ mkdir -p "$1";chmod 700 "$1";cd "$1">/dev/null;} FIND="fdot";OPT="-a";MODE="CPIOP";HOST="localhost";EXTP="$(hostname -f)" BKUP="$(basename $(pwd)).bkup";TIME="$(date +%Y%m%d-%H%M%S)";BU="$BKUP/$TIME" while getopts gcCsStrlLaAxe:h:T f; do case $f in g) MODE="GNUCP";; # cp (GNU) c) MODE="CPIOP";; # cpio -p C) MODE="CPIOI";; # cpio -i s) MODE="CPIOSSH";; # cpio/ssh t) MODE="TARSSH";; # tar/ssh r) MODE="RSYNCSSH";; # rsync/ssh l) OPT="-alv";; # lien physique (GNU cp) L) OPT="-av";; # copier (GNU cp) a) FIND="fall";; # tout rechercher A) FIND="fdot";; # rechercher ce qui n'est pas CVS/ .???/ x) set -x;; # trace e) EXTP="${OPTARG}";; # hostname -f h) HOST="${OPTARG}";; # utilisateur@remotehost.example.com T) MODE="TEST";; # tester le mode de recherche \?) echo "utiliser -x pour une trace." esac; done shift $(expr $OPTIND - 1) if [ $# -gt 0 ]; then for x in $@; do cp $OPT $x $x.$TIME; done elif [ $MODE = GNUCP ]; then mkdir -p "../$BU";chmod 700 "../$BU";cp $OPT . "../$BU/" elif [ $MODE = CPIOP ]; then mkdir -p "../$BU";chmod 700 "../$BU" $FIND|cpio --null --sparse -pvd ../$BU elif [ $MODE = CPIOI ]; then $FIND|cpio -ov --null | ( mkdircd "../$BU"&&cpio -i ) elif [ $MODE = CPIOSSH ]; then $FIND|cpio -ov --null|ssh -C $HOST "( mkdircd \"$EXTP/$BU\"&&cpio -i )" elif [ $MODE = TARSSH ]; then (tar cvf - . )|ssh -C $HOST "( mkdircd \"$EXTP/$BU\"&& tar xvfp - )" elif [ $MODE = RSYNCSSH ]; then rsync -rlpt ./ "${HOST}:${EXTP}-${BKUP}-${TIME}" else echo "Une autre idée à sauvegarder ?" $FIND |xargs -0 -n 1 echo fi
C'est destiné à être un exemple de commandes. Veuillez lire le script et le modifier vous-même avant de l’utiliser.
![]() |
Astuce |
---|---|
J'ai installé ce |
![]() |
Astuce |
---|---|
Pour faire un instantané historique d'une arborescence de fichiers sources ou d'une arborescence de fichiers de configuration, il est plus facile et efficace d'utiliser git(7) (consultez Section 10.9.5, « Git pour l’enregistrement de l’historique de la configuration »). |
Les périphériques d'enregistrement amovibles possibles sont les suivants.
Appareil photographique numérique
Lecteur de musique numérique
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
»
![]() |
Astuce |
---|---|
Les périphériques montés automatiquement pourraient avoir l'option de
montage « |
![]() |
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
« |
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 |
---|---|
Le choix du codage doit être fourni comme option de montage (consultez Section 8.3.6, « Coder les noms de fichiers »). |
Lors du partage de données avec d'autres système à 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.4. Liste de choix de systèmes de fichiers pour des périphériques amovibles avec des scénarios typiques d'utilisation
système de fichiers | description d'un scénario typique d'utilisation |
---|---|
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) |
NTFS | partage entre palateformes 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) |
système de fichiers MINIX | enregistrement efficace en matière d'espace disque de fichiers de données unix sur disquette |
système de fichiers ext2 | partage de données sur disque dur avec les anciens systèmes Linux |
système de fichiers ext3 | partage de données sur disque dur avec les anciens systèmes Linux |
système de fichiers ext4 | partage de données sur disque dur avec les systèmes Linux actuels |
![]() |
Astuce |
---|---|
Consultez Section 9.4.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 dans le but d'échanger 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 le choix sûr :
les partitionner avec fdisk(8), cfdisk(8) ou parted(8) (consultez Section 9.3.2, « Configuration de la partition du disque ») en une seule partition primaire et la marquer comme suit :
type « 6 » pour FAT16 pour les support faisant moins de 2Go.
type « c » pour FAT32 (LBA) pour les support plus gros.
formater la partition primaire avec mkfs.vfat(8) comme suit :
simplement son nom de périphérique, par exemple
« /dev/sda1
», pour la FAT16
L’option explicite et le nom de périphérique, par exemple
« -F 32 /dev/sda1
», pour la FAT32
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 |
---|---|
La taille maximum d'un fichier FAT, par conception, est de |
![]() |
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 leur « 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 |
---|---|
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 :
Tableau 10.5. Liste des services réseau à choisir avec le scénario typique d'utilisation
service réseau | description d'un scénario typique d'utilisation |
---|---|
SMB/CIFS système de fichiers monté avec Samba |
partage de fichiers par l’intermédiaire de « Microsoft Windows
Network », consultez
smb.conf(5)
et Le HOWTO et guide de
référence officiel de Samba 3.2. ou le paquet
samba-doc
|
système de fichiers monté au travers du réseau NFS avec le noyau Linux | partager des fichiers par « UNIX/Linux Network », consultez exports(5) et Linux NFS-HOWTO |
service HTTP | partager des fichiers entre client et serveur web |
service HTTPS | partager des fichiers entre le client et le serveur web avec un chiffrement Secure Sockets Layer (SSL) ou Transport Layer Security (TLS) |
service FTP | partager des fichiers entre serveur et client FTP |
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.10, « Autres serveurs d'applications réseau » et Section 6.11, « Autres clients d'applications réseau ».
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 support d'archive sur bande semblent être populaires pour les utilisations professionnelles).
![]() |
Note |
---|---|
Un coffre-fort anti-feu est destiné aux documents sur papier. La plupart des support 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 |
---|---|
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 |
---|---|
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 |
---|---|
Si vous devez faire des sauvegardes fréquentes et rapide d'un gros volume de données, un disque dur sur une liaison réseau à haute vitesse peut être la seule option réaliste. |
Nous discutons ici des manipulations sur l’image disque. Consultez aussi Section 9.3, « Astuces relatives au stockage des données ».
Le fichier image du disque, « disk.img
» d'un
périphérique non monté, par exemple, le second périphérique SCSI
« /dev/sdb
» peut être créé en utilisant
cp(1)
ou
dd(1)
par ce qui suit :
# cp /dev/sdb disque.img # dd if=/dev/sdb of=disque.img
L’image disque du master boot record (MBR) (secteur principal d'amorçage) (consultez Section 9.3.2, « Configuration de la partition du disque ») qui se trouve sur le premier secteur du disque primaire IDE peut être faite en utilisant dd(1) comme suit :
# dd if=/dev/hda of=mbr.img bs=512 count=1 # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
« mbr.img
» : MBR avec la table des
partitions
« mbr-nopart.img
» : MBR sans la table des
partitions
« part.img
» : table de partition du MBR
seul
Si vous avez un périphérique SCSI (y compris les nouveaux disques de type
serial ATA) comme disque d'amorçage, remplacez
« /dev/hda
» avec
« /dev/sda
».
Si vous réalisez une image d'une partition de disque du disque d'origine,
remplacez « /dev/hda
» par
« /dev/hda1
», etc.
Le fichier image du disque « disk.img
» peut
être écrit vers un disque non monté, par exemple le second disque SCSI
« /dev/sdb
» avec la taille correspondante par
ce qui suit :
# dd if=disk.img of=/dev/sdb
De la même manière, le fichier image de la partition du disque,
« partition.img
» peut être écrit sur une
partition non montée, par exemple, la première partition du second disque
SCSI « /dev/sdb1
» avec la taille
correspondante comme suit :
# dd if=partition.img of=/dev/sdb1
L’image disque « partition.img
», qui contient
une partition image unique, peut être monté et démonter en utilisant le
périphérique de rebouclage (loop device)
de la manière suivante :
# losetup -v -f partition.img Loop device is /dev/loop0 # mkdir -p /mnt/loop0 # mount -t auto /dev/loop0 /mnt/loop0 ...hack...hack...hack # umount /dev/loop0 # losetup -d /dev/loop0
Cela peut être simplifié de la manière suivante :
# mkdir -p /mnt/loop0 # mount -t auto -o loop partition.img /mnt/loop0 ...hack...hack...hack # umount partition.img
Chaque partition de l’image disque « disk.img
»
contenant plusieurs partitions peut être monté en utilisant le périphérique de rebouclage (loop device). Comme,
par défaut, le périphérique de rebouclage ne gère par par partitions, il
faut le réinitialiser de la manière suivante :
# modinfo -p loop # verify kernel capability max_part:Maximum number of partitions per loop device max_loop:Maximum number of loop devices # losetup -a # verify nothing using the loop device # rmmod loop # modprobe loop max_part=16
Maintenant, le périphérique de rebouclage peut gérer jusqu’à 16 partitions.
# losetup -v -f disk.img Loop device is /dev/loop0 # fdisk -l /dev/loop0 Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x452b6464 Device Boot Start End Blocks Id System /dev/loop0p1 1 600 4819468+ 83 Linux /dev/loop0p2 601 652 417690 83 Linux # mkdir -p /mnt/loop0p1 # mount -t ext3 /dev/loop0p1 /mnt/loop0p1 # mkdir -p /mnt/loop0p2 # mount -t ext3 /dev/loop0p2 /mnt/loop0p2 ...hack...hack...hack # umount /dev/loop0p1 # umount /dev/loop0p2 # losetup -d /dev/loop0
En remplacement, des effets similaires peuvent être obtenus en utilisant les
périphériques device mapper créés par
kpartx(8)
du paquet kpartx
de la manière suivante :
# kpartx -a -v disk.img ... # mkdir -p /mnt/loop0p2 # mount -t ext3 /dev/mapper/loop0p2 /mnt/loop0p2 ... ...hack...hack...hack # umount /dev/mapper/loop0p2 ... # kpartx -d /mnt/loop0
![]() |
Note |
---|---|
Vous pouvez monter une partition unique d'une telle image de disque avec le périphérique de rebouclage en utilisant un décalage pour sauter le MBR ou autre. Mais c'est susceptible d'induire des erreurs. |
Un fichier image disque « disk.img
» peut être
nettoyé de tous les fichiers supprimés pour donner une image propre
« new.img
» de la manière suivante :
# mkdir old; mkdir new # mount -t auto -o loop disk.img old # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G # mount -t auto -o loop new.img new # cd old # cp -a --sparse=always ./ ../new/ # cd .. # umount new.img # umount disk.img
Si « disk.img
» est un système de fichiers ext2
ou ext3, vous pouvez aussi utiliser
zerofree(8)
du paquet zerofree
de la manière suivante :
# losetup -f -v disk.img Loop device is /dev/loop3 # zerofree /dev/loop3 # cp --sparse=always disk.img new.img
Le fichier image du disque vide « sparse
», qui
pourra s'étendre jusqu'à 5Gio peut être faite en utilisant
dd(1)
et
mke2fs(8)
comme suit :
$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G
Vous pouvez créer un système de fichiers ext3 sur cette image disque
« disk.img
» en utilisant le périphérique de rebouclage (loop device) de la
manière suivante :
# losetup -f -v disk.img Loop device is /dev/loop1 # mkfs.ext3 /dev/loop1 ...hack...hack...hack # losetup -d /dev/loop1 $ du --apparent-size -h disk.img 5.0G disk.img $ du -h disk.img 83M disk.img
Pour « disk.img
», sa taille de fichier de 5.0
Gio et son utilisation disque est uniquement de 83Mio. Cette discordance est
possible car ext2fs sait maintenir un fichier sparse.
![]() |
Astuce |
---|---|
L’utilisation réelle sur le disque du fichier sparse croît au fur et à mesure qu'on y écrit des données . |
En utilisant des opérations similaires sur les périphériques créés par
loop device ou les périphériques device mapper comme dans Section 10.2.3, « Monter le fichier image dur disque », vous pouvez partitionner cette
image disque « disk.img
» en utilisant
parted(8)
ou
fdisk(8),
et y créer un système de fichiers en utilisant
mkfs.ext3(8),
mkswap(8),
etc.
On peut faire le fichier image ISO9660,
« cd.iso
», depuis l’arborescence de répertoire
source située à « répertoire_source
», en
utilisant
genisoimage(1)
fourni parcdrkit de la manière suivante :
# genisoimage -r -J -T -V volume_id -o cd.iso répertoire_source
De la même manière, on peut créer le fichier image ISO9660 amorçable
« cdboot.iso
» depuis une arborescence comme
celle de debian-installer
située en
« source_directory
», de la manière
suivante :
# genisoimage -r -o cdboot.iso -V volume_id \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table répertoire_source
Ici, le chargeur d'amorçage Isolinux (consultez Section 3.3, « Étage 2 : le chargeur initial ») est utilisé pour l’amorçage.
Vous pouvez calculer la valeur de la somme md5 (md5sum) et construire des image ISO9660 directement depuis un lecteur de CD-ROM de la manière suivante :
$ isoinfo -d -i /dev/cdrom CD-ROM is in ISO 9660 format ... Logical block size is: 2048 Volume size is: 23150592 ... # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
![]() |
Avertissement |
---|---|
Vous devrez prendre garde à éviter le bogue de lecture anticipée du système de fichiers ISO9660 de Linux comme ci-dessus afin d’obtenir les résultats corrects. |
![]() |
Astuce |
---|---|
Un DVD n'est qu'un gros CD pour wodim(1) qui est fourni par cdrkit. |
Vous pouvez rechercher un périphérique utilisable comme suit :
# wodim --devices
Le CD-R vierge est alors inséré dans le graveur de CD et le fichier image
ISO9660 « cd.iso
» est écrit vers le
périphérique, par exemple; « /dev/hda
» en
utilisant
wodim(1)
de la manière suivante :
# wodim -v -eject dev=/dev/hda cd.iso
Si un CD-RW est utilisé à la place d'un CD-R, faites alors ce qui suit :
# wodim -v -eject blank=fast dev=/dev/hda cd.iso
![]() |
Astuce |
---|---|
Si votre système de bureau monte automatiquement les CD, démontez-le par la
commande « |
Si « cd.iso
» contient une image ISO9660, ce
qui suit permet alors de le monter manuellement sur
« /cdrom
» :
# mount -t iso9660 -o ro,loop cd.iso /cdrom
![]() |
Astuce |
---|---|
Les systèmes de bureau modernes montent automatiquement les supports amovibles (consultez Section 10.1.10, « Périphériques d'enregistrement amovibles »). |
Sous allons ici discuter aussi de la manipulation directe des données binaires sur le support d'enregistrement. Consultez Section 9.3, « Astuces relatives au stockage des données ».
La méthode la plus basique de visualiser des données binaires est d'utiliser
la commande « od -t x1
».
Tableau 10.6. Liste des paquets permettant de visualiser et d'éditer des données binaires
paquet | popcon | taille | description |
---|---|---|---|
coreutils |
V:901, I:999 | 14184 | paquet de base utilisant od(1) pour vider des fichiers (HEX, ASCII, OCTAL, …) |
bsdmainutils |
V:867, I:999 | 558 | paquets utilitaires qui utilisent hd(1) pour vider les fichiers (HEX, ASCII, OCTAL, …) |
hexedit |
V:2, I:17 | 108 | éditeurs et visualisateurs binaires (HEX, ASCII) |
bless
|
V:0, I:4 | 991 | éditeur hexadécimal complet (GNOME) |
okteta |
V:5, I:44 | 321 | éditeur hexadécimal complet (KDE4) |
ncurses-hexedit |
V:0, I:4 | 192 | éditeur et visualisateur binaire (HEX, ASCII, EBCDIC) |
beav
|
V:0, I:2 | 164 | éditeur et visualisateur binaire (HEX, ASCII, EBCDIC, OCTAL, …) |
![]() |
Astuce |
---|---|
HEX is used as an acronym for hexadecimal format with radix 16. OCTAL is for octal format with radix 8. ASCII pour Code américain standard pour l’échange d'informations (« American Standard Code for Information Interchange ») c'est-à-dire le code pour texte normal en anglais. EBCDIC signifie Code d'échange étendu décimal codé binaire (« Extended Binary Coded Decimal Interchange Code »), il est utilisé avec par les systèmes d'exploitation des mainframe IBM. |
Il existe des outils permettant de lire et d'écrire des fichier sans avoir à monter le disque.
Les systèmes s'appuyant sur le RAID logiciel offert par le noyau Linux permettent une redondance des données au niveau du système de fichiers du noyau afin d'obtenir un haut niveau de fiabilité du système de stockage.
Il existe aussi des outils pour ajouter des données de redondance aux fichiers au niveau du programme applicatif permettant d'obtenir de hauts niveau de fiabilité de stockage.
Tableau 10.8. Liste d'outils pour ajouter des données de redondance aux fichiers
paquet | popcon | taille | description |
---|---|---|---|
par2
|
V:5, I:17 | 272 | Parity Archive Volume Set, pour vérifier et réparer des fichiers |
dvdisaster |
V:0, I:5 | 1481 | protection des supports CD et DVD contre les pertes de données, les rayures et le vieillissement |
dvbackup |
V:0, I:0 | 392 | outil de sauvegarde utilisant des caméscopes MiniDV (fournissant rsbep(1)) |
vdmfec |
V:0, I:0 | 88 | récupération de blocs en utilisant une correction d'erreur vers l’avant (« Forward Error Correction ») |
Il y a des outils pour la récupération des données et l’analyse par autopsie.
Tableau 10.9. Liste de paquets pour pour la récupération de données et l’analyse par autopsie
paquet | popcon | taille | description |
---|---|---|---|
testdisk |
V:4, I:40 | 1153 | utilitaires pour l’examen de partitions et la récupération de disque |
magicrescue |
V:0, I:4 | 344 | utilitaire pour la récupération de fichiers et de recherchedes octets magiques |
scalpel |
V:0, I:3 | 124 | récupérateur de fichiers sobre de haute performance |
myrescue |
V:0, I:1 | 84 | récupérer des données depuis des disques endommagés |
recover |
V:0, I:4 | 104 | utilitaire pour récupérer des fichiers effacés d'un système de fichiers ext2 |
e2undel |
V:0, I:4 | 244 | utilitaire pour récupérer des fichiers effacés d'un système de fichiers ext2 |
ext3grep |
V:0, I:5 | 286 | outil pour aider à la récupération de fichiers effacés sur un système de fichiers ext3 |
scrounge-ntfs |
V:0, I:3 | 80 | programme de récupération de données pour les systèmes de fichiers NTFS |
gzrt
|
V:0, I:0 | 56 | boîte à outils de récupération gzip |
sleuthkit |
V:0, I:5 | 750 | outil pour autopsie (« forensics analysis« ». (Sleuthkit) |
autopsy |
V:0, I:3 | 1372 | interface graphique à SleuthKit |
foremost |
V:1, I:8 | 83 | application d'autopsie pour la récupération de données |
guymager |
V:0, I:0 | 949 | outil de création d'image d'autopsie basée sur Qt |
dcfldd |
V:0, I:2 | 109 |
version améliorée de dd pour les autopsie et la sécurité
|
rdd
|
V:0, I:0 | 200 | programme de copie pour autopsie |
Lorsque les données ont un volume trop important pour pouvoir être sauvegardée dans un seul fichier, vous pouvez en sauvegarder le contenu après l’avoir éclaté en morceaux de, par exemple, 2000Mio et réassembler ces morceaux par la suite sous la forme du fichier d'origine.
$ split -b 2000m gros_fichier $ cat x* >gros_fichier
![]() |
Attention |
---|---|
Assurez-vous ne pas pas avoir de nom de fichier commençant par
« |
Pour effacer le contenu d'un fichier comme, par exemple, un fichier journal, n'utilisez pas la commande rm(1) pour supprimer le fichier et recréer ensuite un fichier vide parce qu'on peut encore accéder au fichier dans l’intervalle entre les commandes. Voici est la manière sûre d'effacer le contenu d'un fichier :
$ :>fichier_a_effacer
Les commandes suivantes créent des fichiers factices ou vides.
$ dd if=/dev/zero of=5kb.file bs=1k count=5 $ dd if=/dev/urandom of=7mb.file bs=1M count=7 $ touch zero.file $ : > alwayszero.file
Vous obtiendrez les fichiers suivants :
« 5kb.file
» avec 5K de zéros ;
« 7mb.file
» avec 7Mo de données
aléatoires ;
« zero.file
» devrait être un fichier de 0
octet. S'il existait, son mtime
est mis à jour alors que
son contenu et sa taille sont conservés ;
« alwayszero.file
fait toujours 0 octet. S'il
existait son mtime
est mis à jour et son contenu vidé.
Il existe plusieurs manière d'effacer complètement les données d'un
périphérique semblable à disque dur, par exemple, une clé USB se trouvant en
« /dev/sda
».
![]() |
Attention |
---|---|
Vérifiez d'abord l’emplacement de votre clé USB avec
mount(8)
avant d'exécuter ces commandes. Le périphérique pointé par
« |
Effacer tout le contenu du disque en réinitialisant toutes les données à 0 avec la commande suivante :
# dd if=/dev/zero of=/dev/sda
Tout effacer en écrasant les données existantes par des données aléatoires par la commande suivante :
# dd if=/dev/urandom of=/dev/sda
Effacer de manière très efficace toutes les données en les écrasant avec des données aléatoires par la commande suivante :
# shred -v -n 1 /dev/sda
Comme
dd(1)
est disponible depuis l’interpréteur de commandes de nombreux CD amorçables
de Linux tels que le CD de l’installateur Debian, vous pouvez effacer
complètement votre système installé en lançant la commande d'effacement du
disque du disque dur du système, par exemple,
« /dev/hda
»,
« /dev/sda
», etc. depuis un tel support,
Une zone inutilisée du disque dur (ou d’une clé mémoire USB), par
ex. « /devsdb1
» peut encore contenir les
données effacées elles-mêmes puisque elle ne sont que déliées du système de
fichiers. Elles peuvent être nettoyées en les surchargeant.
# mount -t auto /dev/sdb1 /mnt/foo # cd /mnt/foo # dd if=/dev/zero of=junk dd: writing to `junk': No space left on device ... # sync # umount /dev/sdb1
![]() |
Avertissement |
---|---|
C'est en général suffisamment bon pour votre clé mémoire USB. Mais ce n’est pas parfait. La plupart des noms des fichiers effacés et leurs attributs peut être cachés et restés dans le système de fichiers. |
Même si vous avez accidentellement supprimé un fichier, tant que ce fichier est en cours d'utilisation par une application quelconque, (en mode lecture ou écriture); il est possible de récupérer un tel fichier.
Essayez, par exemple, ce qui suit :
$ echo toto > titi $ less titi $ ps aux | grep ' less[ ]' bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less titi $ rm titi $ ls -l /proc/4775/fd | grep titi lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/titi (deleted) $ cat /proc/4775/fd/4 >titi $ ls -l -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 titi $ cat titir toto
Exécutez sur une autre terminal (lorsque vous avez le paquet
lsof
installé) comme suit
$ ls -li titi 2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 titi $ lsof |grep titi|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/titi $ rm titi $ lsof |grep titi|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/titi (deleted) $ cat /proc/4775/fd/4 >titi $ ls -li titi 2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 titi $ cat titi toto
Les fichiers ayant des liens physiques peuvent être identifiés par
« ls -li
».
$ ls -li total 0 2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 titi 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 tutu 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 toto
« tutu
» et
« toto
» ont tous les deux un nombre de liens
égal à "« 2 » (>1), ce qui indique qu'ils ont des liens
physiques. Leur numéro d'inœud commun est
« 2738404 ». Cela signifie qu'ils représentent le même fichier lié
par des liens physiques. Si vous n'arrivez pas à trouver de fichiers liés
par des liens physiques, vous pouvez les rechercher parinœud, par exemple « 2738404 », de la
manière suivante :
# find /chemin/vers/point/de/montage -xdev -inum 2738404
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.
Tableau 10.10. Liste es outils d'une infrastructure de sécurité des données
paquet | popcon | taille | commande | description |
---|---|---|---|---|
gnupg
|
V:482, I:998 | 4957 | gpg(1) | GNU Privacy Guard - outil de signature et de chiffrement OpenPGP |
gnupg-doc |
I:8 | 4124 | N/A | documentation de GNU Privacy Guard |
gpgv
|
V:568, I:997 | 433 | gpgv(1) | GNU Privacy Guard - outil de vérification de signature |
paperkey |
V:0, I:0 | 88 | paperkey(1) | n'extraire que l’information secrète de clés secrètes OpenPGP |
cryptsetup |
V:46, I:63 | 295 | cryptsetup(8), … | utilitaires pour périphérique en mode bloc dm-crypto prenant en charge le chiffrement LUKS |
ecryptfs-utils |
V:4, I:6 | 308 | ecryptfs(7), … | utilitaires pour le chiffrement de systèmes de fichiers empilés ecryptfs |
coreutils |
V:901, I:999 | 14184 | md5sum(1) | calculer et vérifier un condensé MD5 de message |
coreutils |
V:901, I:999 | 14184 | sha1sum(1) | calculer et vérifier un condensé SHA1 de message |
openssl |
V:752, I:969 | 1080 | openssl(1ssl) |
calculer un condensé de message avec « openssl
dgst » (OpenSSL)
|
Consultez Section 9.4, « Astuces de chiffrement des données » sur dm-crypto et ecryptfs qui implémente l’infrastructure de chiffrement automatique des données par l’intermédiaire de modules du noyau de Linux.
Voici les commandes de GNU Privacy Guard pour la gestion de base des clés :
Tableau 10.11. Liste des commandes de GNU Privacy Guard pour la gestion des clés
commande | description |
---|---|
gpg --gen-key
|
générer une nouvelle clé |
gpg --gen-revoke ID_de_mon_utilisateur
|
générer une clé de révocation pour ID_de_mon_utilisateur |
gpg --edit-key ID_utilisateur
|
éditer la clé de manière interactive, « help » pour obtenir de l’aide |
gpg -o fichier --exports
|
exporter toutes les clés vers fichier |
gpg --imports fichier
|
importer toutes les clés depuis fichier |
gpg --send-keys ID_utilisateur
|
envoyer la clé de ID_utilisateur vers le serveur de clés |
gpg --recv-keys ID_utilisateur
|
recevoir la clé de ID_utilisateur du serveur de clés |
gpg --list-keys ID_utilisateur
|
afficher la liste des clés de ID_utilisateur |
gpg --list-sigs ID_utilisateur
|
afficher la liste des signatures de ID_utilisateur |
gpg --check-sigs ID_utilisateur
|
vérifier la signature de ID_utilisateur |
gpg --fingerprint ID_utilisateur
|
vérifier l’empreinte de ID_utilisateur |
gpg --refresh-keys
|
mettre à jour le porte-clé local |
Voici la signification du code de confiance
Tableau 10.12. Liste de la signification des codes de confiance
code | description de la confiance |
---|---|
-
|
pas de confiance d'utilisateur assignée / pas encore calculée |
e
|
échec du calcul de la confiance |
q
|
pas assez d'informations pour le calcul |
n
|
ne jamais faire confiance à cette clé |
m
|
confiance marginale |
f
|
confiance complète |
u
|
confiance ultime |
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 corrompais 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.13. Liste des commandes de GNU Privacy Guard sur des fichiers
commande | description |
---|---|
gpg -a -s fichier
|
signer fichier dans le 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 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 fichier avec fichier.sig |
gpg -o fichier_chiffré.gpg -r nom -e fichier
|
chiffrement par clé publique destiné au « nom » depuis un le « fichier » vers « fichier_chiffré.gpg » |
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 ASCII blindé fichier_chiffré.asc |
gpg -o fichier -d fichier_crypt.gpg -r nom
|
déchiffrement |
gpg -o fichier --decrypt fichier_chiffré.gpg
|
, , |
Ajoutez ce qui suit à « ~/.muttrc
» afin
d'éviter que GnuPG qui est lent ne démarre automatiquement, tout en
permettant sont utilisation en entrant « S
»
depuis l’index du menu :
macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no
Le greffon gnupg
vous permet de lancer GnuPG de manière
transparente pour les fichiers ayant l’extension
« .gpg
», « .asc
»
et « .ppg
».
# aptitude install vim-scripts vim-addon-manager $ vim-addons install gnupg
md5sum(1) fournit un utilitaire permettant de créé 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 toto titi >tutu.md5 $ cat tut.md5 d3b07384d113edec49eaa6238ad5ff00 toto c157a79031e1c40f85931829bc5fc552 titi $ md5sum -c tutu.md5 toto: OK titi: OK
![]() |
Note |
---|---|
Le calcule de somme de contrôle MD5 consomme moins de ressources processeur que celle utilisée pour le chiffrement des signature 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.14. Liste d'outils destinés à fusionner du code source
paquet | popcon | taille | commande | description |
---|---|---|---|---|
diffutils |
V:735, I:826 | 1114 | diff(1) | comparer des fichier ligne à ligne |
diffutils |
V:735, I:826 | 1114 | diff3(1) | comparer et fusionner trois fichiers ligne par ligne |
vim
|
V:167, I:399 | 1877 | vimdiff(1) | comparer deux fichiers côte à côte dans vim |
patch
|
V:144, I:943 | 218 | patch(1) | appliquer un fichier de différence (« diff ») à un original |
dpatch |
V:6, I:65 | 237 | dpatch(1) | gérer une série de rustines (patches) pour les paquets Debian |
diffstat |
V:19, I:144 | 45 | diffstat(1) | afficher un histogramme des modifications apportées par le fichier de différences |
patchutils |
V:15, I:119 | 221 | combinediff(1) | créer une rustine (patch) cumulative à partir de deux rustines incrémentales |
patchutils |
V:15, I:119 | 221 | dehtmldiff(1) | extraire un fichier de différence d'une page HTML |
patchutils |
V:15, I:119 | 221 | filterdiff(1) | extraire ou exclure des différences d'un fichier de différences |
patchutils |
V:15, I:119 | 221 | fixcvsdiff(1) | corriger les fichiers de différences créés par CVS que patch(1) interprète mal |
patchutils |
V:15, I:119 | 221 | flipdiff(1) | échanger l’ordre de deux rustines |
patchutils |
V:15, I:119 | 221 | grepdiff(1) | afficher quels sont les fichiers modifiés par une rustine correspondant un une expression rationnelle |
patchutils |
V:15, I:119 | 221 | interdiff(1) | afficher les différences entre deux fichiers de différence unifiés |
patchutils |
V:15, I:119 | 221 | lsdiff(1) | afficher quels sont les fichiers modifiés par une rustine |
patchutils |
V:15, I:119 | 221 | recountdiff(1) | recalculer les nombres et les décalages dans un contexte unifié de fichiers de différences |
patchutils |
V:15, I:119 | 221 | rediff(1) | corriger les décalages et les nombres d'un fichier de différence édité manuellement |
patchutils |
V:15, I:119 | 221 | splitdiff(1) | séparer les rustines incrémentales |
patchutils |
V:15, I:119 | 221 | unwrapdiff(1) | réparer les correctifs dont les mots ont été coupés |
wiggle |
V:0, I:0 | 203 | wiggle(1) | appliquer les rustines rejetées |
quilt
|
V:12, I:92 | 814 | quilt(1) | gérer une série de rustines |
meld
|
V:9, I:38 | 2023 | meld(1) | comparer et fusionner des fichiers (GTK) |
dirdiff |
V:0, I:5 | 224 | dirdiff(1) | afficher les différences et fusionner les modifications entre deux arbres de répertoires |
docdiff |
V:0, I:0 | 543 | docdiff(1) | comparer deux fichier mot par mot ou caractère par caractère |
imediff2 |
V:0, I:0 | 76 | imediff2(1) | outil en plein écran pour fusionner dans les deux sens |
makepatch |
V:0, I:0 | 148 | makepatch(1) | créer des fichiers de rustines étendues |
makepatch |
V:0, I:0 | 148 | applypatch(1) | appliquer des fichiers de rustines étendues |
wdiff
|
V:15, I:141 | 902 | wdiff(1) | afficher les différences de mots entre deux fichiers texte |
Suivez une des procédures suivantes pour extraire les différences entre deux
fichiers sources et créer un fichier de différences unifiées
« fichier.patch0
» ou
« fichier.patch1
» selon l’emplacement du
fichier.
$ diff -u fichier.ancien fichier.nouveau > fichier.patch0 $ diff -u ancien/fichier.nouveau/fichier > fichier.patch1
Le fichier de différence (« diff » (encore appelé fichier « patch » ou rustine) est utilisé pour envoyer une mise à jour de programme. Celui qui reçoit applique cette mise à jour à un autre fichier de la manière suivante :
$ patch -p0 fichier < fichier.patch0 $ patch -p1 fichier < fichier.patch1
Voici un résumé des systèmes de contrôle de version (VCS) sur le système Debian.
![]() |
Note |
---|---|
Si vous débutez avec les systèmes VCS, vous devriez commencer votre apprentissage avec Git, dont la popularité croît rapidement. |
Tableau 10.15. Liste d'outils pour les systèmes de contrôle de version
paquet | popcon | taille | outil | type du VCS | commentaire |
---|---|---|---|---|---|
cssc
|
V:0, I:0 | 2240 | CSSC | local | clone de SCCS UNIX (obsolète) |
rcs
|
V:8, I:44 | 1211 | RCS | local | « SCCS UNIX en mieux » |
cvs
|
V:19, I:130 | 4059 | CVS | distant | standard précédent de VCS distant |
subversion |
V:81, I:283 | 3899 | Subversion | distant | « CVS en mieux », de fait le nouveau standard de VCS distant |
git
|
V:130, I:414 | 13134 | Git | distribué | DVCS rapide en C (utilisé par le noyau de Linux et d'autres) |
mercurial |
V:20, I:79 | 371 | Mercurial | distribué | DVCS en Python avec un peut de C |
bzr
|
V:9, I:39 | 98 | Bazaar | distribué |
DVCS influencé par tla écrit en Python (utilisé par
Ubuntu)
|
darcs
|
V:1, I:10 | 13424 | Darcs | distribué | DVCS avec une algèbre intelligente des patches (lent) |
tla
|
V:1, I:11 | 881 | GNU arch | distribué | DVCS principalement de Tom Lord (Historique) |
monotone |
V:0, I:2 | 5150 | Monotone | distribué | DVCS en C++ |
tkcvs
|
V:0, I:3 | 1400 | CVS, … | distant | Interface graphique d'affichage d'une arborescence de dépôt VCS (CVS, Subversion, RCS) |
gitk
|
V:11, I:52 | 1048 | Git | distribué | Interface graphique d'affichage d'une arborescence de dépôt VCS (Git) |
VCS est parfois appelé système de contrôle de révision (RCS), ou gestion de configuration logicielle (SCM).
Un VCS distribué comme Git est, de nos jours, l’outil de choix. CVS etSubversion peuvent continuer à être utiles pour se joindre à certaines activités existantes sur les logiciels libres.
Debian fournit des services de VCS libres depuis le service Debian Alioth. Il prend en charge pratiquement tous les VCS. Sa documentation se trouve sur http://wiki.debian.org/Alioth .
Il existe quelques bases pour la création d'un accès à une archive VCS.
Utilisez « umask 002
» (consultez Section 1.2.4, « Contrôle des permissions pour les fichiers nouvellement créés : umask »)
Rattacher tous les fichiers d’archives VCS à un groupe pertinent
Activer l’identifiant de groupe de tous les répertoires d’archive VCS (schéma de création de fichiers semblable à BSD), consultez Section 1.2.3, « Permissions du système de fichiers »)
Rattacher au groupe l’utilisateur partageant l’archive VCS
Voici une comparaison très simplifiée des commandes natives de VCS destinées à donner une vue d'ensemble. La séquences commandes typique peut demander des options et des paramètres.
Tableau 10.16. Comparaison des commandes natives de VCS
CVS | Subversion | Git | fonction |
---|---|---|---|
cvs init
|
svn create
|
git init
|
créer le dépôt (local) |
cvs login
|
- | - | se connecter au dépôt distant |
cvs co
|
svn co
|
git clone
|
vérifiez le dépôt distant comme arborescence de travail |
cvs up
|
svn up
|
git pull
|
mettre à jour l’arborescence de travail depuis le dépôt distant |
cvs add
|
svn add
|
git add .
|
ajouter des fichiers de l’arborescence de travail vers le VCS |
cvs rm
|
svn rm
|
git rm
|
supprimer du VCS des fichiers de l’arborescence de travail |
cvs ci
|
svn ci
|
- | déposer des modification au dépôt distant |
- | - |
git commit -a
|
déposer des modification sur le dépôt local |
- | - |
git push
|
mettre à jour le dépôt distant à l’aide du dépôt local |
cvs status
|
svn status
|
git status
|
afficher l’état de l’arborescence de travail d'après le VCS |
cvs diff
|
svn diff
|
git diff
|
diff <dépôt_de_référence> <arborescence_de_travail> |
- | - |
git repack -a -d; git prune
|
réempaqueter le dépôt local en un seul paquet |
tkcvs
|
tkcvs
|
gitk
|
Interface graphique d'affichage de l’arborescence d'un dépôt VCS |
![]() |
Attention |
---|---|
L’appel d'une sous-commande |
![]() |
Astuce |
---|---|
Des outils avec interface graphique comme tkcvs(1) et gitk(1) vous seront d'une aide appréciable pour le suivi de l’historique de révision des fichiers. L’interface Web fournies par de nombreuses archives publiques pour parcourir leurs dépôts est assez utile aussi. |
![]() |
Astuce |
---|---|
Git peut travailler directement avec différents dépôts VCS tels que ceux
proposés par CVS et Subversion et il fournit un dépôt local pour les
modifications locales à l’aide des paquets |
![]() |
Astuce |
---|---|
Git possède des commandes qui n'ont pas d'équivalent dans CVS ni Subversion : « fetch », « rebase », « cherry-pick », … |
Consultez ce qui suit :
cvs(1)
« /usr/share/doc/cvs/html-cvsclient
»
« /usr/share/doc/cvs/html-info
»
« /usr/share/doc/cvsbook
»
« info cvs
»
La configuration suivante permet de ne faire des dépôts
(« commit ») vers le dépôt du CVS que par les membres du groupe
« src
» et l’administration du CVS que par un
membre du groupe « staff
», réduisant ainsi la
chance de se détruire soi-même.
# cd /var/lib; umask 002; mkdir cvs # export CVSROOT=/srv/cvs/projet # cd $CVSROOT # chown root:src . # chmod 2775 . # cvs -d $CVSROOT init # cd CVSROOT # chown -R root:staff . # chmod 2775 . # touch val-tags # chmod 664 history val-tags # chown root:src history val-tags
![]() |
Astuce |
---|---|
Vous pouvez restreindre la création d'un nouveau projet en modifiant le
propriétaire du répertoire « |
La variable « $CVSROOT
» pointe vers le dépôt
par défaut. Ce qui suit définit « $CVSROOT
»
pour l’accès local :
$ export CVSROOT=/srv/cvs/project
De nombreux serveurs CVS d'accès public fournissent un accès distant en
lecture avec le nom de compte « anonymous
» par
l’intermédiaire du service pserver. Par exemple, le contenu du site web
Debian est maintenu par l’intermédiaire du projet webwml sous le CVS du service alioth de
Debian. Ce qui suit permet de configurer
« $CVSROOT
» pour un accès distant à ce dépôt
CVS :
$ export CVSROOT=:pserver:anonymous@cvs.alioth.debian.org:/cvsroot/webwml $ cvs login
![]() |
Note |
---|---|
Comme pserver est sujet à des attaques d'espionnage et peu sûr, l’accès en écriture est habituellement désactivé par les administrateurs du serveur. |
Ce qui suit définit « $CVS_RSH
» et
» $CVSROOT
» pour l’accès distant avec SSH au
dépôt CVS du projet webwml :
$ export CVS_RSH=ssh $ export CVSROOT=:ext:account@cvs.alioth.debian.org:/cvs/webwml
Vous pouvez aussi utiliser une clé publique d'authentification pour SSH, ce qui élimine l’invite à distance pour l’entrée du mot de passe.
Créez un nouvel emplacement d'arborescence locale des sources dans
« ~/chemin/vers/module1
» par la commande
suivante :
$ mkdir -p ~/chemin/vers/module1; cd ~/chemin/vers/module1
Mettez des fichiers dans la nouvelles arborescence locale de sources se
trouvant en « ~/chemin/vers/module1
».
Importez-les vers CVS avec les paramètres suivants :
Module name : « module1
»
Vendor tag: « Branche-principale
» (étiquette
pour toute la branche)
Release tag: « Version-initiale
» (étiquette
pour une version spécifique)
$ cd ~/chemin/vers/module1 $ cvs import -m "Start module1" module1 Branche-principale Version-initiale $ rm -Rf . # optionnel
CVS n'écrase pas un fichier du dépôt actuel mais le remplace par un
autre. La permission en écriture vers le répertoire du dépôt est donc
critique. Lancez ce qui suit, pour chaque nouveau module de
« module1
» dans le dépôt à
« /srv/cvs/projet
», afin de vous assurer, si
nécessaire, que cette condition est remplie :
# cd /srv/cvs/projet # chown -R root:src module1 # chmod -R ug+rwX module1 # chmod 2775 module1
Voici un exemple de flux de travail typique utilisant CVS.
Vérifiez tous les modules disponibles du projet CVS pointé par
« $CVSROOT
» comme suit :
$ cvs rls CVSROOT module1 module2 ...
Récupérez le « module1
» depuis son répertoire
par défaut « ./module1
» de la manière
suivante :
$ cd ~/path/to $ cvs co module1 $ cd module1
Effectuez les modifications de contenu au besoin.
Vérifiez les modifications par un équivalent de « diff -u
[repository] [local]
» de la manière suivante :
$ cvs diff -u
Vous-vous apercevez que vous avez cassé sévèrement un fichier appelé
« fichier_à_restaurer
» mais que les autres
fichiers sont corrects.
Écrasez le fichier « fichier_à_restaurer
» avec
une copie propre venant du CVS de la manière suivante :
$ cvs up -C fichier_à_restaurer
Enregistrez l’arborescence source locale vers le CVS comme suit :
$ cvs ci -m "Décrire les modifications"
Créez et ajoutez le fichier
« fichier_à_ajouter
» au CVS comme suit :
$ vi fichier_à_ajouter $ cvs add fichier_à_ajouter $ cvs ci -m "Ajout de fichier_à_ajouter"
Fusionnez la dernière version depuis le CVS comme suit :
$ cvs up -d
Recherchez les lignes commençant par « C
filename
» qui indiquent des modifications en conflit.
Recherchez du code non modifié dans
« .#nom_fichier.version
».
Recherchez « <<<<<<<
» et
« >>>>>>>
» dans les
fichiers qui indiquent des conflits de modifications.
Au besoin, éditez les fichiers pour résoudre les conflits.
Ajoutez l’étiquette de version (« release tag« »)
« Version-1
» comme suit :
$ cvs ci -m "dernière proposition pour Version-1" $ cvs tag Version-1
Poursuivez l’édition.
Supprimez l’étiquette de version « Version-1
»
comme suit :
$ cvs tag -d Version-1
Vérifiez les modifications du CVS comme suit :
$ cvs ci -m "vraiment la dernière proposition pour Version-1"
Ajoutez de nouveau, de la manière suivante, l’étiquette
« Version-1
» à HEAD de « main » du
CVS mis à jour :
$ cvs tag Version-1
Créez une branche avec une étiquette de branche « collante »
Version-initiale-corrections-de-bogues
» depuis la
version d'origine pointée par l’étiquette
« Version-initiale
» et exportez-la vers le
répertoire ~/chemin/vers/ancien
» comme suit :
$ cvs rtag -b -r Version-initiale Version-initiale-corrections-de-bogues module1 $ cd ~/chemin/vers $ cvs co -r Version-initiale-corrections-de-bogues -d ancien module1 $ cd ancien
![]() |
Astuce |
---|---|
Utilisez |
Travaillez sur cette arborescence locale possédant l’étiquette
« collante »
« Version-initiale-corrections-de-bogues
» qui
est basée sur la version d'origine.
Travaillez vous-même sur cette branche… jusqu'à ce que quelqu'un d'autre
rejoigne cette branche
« Version-initiale-corrections-de-bogues
».
Synchronisez les fichiers modifiés par d'autres sur cette branche, en créant de nouveaux répertoires si nécessaire, de la manière suivante :
$ cvs up -d
Au besoin, éditez les fichiers pour résoudre les conflits.
Vérifiez les modifications du CVS comme suit :
$ cvs ci -m "checked into this branch"
Mettez à jour l’arborescence locale depuis HEAD de main en supprimant
l’étiquette collante (« sticky tag »)
(« -A
») et sans expansion de mots-clés
(« -kk
») comme suit :
$ cvs up -d -kk -A
Mettez à jour l’arborescence locale (contenu = HEAD de main) en fusionnant
depuis la branche
« Version-initiale-corrections-de-bogues
» et
sans expansion des mots-clés en faisant ce qui suit :
$ cvs up -d -kk -j Version-initiale-corrections-de-bogues
Corrigez les conflits avec l’éditeur.
Vérifiez les modifications du CVS comme suit :
$ cvs ci -m "Version-initiale-corrections-de-bogues fusionnée"
Réalisez une archive de la manière suivante :
$ cd .. $ mv ancien ancien-module1-corrections_bogues $ tar -cvzf ancien-module1-corrections_bogues.tar.gz ancien-module1-corrections_bogues $ rm -rf ancien-module1-corrections_bogues
![]() |
Astuce |
---|---|
La commande « |
![]() |
Astuce |
---|---|
Vous pouvez ne vérifier qu'un sous-répertoire de
« |
Tableau 10.17. Options importantes des commandes CVS (à utiliser comme premier(s)paramètre(s) à cvs(1))
option | signification |
---|---|
-n
|
simulation, pas d'effet |
-t
|
afficher les messages montrant les étapes des actions de cvs |
Pour obtenir les derniers fichiers du CVS, utilisez
« tomorrow
» comme suit :
$ cvs ex -D tomorrow nom_module
Ajoutez l’alias « mx
» à un projet CVS (serveur
local) de la manière suivante :
$ export CVSROOT=/srv/cvs/projet $ cvs co CVSROOT/modules $ cd CVSROOT $ echo "mx -a module1" >>modules $ cvs ci -m "mx est maintenant un alias de module1" $ cvs release -d .
Vous pouvez maintenant vérifier « module1
»
(alias : « mx
») depuis le CVS vers le
répertoire « new
» de la manière
suivante :
$ cvs co -d nouveau mx $ cd nouveau
![]() |
Note |
---|---|
Afin de pouvoir effectuer la procédure précédente, vous devrez avoir les permissions d'accès aux fichier appropriées. |
Lorsque vous vérifiez des fichiers du CVS, leur bit d'autorisation en exécution est conservé.
Si vous rencontrez des problèmes de droits d'exécution avec un fichier
récupéré, par exemple « nom_fichier
»,
modifiez-en les permissions dans le répertoire correspondant du dépôt CVS
par ce qui suit afin de corriger ce problème :
# chmod ugo-x nom_de_fichier
Subversion est un système de contrôle de version de génération récente qui remplace l’ancien CVS. Il en possède la plupart des fonctionnalités à l’exception des étiquettes et des branches.
Vous devrez installer les paquets subversion
,
libapache2-svn
et subversion-tools
pour mettre en place un serveur Subversion.
Actuellement, le paquet subversion
ne configure pas le
dépôt, on doit donc le faire manuellement. Un emplacement possible pour le
dépôt se trouve en « /srv/svn/projet
».
Créez un répertoire de la manière suivante :
# mkdir -p /srv/svn/projet
Créez la base de données du dépôt comme suit :
# svnadmin create /srv/svn/projet
Si vous n'avez accès au dépôt de Subversion que par un serveur Apache2, il vous suffira de ne rendre le dépôt accessible en écriture que par le serveur WWW de la manière suivante :
# chown -R www-data:www-data /srv/svn/projet
Ajouter (ou décommenter) ce qui suit dans
« /etc/apache2/mods-available/dav_svn.conf
»
afin de permettre l’accès au dépôt avec une authentification de
l’utilisateur.
<Location /projet> DAV svn SVNPath /srv/svn/projet AuthType Basic AuthName "Dépôt subversion" AuthUserFile /etc/subversion/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
Créer un fichier d'authentification des utilisateurs avec la commande suivante :
# htpasswd2 -c /etc/subversion/passwd nom_utilisateur
Redémarrez Apache2.
Votre nouveau dépôt Subversion est accessible à l’URL
« http://localhost/projet
» et
« http://example.com/projet
» depuis
svn(1)
(en supposant que l’URL du serveur web est
« http://example.com/
»).
Ce qui suit configure le dépôt Subversion pour un accès local par un groupe,
projet
, par exemple :
# chmod 2775 /srv/svn/projet # chown -R root:src /srv/svn/projet # chmod -R ug+rwX /srv/svn/projet
Votre nouveau dépôt Subversion est accessible aux utilisateurs locaux
appartenant au groupe projet
à l’URL
« file:///localhost/srv/svn/projet
» ou
« file:///srv/svn/projet
» depuis
svn(1)
. Vous devrez lancer des commandes comme svn
,
svnserve
, svnlook
et
svnadmin
avec « umask 002
»
afin de permettre l’accès au groupe.
Un dépôt Subversion accessible à un groupe se trouve pour SSH à l’URL
« example.com:/srv/svn/projet
», vous pouvez y
accéder avec
svn(1)
à l’URL « svn+ssh://example.com:/srv/svn/projet
".
Afin de compenser le manque de branches et d'étiquettes, de nombreux projets utilisent une arborescence de répertoires semblable à la suivante pour Subversion :
----- module1 | |-- branches | |-- tags | | |-- version-1.0 | | `-- version-2.0 | | | `-- trunk | |-- fichier1 | |-- fichier2 | `-- fichier3 | `-- module2
![]() |
Astuce |
---|---|
Vous devez utiliser la commande « |
Créez un nouvel emplacement d'arborescence locale des sources dans
« ~/chemin/vers/module1
» par la commande
suivante :
$ mkdir -p ~/chemin/vers/module1; cd ~/chemin/vers/module1
Mettez des fichiers dans la nouvelles arborescence locale de sources se
trouvant en « ~/chemin/vers/module1
».
Importez-le dans Subversion avec les paramètres suivants :
Module name : « module1
»
URL du site Subversion :
« file:///srv/svn/projet
»
Répertoire de Subversion :
« module1/trunk
»
Étiquette de Subversion :
« module1/tags/Version-initiale
»
$ cd ~/chemin/vers/module1 $ svn import file:///srv/svn/projet/module1/trunk -m "Lancement module1" $ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Version-initiale
Ou encore, comme suit :
$ svn import ~/chemin/vers/module1 file:///srv/svn/projet/module1/trunk -m "Lancement module1" $ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Version-initiale
![]() |
Astuce |
---|---|
Vous pouvez remplacer des formats d'URL comme
« |
Voici un exemple typique de flux de travail utilisant Subversion avec son client natif.
![]() |
Astuce |
---|---|
Les commandes du client proposées par le paquet |
Vérifiez de la manière suivante tous les modules disponibles depuis le
projet pointé par l’URL
« file:///srv/svn/projet
» :
$ svn list file:///srv/svn/projet module1 module2 ...
Récupérez « module1/trunk
» dans un répertoire
« module1
» comme suit :
$ cd ~/chemin/vers $ svn co file:///srv/svn/projet/module1/trunk module1 $ cd module1
Effectuez les modifications de contenu au besoin.
Vérifiez les modifications par un équivalent de « diff -u
[repository] [local]
» de la manière suivante :
$ svn diff
Vous-vous apercevez que vous avez cassé sévèrement un fichier appelé
« fichier_à_restaurer
» mais que les autres
fichiers sont corrects.
Écrasez le fichier « fichier_a_annuler
» avec
une nouvelle copie propre depuis Subversion comme suit :
$ svn revert fichier_a_annuler
Enregistrez l’arbre local des sources mis à jour vers Subversion comme suit :
$ svn ci -m "Décrire les modifications"
Créez et ajoutez le fichier
« fichier_a_ajouter
» dans Subversion comme
suit :
$ vi fichier_a_ajouter $ svn add fichier_a_ajouter $ svn ci -m "fichier_a_ajouter ajouté"
Fusionnez la dernière version depuis Subversion comme suit :
$ svn up
Recherchez les lignes commençant par « C
filename
» qui indiquent des modifications en conflit.
Recherchez le code non modifié, par exemple
« nom_fichier.r6
»,
« nom_fichier.r9
» et
« nom_fichier.mien
».
Recherchez « <<<<<<<
» et
« >>>>>>>
» dans les
fichiers qui indiquent des conflits de modifications.
Au besoin, éditez les fichiers pour résoudre les conflits.
Ajoutez l’étiquette de version (« release tag« »)
« Version-1
» comme suit :
$ svn ci -m "dernier « commit » pour la Release-1" $ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Release-1
Poursuivez l’édition.
Supprimez l’étiquette de version « Version-1
»
comme suit :
$ svn rm file:///srv/svn/projet/module1/tags/Release-1
Récupérez les modifications depuis Subversion comme suit :
$ svn ci -m "vraiment le dernier commit pour Release-1"
Ajoutez de nouveau la balise « Version-1
»
depuis la version mise à jour de HEAD de trunk de Subversion comme
suit :
$ svn cp file:///srv/svn/projet/module1/trunk file:///srv/svn/projet/module1/tags/Version-1
Créez une branche dont le chemin est
« module1/branches/Release-initial-bugfixes
»
depuis la version initiale pointée par le chemin
« module1/tags/Release-initial
» et
récupérez-le vers le répertoire
« ~/chemin/vers/ancien
» comme suit :
$ svn cp file:///srv/svn/projet/module1/tags/Version-initiale file:///srv/svn/projet/module1/branches/Version-initale-corrections-de-bogues $ cd ~/chemin/vers $ svn co file:///srv/svn/projet/module1/branches/Version-initiale-corrections-de-bogues ancien $ cd ancien
![]() |
Astuce |
---|---|
Utilisez « |
Travaillez sur cet arbre de sources local pointant vers la branche
« Version-initiale-corrections-de-bogues
» qui
est basée sur la version initiale.
Travaillez vous-même sur cette branche… jusqu'à ce que quelqu'un d'autre
rejoigne cette branche
« Version-initiale-corrections-de-bogues
».
Effectuez la synchronisation avec les fichiers de cette branche modifiés par d'autres comme suit :
$ svn up
Au besoin, éditez les fichiers pour résoudre les conflits.
Récupérez les modifications depuis Subversion comme suit :
$ svn ci -m "récupérés dans cette branche"
Mettez à jour l’arborescence local avec HEAD de trunk de la manière suivante :
$ svn switch file:///srv/svn/projet/module1/trunk
Mettez à jour l’arborescence locale (contenu = HEAD de trunk) en fusionnant
depuis la branche
« Version-initiale-corrections-de-bogues
» par
ce qui suit :
$ svn merge file:///srv/svn/projet/module1/branches/Version-initiale-corrections-de-bogues
Corrigez les conflits avec l’éditeur.
Récupérez les modifications depuis Subversion comme suit :
$ svn ci -m "Version-initiale-corrections-de-bogues fusionnée"
Réalisez une archive de la manière suivante :
$ cd .. $ mv ancien ancien-module1-corrections_bogues $ tar -cvzf ancien-module1-corrections_bogues.tar.gz ancien-module1-corrections_bogues $ rm -rf ancien-module1-corrections_bogues
![]() |
Astuce |
---|---|
Vous pouvez remplacer des formats d'URL comme
« |
![]() |
Astuce |
---|---|
Vous pouvez ne vérifier (« checkout ») qu'un sous-répertoire de
« |
Tableau 10.18. Options importantes des commandes de Subversion (à utiliser comme premier(s) paramètre(s) de svn(1))
option | signification |
---|---|
--dry-run
|
simulation, pas d'effet |
-v
|
affichage détaillé des messages d'activité de Subversion |
Git peut tout faire; à la fois pour la gestion du code source local et distant. Cela signifie que vous pouvez enregistrer les modifications de code source sans avoir besoin d'une connexion réseau avec le dépôt distant.
Vous pourrez définir certains éléments de configuration globaux, comme votre
nom et votre adresse de courriel utilisée par Git, dans
« ~/.gitconfig
» de la manière suivante :
$ git config --global nom.utilisateur "Prénom Nom" $ git config --global nom-utilisateur.email votre-nom@example.com
Si vous avez l’habitude d'utiliser les commandes de CVS ou de Subversion, vous pourrez définir certains alias de commandes comme suit :
$ git config --global alias.ci "commit -a" $ git config --global alias.co checkout
Vous pouvez vérifier votre configuration globale comme de la manière suivante :
$ git config --global --list
Consultez ce qui suit :
page de manuel : git(1)
(/usr/share/doc/git-doc/git.html
)
Manuel de l’utilisateur de Git
(/usr/share/doc/git-doc/user-manual.html
)
Un tutoriel d'introduction à
git « A tutorial introduction to git »
(/usr/share/doc/git-doc/gittutorial.html
)
Un tutoriel d'introduction à
git : deuxième partie « A tutorial introduction to git:
part two »
(/usr/share/doc/git-doc/gittutorial-2.html
)
Utilisation de tous les jours
de GIT en 20 commandes « Everyday GIT With 20 Commands Or
So » (/usr/share/doc/git-doc/everyday.html
)
git pour les utilisateurs de CVS
« git for CVS users »
(/usr/share/doc/git-doc/gitcvs-migration.html
)
Cette documentation décrit aussi comment configurer un serveur tel que CVS et extraire d'anciennes données de CVS vers Git.
Autres ressources git disponible sur le web
Git - Cours pour les familiers de Subversion « SVN Crash Course »
La magie de Git « Git Magic »
(/usr/share/doc/gitmagic/html/index.html
)
Les commandes git-gui(1) et gitk(1) rendent très facile l’utilisation de Git.
![]() |
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
|
Même si votre source amont utilise un VCS différent, c'est une bonne idée d'utiliser git(1) pour l’activité locale parce qu'il vous permet de gérer votre copie locale de l’arborescence des sources sans connexion réseau amont. Voici quelques paquets et commandes utilisés avec git(1).
Tableau 10.19. Liste des paquets et des commandes relatifs à git
paquet | popcon | taille | commande | description |
---|---|---|---|---|
git-doc |
I:28 | 8405 | N/A | Documentation officielle de git |
gitmagic |
I:3 | 740 | N/A | « Git Magic », le guide le plus facile à comprendre pour Git |
git
|
V:130, I:414 | 13134 | git(7) | Git, système de contrôle de version rapide, évolutif et distribué |
gitk
|
V:11, I:52 | 1048 | gitk(1) | Interface graphique de navigateur de dép Git avec historique |
git-gui |
V:3, I:31 | 1670 | git-gui(1) | Interface graphique pour Git (pas d'historique) |
git-svn |
V:5, I:42 | 689 | git-svnimport(1) | importer des données venant de Subversion dans Git |
git-svn |
V:5, I:42 | 689 | git-svn(1) | fournit un fonctionnement bidirectionnel entre Subversion et Git |
git-cvs |
V:1, I:18 | 782 | git-cvsimport(1) | importer des données venant de CVS dans Git |
git-cvs |
V:1, I:18 | 782 | git-cvsexportcommit(1) | exporter une proposition (« commit ») récupéré de Git vers un CVS |
git-cvs |
V:1, I:18 | 782 | git-cvsserver(1) | émulateur de serveur CVS pour Git |
git-email |
V:1, I:20 | 533 | git-send-email(1) | envoyer une série de rustines sous forme de courriel à partir de Git |
stgit
|
V:0, I:7 | 1628 | stg(1) | quilt par-dessus git (Python) |
git-buildpackage |
V:2, I:12 | 2530 | git-buildpackage(1) | automatise la mise en paquet Debian avec Git |
guilt
|
V:0, I:0 | 360 | guilt(7) | quilt par-dessus git (SH/AWK/SED/…) |
![]() |
Astuce |
---|---|
Avec
git(1),
vous travaillez sur une branche locale avec de nombreuses commit et vous
utilisez quelque chose comme « |
![]() |
Astuce |
---|---|
Si vous désirez retrouver un répertoire propre sans perdre l’état actuel du
répertoire de travail, vous pouvez utiliser « |
Un dépôt Subversion en
« svn+ssh://svn.example.org/project/module/trunk
» peut
être extrait vers un dépôt Git local en « ./dest
» puis
renvoyé vers le dépôt subversion. Par exemple :
$ git svn clone -s -rHEAD svn+ssh://svn.example.org/project dest $ cd dest ... effectuer des modifications $ git commit -a ... travailler encore avec git $ git svn dcommit
![]() |
Astuce |
---|---|
L’utilisation de « |
Vous pouvez enregistrer vous-même un historique chronologique de la
configuration en utilisant les outils Git. Voici
un exemple simple, pour vous exercer, d'enregistrement du contenu de
« /etc/apt/
».
$ cd /etc/apt/ $ sudo git init $ sudo chmod 700 .git $ sudo git add . $ sudo git commit -a
Dépôt (« commit ») d'une configuration avec sa description
Effectuez les modifications dans les fichiers de configuration.
$ cd /etc/apt/ $ sudo git commit -a
Déposez (« commit ») la configuration avec sa description et retournez à vos occupations habituelles.
$ cd /etc/apt/ $ sudo gitk --all
Vous avez avec vous l’historique complet de la configuration.
![]() |
Note |
---|---|
sudo(8)
est nécessaire pour travailler avec n'importe quelles permissions sur les
données de configuration. Pour les données de configuration de
l’utilisateur, |
![]() |
Note |
---|---|
La commande « |
![]() |
Astuce |
---|---|
Pour une configuration plus complète de l’enregistrement de l’historique de
configuration, voyez le paquet |