web-dev-qa-db-fra.com

Comment utiliser la fonction de mise à jour dans 'rhash'

Je ne parviens pas à utiliser 'rhash' pour mettre à jour un fichier contenant des sommes de contrôle md5 sur le serveur Ubuntu 14.04.

Voici mon script:

#!/bin/bash

Sudo rhash -r -u --md5 /checksum/these/files --output=/checksum/these/files/checksum.md5

Le manuel rhash indique que "-u" ajoutera toutes les nouvelles sommes de contrôle à la fin du fichier, mais lorsque je lance mon script bash, le fichier de sortie devient complètement vide/aucun contenu (il supprime même les sommes de contrôle précédemment enregistrées de la liste).

Est-ce que je fais quelque chose de mal dans mon script? Ou est-ce que j'interprète mal l'option '-u'? Toute aide que vos génies peuvent me donner serait géniale =]

3
Pete Duggan

La rhashmanuel indique (emphase mienne):

-u, --update

Mettre à jour les fichiers de hachage spécifiés par la ligne de commande. Le programme calcule et ajoute des hachages au fichier de hachage mis à jour dans le format spécifié par les options de formatage. Les hachages sont calculés pour ces fichiers à partir du même répertoire que le fichier de hachage, qui ne s'y trouve pas encore.

La sortie est donc ajoutée à /checksum/these/files et non à /checksum/these/files/checksum.md5. Le fichier /checksum/these/files/checksum.md5 est créé par l'option --output, mais comme vous utilisez -u, ce qui signifie "mettre à jour le fichier d'origine", aucune sortie n'y est imprimée.

Par exemple:

$ date > file1
$ date > file2

$ md5sum * > hashes
$ cat hashes 
909b1419ee961b556e0013929d8b667e  file1
a6de9f219de32fec651e62e3c457169e  file2

$ rhash -r -u --md5 hashes --output=new
Updated: hashes

$ cat hashes
909b1419ee961b556e0013929d8b667e  file1
a6de9f219de32fec651e62e3c457169e  file2
d41d8cd98f00b204e9800998ecf8427e  new
$ cat new
$

Comme vous pouvez le voir ci-dessus, le fichier new a été créé avant l'exécution du reste de la commande. Il a donc été inclus dans la vérification du hachage. Comme il n'y avait pas de hachage associé pour new dans hashes, une ligne a été ajoutée au fichier hashes.


Sur une note plus générale, veuillez ne pas utiliser Sudo s'il n'est pas nécessaire. Si vous avez vraiment besoin d'un accès root pour modifier /checksum/these/files, supprimez le Sudo du script et exécutez le script lui-même avec Sudo: Sudo /path/to/script.sh.

2
terdon