Pour tous ceux qui viennent ici et qui cherchent à comparer un fichier à une somme md5 spécifique, vous pouvez essayer cette fonction :
function checkmd5() {
md5_to_test=$1
md5_from_file=$(md5sum "$2" | cut -d " " -f1)
md5_results="Input: $md5_to_test\nFile: $md5_from_file"
if [[ $md5_to_test == $md5_from_file ]]
then
echo -e "\n\e[92mSUCCESS\e[39m\n$md5_results"
else
echo -e "\n\e[91mFAILURE\e[39m\n$md5_results"
fi
}
Et puis utilisez-le simplement comme :
$ checkmd5 <SOME_MD5_SUM> filepath/file.abc
Dans cette ligne if [ $file1 != $file2 ]
, vous ne comparez pas le contenu de deux fichiers, mais uniquement les noms de fichiers. Alors if [ "md5sum.txt" != "GeoLite2-City.md5" ]
sera toujours vrai.
Cela devrait fonctionner :
if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi
Donc .. le problème que vous voyez semble être que le format du md5sum.txt
le fichier que vous créez ne correspond pas au format du .md5
fichier que vous téléchargez, par rapport auquel vous devez vérifier la valeur que vous calculez.
Ce qui suit serait plus proche de ma version du script. (Explication ci-dessous.)
#!/bin/bash
if ! cd /home/example/public_html/exampledomain.com/billing/system/; then
echo "Can't find work directory" >&2
exit 1
fi
rm -f GeoLiteCity.dat
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz | gunzip > GeoLiteCity.dat
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz | gunzip > GeoLite2-City.dat
curl -O https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.md5
md5sum < GeoLite2-City.dat | cut -d\ -f1 > md5sum.txt
file1="md5sum.txt"
file2="GeoLite2-City.md5"
if ! cmp --silent "$file1" "$file2"; then
mail -s "Results of GeoLite Updates" [email protected] <<< "md5sum for GeoLite2-City failed. Please check the md5sum. File may possibly be corrupted."
fi
Les principales différences ici sont...
rm -f GeoLightCity.dat
au lieu de-rf
. N'allons pas plus loin que nécessaire.md5sum
prend une entrée standard plutôt que de traiter le fichier par son nom. L'effet est que la sortie n'inclut pas de nom de fichier. Malheureusement à cause des limitations de Linuxmd5sum
commande, cela ne correspond toujours pas au fichier .md5 que vous téléchargez depuis Maxmind, donc :cut
est utilisé pour modifier la sortie résultante, ne laissant que le md5 calculé.- en utilisant
cmp
au lieu de sous-shells, par commentaires sur votre question.
Les deuxième et troisième points sont peut-être les plus importants pour vous.
Une autre option pour créer votre fichier md5sum.txt serait de le faire à la volée pendant le téléchargement. Par exemple :
curl -L https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz \
| gunzip | tee -a GeoLite2-City.dat | cut -d\ -f1 | md5sum > md5sum.txt
Cela utilise le tee
commande pour diviser le fichier en son emplacement de "sauvegarde" et un autre canal, qui passe par md5sum pour générer votre fichier .txt.
Cela pourrait vous faire gagner une minute qui serait autrement mangée par la somme md5 qui s'exécute ensuite. Et il profitera mieux du SMP. :)