posts - 167,  comments - 30,  trackbacks - 0
          md5sum命令詳解:
          linux下的shell命令 ,制作md5碼 也用于軟件的md5校驗
          MD5算法常常被用來驗證網絡文件傳輸?shù)耐暾裕乐刮募蝗舜鄹摹D5 全稱是報文摘要算法(Message-Digest Algorithm 5),此算法對任意長度的信息逐位進行計算,產生一個二進制長度為128位(十六進制長度就是32位)的“指紋”(或稱“報文摘要”),不同的文件產生相同的報文摘要的可能性是非常非常之小的。
          在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。一般來說,安裝了Linux后,就會有md5sum這個工具,直接在命令行終端直接運行。
          1、使用md5sum來產生指紋(報文摘要)命令如下:
          md5sum filename > filename.md5 或者
          md5sum filename >>filename.md5
          也可以把多個文件的報文摘要輸出到一個md5文件中,這要使用通配符*,比如某目錄下有幾個iso文件,要把這幾個iso文件的摘要輸出到iso.md5文件中,命令如下:
          md5sum *.iso > iso.md5
          2、使用md5報文摘要驗證文件,方法有二:
          把下載的文件file和該文件的file.md5報文摘要文件放在同一個目錄下,然后用如下命令進行驗證:
          md5sum -c file.md5
          然后如果驗證成功,則會輸出:正確結果。
          實戰(zhàn)案例:
          需求:虛擬機存在多份備份,當進行備份恢復時,要求檢查源備份壓縮文件的完整性。那么可以通過md5這種方式來驗證。
          壓縮備份文件并生成md5碼,部分shell腳本如下:
          #----------------------------------
          log "Compressing and moving $SRC_PATH"
          exec_and_log "$SSH $SRC_HOST mkdir -p ${SRC_PATH}_compress"
          for file in `$SSH $SRC_HOST ls $SRC_PATH | grep -v $SN_SIGN`
          do
               exec_and_log "$SSH $SRC_HOST cd $SRC_PATH;sudo chmod -R +r $SRC_PATH/*;tar -Sczvf ${SRC_PATH}_compress/${file}.tgz ${file}"
          done
          #----------------------------------

          #--------------md5 begin-----------------
          log "Create backup.md5"
          exec_and_log "$SSH $SRC_HOST $MD5SUM ${SRC_PATH}_compress/*.tgz > ${SRC_PATH}_compress/backup.md5"
          #--------------md5 end-----------------

          #其中 exec_and_log是另一個公共腳本中定義的。shell中可以通過點(.)的方式將腳本引入。該函數(shù)內如下:
          # Executes a command, if it fails returns error message and exits
          # If a second parameter is present it is used as the error message when
          # the command fails
          function exec_and_log
          {
              message=$2

              EXEC_LOG_ERR=`$1 2>&1 1>/dev/null`
              EXEC_LOG_RC=$?

              if [ $EXEC_LOG_RC -ne 0 ]; then
                  log_error "Command \"$1\" failed: $EXEC_LOG_ERR"

                  if [ -n "$2" ]; then
                      error_message "$2"
                  else
                      error_message "Error executing $1: $EXEC_LOG_ERR"
                  fi
                  exit $EXEC_LOG_RC
              fi
          }

          # Logs a message, alias to log_info
          function log
          {
              log_info "$1"
          }

          # Log function that knows how to deal with severities and adds the
          # script name
          function log_function
          {
              echo "$1: $SCRIPT_NAME: $2" 1>&2
          }

          # Logs an info message
          function log_info
          {
              log_function "INFO" "$1"
          }

          # Logs an error message
          function log_error
          {
              log_function "ERROR" "$1"
          }

          # This function is used to pass error message to the mad
          function error_message
          {
              (
                  echo "ERROR MESSAGE --8<------"
                  echo "$1"
                  echo "ERROR MESSAGE ------>8--"
              ) 1>&2
          }

          生成的backup.md5內容:
          $ md5sum *.tgz > backup.md5 
          2c07174d451a687bc0e401b1dc7d84b8  checkpoint.1376892493.tgz
          57a18d7f6eed36565b9012e519985130  checkpoint.1376903188.tgz
          b652990806e58a81b41dc1b23db9adda  checkpoint.1376904023.tgz
          f4e7adb46a8fde2643e082875cc60e21  checkpoint.1376904289.tgz
          ad2a59902652e2896b35507417b7016f  checkpoint.tgz
          4bd43eac64f238bb35c7194816da7d23  deployment.0.tgz
          ee3d9266cf92f7540cc75a94343bc20a  deployment.7.tgz
          fcd5aae37354b5cb66f4b90544eaa5c3  disk.0.tgz
          c1ef6d911b441660ec2d1e44b5a56f66  disk.1.iso.tgz
          25eae70a31a7c7cff3baade4cd65fe82  disk.1.tgz

          檢查備份文件是否完整:
          exec_and_log "$SSH $SRC_HOST $MD5SUM -c ${SRC_PATH}/backup.md5"

          檢測結果:
          $ md5sum -c backup.md5 
          checkpoint.1376892493.tgz: OK
          checkpoint.1376903188.tgz: OK
          checkpoint.1376904023.tgz: OK
          checkpoint.1376904289.tgz: OK
          checkpoint.tgz: OK
          deployment.0.tgz: OK
          deployment.7.tgz: OK
          disk.0.tgz: OK
          disk.1.iso.tgz: OK
          disk.1.tgz: OK
          posted on 2013-08-20 11:34 David1228 閱讀(2441) 評論(0)  編輯  收藏 所屬分類: Linux

          <2013年8月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關

          Spring相關

          云計算/Linux/虛擬化技術/

          友情博客

          多線程并發(fā)編程

          開源技術

          持久層技術相關

          搜索

          •  

          積分與排名

          • 積分 - 358865
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 左云县| 宁武县| 闻喜县| 杭锦后旗| 文登市| 苏尼特右旗| 奉新县| 福鼎市| 江城| 邳州市| 抚州市| 泗阳县| 新乐市| 武威市| 临沭县| 金塔县| 叙永县| 蒙山县| 芜湖市| 资阳市| 塘沽区| 河源市| 黄大仙区| 靖西县| 略阳县| 乾安县| 孟津县| 陆良县| 海丰县| 潮安县| 济宁市| 罗定市| 潜江市| 江津市| 津市市| 永春县| 安图县| 新宾| 乐山市| 饶阳县| 叙永县|