Introduction
La ligne de commande Linux propose des utilitaires puissants pour la manipulation de fichiers, et l'une des outils les plus polyvalentes est la commande dd. Cet utilitaire vous permet de convertir et de copier des fichiers avec un contrôle précis du processus d'entrée et de sortie. Initialement conçu pour fonctionner avec les lecteurs de bandes et autres périphériques orientés blocs, dd est devenu un outil polyvalent sur lequel les administrateurs système et les utilisateurs avancés comptent pour diverses tâches de gestion de données.
Dans ce labo (LabEx), vous allez explorer les capacités de la commande dd pour convertir et copier des fichiers dans un environnement Linux. Vous apprendrez à effectuer des copies octet par octet, à convertir la casse du texte lors des transferts de fichiers, et à comprendre la syntaxe et les paramètres qui font de dd un utilitaire puissant dans les opérations de gestion de fichiers.
Comprendre les bases de la commande dd
La commande dd sous Linux signifie "data duplicator" (duplicateur de données) et est un utilitaire puissant pour convertir et copier des fichiers. Contrairement à d'autres commandes de copie comme cp, la commande dd permet un contrôle plus détaillé du processus de copie.
Commençons par comprendre la syntaxe de base de la commande dd :
dd if=<fichier d'entrée> of=<fichier de sortie> [options]
Où :
if=spécifie le fichier d'entrée ou la sourceof=spécifie le fichier de sortie ou la destination[options]sont des paramètres supplémentaires pour contrôler le processus de copie
Maintenant, voyons comment utiliser dd en pratique. Tout d'abord, créons un fichier d'exemple avec lequel travailler :
- Accédez à votre répertoire de projet :
cd ~/project
- Créez un fichier texte d'exemple en utilisant la commande
echo:
echo "This is a sample file for the dd command demonstration." > ~/project/example.txt
- Vérifiez le contenu du fichier :
cat ~/project/example.txt
Vous devriez voir le texte : This is a sample file for the dd command demonstration.
- Maintenant, utilisons la commande
ddpour faire une copie exacte de ce fichier :
dd if=~/project/example.txt of=~/project/example_copy.txt
Vous devriez voir une sortie similaire à celle-ci :
0+1 records in
0+1 records out
56 bytes copied, 0.000418813 s, 133.7 kB/s
La sortie montre :
- Records in/out : Le nombre de blocs complets et partiels lus/écrits
- Bytes copied : La quantité totale de données copiées
- Time taken : Le temps que l'opération a pris
- Speed : Le taux de copie des données
- Vérifiez que la copie a réussi :
cat ~/project/example_copy.txt
Vous devriez voir le même texte que dans le fichier original, confirmant que l'opération de copie a réussi.
Conversion de format de fichier avec dd
L'une des fonctionnalités puissantes de la commande dd est sa capacité à convertir des données lors du processus de copie. Le paramètre conv= vous permet de spécifier diverses options de conversion.
Explorons comment utiliser dd pour convertir la casse du texte dans un fichier :
- Tout d'abord, créez un fichier avec du texte en casse mixte :
echo "Linux File Conversion with DD Command Example" > ~/project/mixed_case.txt
- Vérifiez le contenu du fichier :
cat ~/project/mixed_case.txt
- Maintenant, convertissons toutes les lettres majuscules en minuscules lors de la copie :
dd if=~/project/mixed_case.txt of=~/project/lower_case.txt conv=lcase
L'option conv=lcase indique à dd de convertir toutes les lettres majuscules en minuscules lors de l'opération de copie. Vous devriez voir une sortie similaire à :
0+1 records in
0+1 records out
46 bytes copied, 0.000401813 s, 114.5 kB/s
- Vérifiez le résultat :
cat ~/project/lower_case.txt
Vous devriez voir : linux file conversion with dd command example
La commande dd prend également en charge d'autres options de conversion :
ucase: Convertir les minuscules en majusculesascii: Convertir EBCDIC en ASCIIebcdic: Convertir ASCII en EBCDICnoerror: Continuer après des erreurs de lecturesync: Remplir chaque bloc d'entrée jusqu'à la taille du bloc d'entrée
- Essayons de convertir le texte en majuscules :
dd if=~/project/mixed_case.txt of=~/project/upper_case.txt conv=ucase
- Vérifiez le résultat :
cat ~/project/upper_case.txt
Vous devriez voir : LINUX FILE CONVERSION WITH DD COMMAND EXAMPLE
Le paramètre conv= peut également accepter plusieurs options de conversion séparées par des virgules. Par exemple, conv=ucase,sync convertirait en majuscules et remplirait chaque bloc d'entrée.
Utilisation des options de taille de bloc et de nombre de blocs
La commande dd offre un contrôle précis sur la lecture et l'écriture des données grâce aux options de taille de bloc (bs=) et de nombre de blocs (count=). Ces paramètres sont particulièrement utiles lorsqu'on travaille avec de gros fichiers ou des segments de données spécifiques.
Explorons le fonctionnement de ces options :
- Tout d'abord, créons un fichier d'exemple plus volumineux pour les tests :
for i in {1..10}; do echo "This is line $i of our test file for block operations." >> ~/project/block_test.txt; done
- Examinons le contenu du fichier :
cat ~/project/block_test.txt
Le fichier contient 10 lignes de texte.
- Maintenant, utilisons
ddavec les options de taille de bloc et de nombre de blocs pour copier seulement une partie du fichier :
dd if=~/project/block_test.txt of=~/project/partial_copy.txt bs=10 count=5
Dans cette commande :
bs=10définit la taille du bloc à 10 octetscount=5spécifie que seulement 5 blocs doivent être lus et écrits
Cela signifie que seulement les 50 premiers octets (10 octets × 5 blocs) du fichier d'entrée seront copiés. Vous devriez voir une sortie similaire à :
5+0 records in
5+0 records out
50 bytes copied, 0.000412813 s, 121.1 kB/s
- Vérifiez le contenu de la copie partielle :
cat ~/project/partial_copy.txt
Vous devriez voir seulement les 50 premiers octets du fichier original.
L'option de taille de bloc peut utiliser les suffixes suivants :
cpour les octets (1 octet)wpour les mots (2 octets)bpour les blocs (512 octets)kpour les kilooctets (1024 octets)Mpour les mégaoctets (1024*1024 octets)Gpour les gigaoctets (102410241024 octets)
- Essayons d'utiliser une taille de bloc différente avec le suffixe
k:
dd if=~/project/block_test.txt of=~/project/kb_copy.txt bs=1k count=1
Cette commande copie 1 kilooctet (1024 octets) de données, ce qui devrait être suffisant pour capturer l'ensemble du fichier de test car il est relativement petit.
- Vérifiez le contenu copié :
cat ~/project/kb_copy.txt
Vous devriez constater que l'ensemble du fichier a été copié car sa taille est inférieure à 1 kilooctet.
L'utilisation des options de taille de bloc et de nombre de blocs devient particulièrement importante lorsqu'on manipule des images de disque, de gros fichiers de sauvegarde ou lorsqu'il est nécessaire d'extraire des parties spécifiques d'un fichier.
Options avancées de la commande dd
Au-delà des paramètres de base, la commande dd propose plusieurs options avancées qui offrent un contrôle supplémentaire sur le processus de copie. Explorons quelques-unes des plus utiles :
L'option status
L'option status= contrôle la manière dont dd affiche sa progression. Cela est particulièrement utile lors de la copie de gros fichiers.
- Créons un autre fichier d'exemple :
for i in {1..20}; do echo "Line $i: The dd command provides detailed status information." >> ~/project/status_example.txt; done
- Utilisons
ddavec l'optionstatus=progress:
dd if=~/project/status_example.txt of=~/project/status_copy.txt bs=1k status=progress
Avec l'option status=progress, dd affichera des informations de progression en temps réel pendant l'opération de copie.
L'option status prend en charge plusieurs valeurs :
none: N'affiche aucune informationnoxfer: Affiche tout sauf les statistiques de transfertprogress: Affiche périodiquement les statistiques de transfert
Les options skip et seek
Les options skip= et seek= vous permettent de sauter des blocs respectivement dans les fichiers d'entrée et de sortie, ce qui est utile pour cibler des sections spécifiques de fichiers.
- Utilisons
skippour commencer la copie au milieu de notre fichier de test :
dd if=~/project/block_test.txt of=~/project/skipped_copy.txt bs=10 skip=10
L'option skip=10 indique à dd de sauter les 10 premiers blocs (de 10 octets chacun) du fichier d'entrée avant de commencer la copie.
- Vérifions le résultat :
cat ~/project/skipped_copy.txt
Vous devriez constater que le début du fichier a été sauté.
- Maintenant, utilisons l'option
seekpour laisser de l'espace au début du fichier de sortie :
dd if=~/project/block_test.txt of=~/project/seek_example.txt bs=10 seek=5
L'option seek=5 indique à dd de sauter 5 blocs au début du fichier de sortie avant d'écrire des données.
- Examinons le fichier de sortie :
hexdump -C ~/project/seek_example.txt | head
Cela vous montrera que le fichier commence par 50 octets de zéros (5 blocs de 10 octets) avant le début des données réelles.
Les options iflag et oflag
Les options iflag= et oflag= contrôlent le traitement spécial des fichiers d'entrée et de sortie :
dd if=~/project/block_test.txt of=~/project/direct_copy.txt bs=4k iflag=direct,fullblock
Les indicateurs (flags) courants incluent :
direct: Utilise l'E/S directe pour les donnéesdsync: Utilise l'E/S synchronisée pour les donnéessync: Utilise l'E/S synchronisée pour les données et les métadonnéesnonblock: Utilise l'E/S non bloquantefullblock: Accumule des blocs complets d'entrée
Ces options avancées font de dd un outil polyvalent pour diverses tâches système, y compris la création de sauvegardes, le clonage de disques et la récupération de données.
Résumé
Dans ce laboratoire, vous avez exploré la puissante commande dd sous Linux, qui offre des capacités polyvalentes de conversion et de copie de fichiers.
Vous avez appris à :
Utiliser la syntaxe de base de la commande
ddavec les paramètresif=(fichier d'entrée) etof=(fichier de sortie) pour créer des copies exactes de fichiers.Appliquer des options de conversion avec le paramètre
conv=pour transformer le contenu des fichiers lors de la copie, par exemple en convertissant le texte entre majuscules et minuscules.Contrôler le processus de lecture et d'écriture en utilisant les options de taille de bloc (
bs=) et de nombre de blocs (count=), ce qui vous permet de spécifier exactement combien de données copier et sous quelle taille de segments.Utiliser des options avancées telles que
status=progresspour surveiller le processus de copie,skip=etseek=pour cibler des sections spécifiques de fichiers, et des indicateurs (flags) pour contrôler le traitement spécial de l'E/S.
La commande dd est un outil puissant dans la boîte à outils de l'administrateur Linux. Bien qu'elle puisse sembler complexe au départ, sa flexibilité la rend inestimable pour des tâches allant de simples conversions de fichiers à des opérations système complexes telles que la création d'images de disque, le nettoyage de disques ou la récupération de données à partir de stockages endommagés.
N'oubliez pas que dd peut être dangereux si elle est utilisée incorrectement, car elle ne demande pas de confirmation avant d'écraser des fichiers ou des disques. Vérifiez toujours vos paramètres, surtout lorsque vous travaillez avec des disques système ou des données importantes.



