41 votes

Comment automatiser la comparaison des valeurs de hachage md5sum pour un grand nombre de fichiers

Je peux vérifier le hachage md5sum d'un fichier à partir d'un terminal comme suit,

$ md5sum my_sensitive_file
8dad53cfc973c59864b8318263737462 my_sensitive_file

Mais la partie difficile est de comparer la valeur de hachage avec la bonne.

Il est difficile de comparer la sortie de 32 caractères avec la valeur de hachage originale/exacte pour un grand nombre de fichiers. Tout d'abord, le travail serait très monotone et il y a de grandes chances d'erreurs.

Est-il possible d'automatiser le processus de comparaison, de préférence en CLI?

52voto

c0rp Points 9110

Par exemple, j'ai un fichier appelé test_binary.

La somme MD5 du fichier test est ef7ab26f9a3b2cbd35aa3e7e69aad86c

Pour le tester automatiquement, exécutez ceci :

$ md5sum -c <<<"ef7ab26f9a3b2cbd35aa3e7e69aad86c *chemin/vers/fichier/test_binary"
test_binary: OK

ou

$ echo "595f44fec1e92a71d3e9e77456ba80d1  fichierA.txt" | md5sum -c -

Citation du manuel

   -c, --check
          lit les sommes MD5 à partir des fichiers et les vérifie

Citation de wiki

Remarque : Il doit y avoir deux espaces entre chaque valeur md5sum et le nom du fichier à comparer. Sinon, l'erreur suivante apparaîtra : "aucune ligne de somme de contrôle MD5 correctement formatée trouvée".

Lien vers wiki

Vous pouvez également simplement lire les hachages md5 à partir d'un fichier

$ md5sum -c fichier_formaté_md5sum.txt

Il s'attend à ce que le fichier soit au format :


À propos de * et après le hachage MD5. Il y a une petite note dans le manuel :

 Lors de la vérification, l'entrée doit être une sortie antérieure de ce programme. Le mode par défaut consiste à imprimer une ligne avec la somme de contrôle, un caractère indiquant le mode d'entrée ('*' pour binaire, espace pour texte), et le nom de chaque FICHIER.

Et voici le lien vers stackoverflow où j'ai trouvé la réponse à la question, pourquoi devrions-nous parfois distinguer les fichiers binaires et les fichiers texte.


2voto

Elliott Frisch Points 2818

Une possibilité est d'utiliser l'utilitaire cfv

sudo apt-get install cfv

CFV prend en charge de nombreux types de hachages, ainsi que les tests et la création de fichiers de hachage.

# Liste des fichiers
$ ls
test.c
# Créer un fichier de hachage
$ cfv -tmd5 -C
temp.md5: 1 fichier, 1 OK.  0.001 secondes, 302.7K/s
# Tester le fichier de hachage
$ cfv -tmd5 -T
temp.md5: 1 fichier, 1 OK.  0.001 secondes, 345.1K/s
# Afficher le fichier de hachage
$ cat *.md5
636564b0b10b153219d6e0dfa917d1e3 *test.c

1voto

HRgiger Points 1152

Oui, l'astérisque * est requis pour cette commande. Jetez un œil à cet exemple.

Ceci est le fichier binaire, et disons que la valeur md5sum correcte est exampledebonnemd5valeur00000000 (32 caractères hexadécimaux)

[root@Linux update]# ls -lh
total 137M
-rw-r--r-- 1 root root 137M Nov  5 13:01 binary-file.run.tgz
[root@Linux update]# 

-c, --check

lire les sommes MD5 des FICHIERS et les vérifier

Si la valeur md5sum correspond au fichier binaire, vous obtiendrez cette sortie

[root@Linux ~]# md5sum -c <<< "exampledebonnemd5valeur00000000 *binary-file.run.tgz"
binary-file.run.tgz: OK
[root@Linux ~]# 

Et voici ce qui se passe lorsque la valeur md5sum ne correspond pas

[root@Linux update]# md5sum -c <<< "examplefausedevaleurmd5_erreur0000000000 *binary-file.run.tgz"
binary-file.run.tgz: ÉCHEC
md5sum: AVERTISSEMENT : 1 des 1 sommes de contrôle calculées ne correspond pas
[root@Linux update]# 

Sans astérisque *, vous obtiendrez le message d'erreur suivant même si la valeur md5 est correcte

[root@Linux ~]# md5sum -c <<< "exampledebonnemd5valeur00000000 binary-file.run.tgz"
md5sum: saisie standard : aucune ligne de somme de contrôle MD5 correctement formatée trouvée
[root@Linux ~]# 

De plus, vous obtiendrez le même message d'erreur si md5sum n'a pas 32 caractères hexadécimaux. Dans cet exemple, il n'en a que 31.

[root@Linux ~]# md5sum -c <<< "exampledevaleurmd5moinsde32caracteres *binary-file.run.tgz"
md5sum: saisie standard : aucune ligne de somme de contrôle MD5 correctement formatée trouvée
[root@Linux ~]# 

Solution pour plusieurs fichiers

Si vous avez de nombreux fichiers et que vous souhaitez automatiser le processus, vous pouvez suivre ces étapes :

user@Ubuntu:~$ ls -lh
total 12K
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-a
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-b
-rw-rw-r-- 1 user user 4 Nov  5 14:54 file-c
user@Ubuntu:~$ 

Générer la md5sum pour chaque fichier et le sauvegarder dans md5sum.txt

user@Ubuntu:~$ md5sum * | tee md5sum.txt
0bee89b07a24ae27c83fc3d5951213c1  file-a
1b2297c171a9a450d184871ccf6c9ad4  file-b
7f4d13d9b0b6ac086fd68637067435c5  file-c
user@Ubuntu:~$ 

Pour vérifier la md5sum de tous les fichiers, utilisez la commande suivante.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: OK
file-c: OK
user@Ubuntu:~$ 

Voici un exemple si la valeur md5sum ne correspond pas au fichier. Dans ce cas, je vais modifier le contenu de file-b

user@Ubuntu:~$ echo "nouvelles données" > file-b 
user@Ubuntu:~$ 

Voyez, voici le message d'erreur. J'espère que cela vous aidera.

user@Ubuntu:~$ md5sum -c md5sum.txt 
file-a: OK
file-b: ÉCHEC
file-c: OK
md5sum: AVERTISSEMENT : 1 somme de contrôle calculée ne correspondait PAS
user@Ubuntu:~$

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X