La somme de contrôle est utilisée pour vérifier l'intégrité des données. Supposons qu'un fichier soit copié sur un réseau ou sur un système et qu'en raison d'un événement tel qu'une perte de connexion réseau ou un redémarrage soudain de la machine, les données n'aient pas été complètement copiées.
Maintenant, comment vérifieriez-vous l'intégrité des données ? Eh bien, grâce au mécanisme de somme de contrôle CRC, l'intégrité des données peut être vérifiée. Il existe divers mécanismes par lesquels une somme de contrôle CRC peut être calculée. Par exemple, dans l'un de nos articles (somme de contrôle d'en-tête IP), nous avons expliqué comment trouver la somme de contrôle d'un en-tête IP. Dans cet article, nous allons nous intéresser à la commande Linux ‘cksum’ qui permet de calculer la somme de contrôle des fichiers ou des données fournies en entrée standard.
Qu'est-ce que le CRC ?
CRC signifie contrôle de redondance cyclique.
La somme de contrôle peut être calculée en appliquant un mécanisme de contrôle de redondance cyclique (CRC) sur les données qui sont communiquées. Chaque bloc de données qui voyage sur le canal de communication est associé à un code CRC ou à une somme de contrôle et lorsque le bloc de données atteint la destination, cette vérification est à nouveau appliquée pour générer une valeur de somme de contrôle. Si la somme de contrôle générée à la destination et la valeur de la somme de contrôle dans le bloc de données sont identiques, les données sont considérées comme non corrompues et peuvent être utilisées ultérieurement, mais si les deux valeurs de somme de contrôle ne sont pas identiques, dans ce cas, les données sont dites corrompues. ou infecté.
Le nom CRC est parce que :
- Ce mécanisme est basé sur les principes fondamentaux des codes cycliques (donc cycliques ).
- Le code associé aux données en tant que somme de contrôle est redondant, c'est-à-dire qu'il n'ajoute aucune valeur aux données transférées (d'où la redondance ).
- C'est une vérification (donc vérification )
La commande cksum
La commande cksum est utilisée pour calculer le contrôle de redondance cyclique (CRC) pour chaque fichier qui lui est fourni en argument. Le CRC devient important dans les situations où l'intégrité des données doit être vérifiée. À l'aide de la commande cksum, on peut comparer la somme de contrôle du fichier de destination avec celle du fichier source pour déterminer si le transfert de données a réussi ou non.
En plus de fournir la valeur CRC, cette commande produit également la taille et le nom du fichier dans la sortie. La commande se termine avec le statut zéro en cas de succès et toute autre valeur de statut indique un échec.
On peut obtenir une information détaillée sur cette commande en tapant ce qui suit sur l'invite de commande :
$ info coreutils 'cksum invocation'
exemples de commande cksum
1. Un exemple basique
À un niveau très basique, la commande cksum peut être utilisée pour afficher la somme de contrôle d'un fichier.
$ cksum testfile.txt 3000792507 3 testfile.txt
La première valeur (grand nombre) dans la sortie ci-dessus est la somme de contrôle du fichier, puis nous avons la taille du fichier et enfin le nom du fichier.
2. Modifications de la somme de contrôle avec modification du contenu
Le fichier de test "testfile.txt" a le contenu suivant :
$ cat testfile.txt Hi
Pour calculer la somme de contrôle du fichier de test, passez-la en argument à la commande cksum :
$ cksum testfile.txt 3000792507 3 testfile.txt
Maintenant, modifiez le contenu du fichier :
$ cat testfile.txt Hi everybody.
Passez à nouveau le fichier de test en argument à la commande cksum :
$ cksum testfile.txt 2559130041 14 testfile.txt
Nous voyons donc qu'avec le changement de contenu, la somme de contrôle change.
3. Un changement de contenu ne signifie pas toujours une augmentation ou une diminution de la taille
Eh bien, ce qui précède est vrai fondamentalement aussi et même pour chksum aussi. Voyons ce que cela signifie :
Vérifier le contenu du fichier test ‘testfile.txt’ :
$ cat testfile.txt Hi everybody
Notez la somme de contrôle :
$ cksum testfile.txt 2559130041 14 testfile.txt
Maintenant, modifiez le contenu en n'ajoutant ou en supprimant rien, mais en remplaçant un caractère par un autre afin que la taille du fichier reste la même.
$ cat testfile.txt Hi everybudy.
Donc, comme vous pouvez le voir, j'ai remplacé "o" par "u".
Comparez la somme de contrôle maintenant :
$ cksum testfile.txt 3252191934 14 testfile.txt
Nous voyons donc que la somme de contrôle a changé même si le changement concernait un caractère remplacé par un autre.
4. Une copie interrompue
Supposons que vous copiez un dossier zippé contenant divers sous-dossiers et fichiers d'un emplacement à un autre et que, pour quelque raison que ce soit, le processus de copie a été interrompu, alors comment vérifieriez-vous si tout a été copié avec succès ou non ? Eh bien, cksum rend cela possible car nous savons maintenant qu'en cas de copie partielle, la somme de contrôle globale de la destination serait différente de celle du dossier source.
Vous pouvez simuler ce scénario de la manière suivante :
J'ai créé Linux.tar.gz et Linux_1.tar.gz à partir du même dossier "Linux". La différence étant que Linux_1.tar.gz a été créé lorsque le dossier "Linux" contenait un fichier texte supplémentaire.
Ainsi, le scénario ci-dessus simule le moment où Linux_1.tar.gz était en cours de copie mais a été interrompu lorsqu'il ne restait qu'un seul fichier texte à copier dans la cible Linux.tar.gz
Maintenant, quand je compare la somme de contrôle de ces deux fichiers, je vois
$ cksum Linux.tar.gz 756656601 1037079 Linux.tar.gz $ cksum Linux_1.tar.gz 2598429125 1037184 Linux_1.tar.gz
Ainsi, la sortie ci-dessus montre différentes valeurs de somme de contrôle suggérant une copie incorrecte du fichier.
5. Somme de contrôle de la sortie standard
Cette commande fournit une fonctionnalité dans laquelle l'utilisateur peut taper simplement 'cksum' ou 'cksum-' et écrire sur stdin, puis appuyer sur Ctrl + D plusieurs fois. De cette façon, cksum donne la somme de contrôle des données saisies à l'entrée.
$ cksum Lets check the checksum1135634677 23
Dans l'exemple ci-dessus, nous avons en fait calculé la somme de contrôle de la chaîne "Vérifions la somme de contrôle".