Pro každého, kdo sem přichází a chce porovnat soubor s konkrétním součtem md5, můžete zkusit tuto funkci:
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
}
A pak to použijte jako:
$ checkmd5 <SOME_MD5_SUM> filepath/file.abc
V tomto řádku if [ $file1 != $file2 ]
, neporovnáváte obsah dvou souborů, ale pouze názvy souborů. Takže if [ "md5sum.txt" != "GeoLite2-City.md5" ]
bude vždy pravda.
To by mělo fungovat:
if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi
Takže .. problém, který vidíte, je zřejmě formát md5sum.txt
soubor, který vytvoříte, neodpovídá formátu .md5
soubor, který si stáhnete, proti kterému je třeba zkontrolovat hodnotu, kterou vypočítáte.
Následující by bylo blíže mé verzi scénáře. (Vysvětlení níže.)
#!/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
Hlavní rozdíly jsou zde...
rm -f GeoLightCity.dat
místo-rf
. Nedosahujme dál, než potřebujeme.md5sum
přebírá standardní vstup místo zpracování souboru podle názvu. Výsledkem je, že výstup neobsahuje název souboru. Bohužel kvůli omezením Linuxumd5sum
příkaz, toto stále neodpovídá souboru .md5, který jste stáhli z Maxmind, takže:cut
se používá k úpravě výsledného výstupu, přičemž zůstane pouze vypočítaný md5.- pomocí
cmp
namísto podsložek podle komentářů k vaší otázce.
Druhý a třetí bod jsou pro vás možná nejdůležitější.
Další možností pro vytvoření souboru md5sum.txt by bylo udělat to za běhu během stahování. Například:
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
Toto používá tee
příkaz k rozdělení souboru do jeho umístění „uložit“ a další roura, která prochází md5sum a vygeneruje váš soubor .txt.
Může vám ušetřit minutu, kterou by jinak sežral součet md5, který běží poté. A bude lépe využívat výhod SMP. :)