Conversion/Copie de fichiers Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/SystemInformationandMonitoringGroup -.-> linux/dd("File Converting/Copying") subgraph Lab Skills linux/echo -.-> lab-271263{{"Conversion/Copie de fichiers Linux"}} linux/cat -.-> lab-271263{{"Conversion/Copie de fichiers Linux"}} linux/cd -.-> lab-271263{{"Conversion/Copie de fichiers Linux"}} linux/dd -.-> lab-271263{{"Conversion/Copie de fichiers Linux"}} end

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 source
  • of= 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 :

  1. Accédez à votre répertoire de projet :
cd ~/project
  1. 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
  1. 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.

  1. Maintenant, utilisons la commande dd pour 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
  1. 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 :

  1. 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
  1. Vérifiez le contenu du fichier :
cat ~/project/mixed_case.txt
  1. 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
  1. 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 majuscules
  • ascii : Convertir EBCDIC en ASCII
  • ebcdic : Convertir ASCII en EBCDIC
  • noerror : Continuer après des erreurs de lecture
  • sync : Remplir chaque bloc d'entrée jusqu'à la taille du bloc d'entrée
  1. Essayons de convertir le texte en majuscules :
dd if=~/project/mixed_case.txt of=~/project/upper_case.txt conv=ucase
  1. 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 :

  1. 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
  1. Examinons le contenu du fichier :
cat ~/project/block_test.txt

Le fichier contient 10 lignes de texte.

  1. Maintenant, utilisons dd avec 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=10 définit la taille du bloc à 10 octets
  • count=5 spé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
  1. 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 :

  • c pour les octets (1 octet)
  • w pour les mots (2 octets)
  • b pour les blocs (512 octets)
  • k pour les kilooctets (1024 octets)
  • M pour les mégaoctets (1024*1024 octets)
  • G pour les gigaoctets (102410241024 octets)
  1. 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.

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

  1. 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
  1. Utilisons dd avec l'option status=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 information
  • noxfer : Affiche tout sauf les statistiques de transfert
  • progress : 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.

  1. Utilisons skip pour 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.

  1. Vérifions le résultat :
cat ~/project/skipped_copy.txt

Vous devriez constater que le début du fichier a été sauté.

  1. Maintenant, utilisons l'option seek pour 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.

  1. 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ées
  • dsync : Utilise l'E/S synchronisée pour les données
  • sync : Utilise l'E/S synchronisée pour les données et les métadonnées
  • nonblock : Utilise l'E/S non bloquante
  • fullblock : 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 à :

  1. Utiliser la syntaxe de base de la commande dd avec les paramètres if= (fichier d'entrée) et of= (fichier de sortie) pour créer des copies exactes de fichiers.

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

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

  4. Utiliser des options avancées telles que status=progress pour surveiller le processus de copie, skip= et seek= 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.