GNU/Linux >> Linux の 問題 >  >> Linux

bash スクリプトで md5 の合計を比較する

ファイルを特定の md5 sum と比較したい場合は、次の関数を試すことができます:

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
}

そして、次のように使用します:

$ checkmd5 <SOME_MD5_SUM> filepath/file.abc

その行 if [ $file1 != $file2 ] 、2 つのファイルの内容を比較するのではなく、ファイル名のみを比較します。だから if [ "md5sum.txt" != "GeoLite2-City.md5" ]

それはうまくいくはずです:

if [ "`awk '{print $1;}' $file1`" != "`cat $file2`" ]; then
...do your logic here...
fi

だから..あなたが見ている問題は、 md5sum.txt の形式が 作成したファイルは .md5 の形式と一致しません ダウンロードしたファイルに対して、計算した値を確認する必要があります。

以下は、私のバージョンのスクリプトに近いものです。 (以下に説明があります。)

#!/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

ここでの主な違いは..

  • rm -f GeoLightCity.dat -rf の代わりに .必要以上に手を伸ばさないようにしましょう。
  • md5sum ファイルを名前で処理するのではなく、標準入力を取ります。その結果、出力にはファイル名が含まれません。残念ながら、Linux md5sum の制限のため コマンドを実行しても、これはまだ Maxmind からダウンロードした .md5 ファイルと一致しないため:
  • cut 計算された md5 のみを残して、結果の出力を変更するために使用されます。
  • cmp を使用 質問に対するコメントごとに、サブシェルの代わりに。

2 番目と 3 番目のポイントは、おそらくあなたにとって最も重要なものです。

md5sum.txt ファイルを作成するための別のオプションは、ダウンロード時にオンザフライで行うことです。例:

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

これは tee を使用します コマンドを使用してファイルを「保存」場所と別のパイプに分割し、md5sum を経由して .txt ファイルを生成します。

後で実行される md5sum によって消費される分を節約できます。また、SMP をより有効に活用できます。 :)


Linux
  1. Bashスクリプトをファイルに接続できますか?

  2. フォルダから最も古いファイルを削除するためのBashスクリプト?

  3. Bashスクリプト:ファイルがテキストファイルかどうかを確認しますか?

  1. エイリアス コマンドを bash スクリプトまたは .bashrc ファイルで機能させる方法

  2. md5 チェックサムでファイルの整合性を検証する方法

  3. bash スクリプトで標準入力を動的にリダイレクトする

  1. Bash スクリプト:不適切なインタープリター

  2. フォルダーから最も古いファイルを削除する Bash スクリプト

  3. bash スクリプトで unicode を grep する方法