sha256sumを使用してチェックサムを確認するときの進捗状況を表示する方法

sha256sumを使用してチェックサムを確認するときの進捗状況を表示する方法

大容量ファイルのSHA256チェックサムを確認するときの進捗状況を表示する方法は?sha256sum -c SHA256SUMSファイルに大容量ファイルのチェックサムを含む操作を実行すると、SHA256SUMSコマンドがいつ完了するかがわかりません。作業中に進行状況を表示する方法はありますかsha256sum -c ...

答え1

sha256sumGNU Coreutilsに属します。ほとんどは--progressまたはstatus=progressオプションがありません(最新バージョンはdd1つだけ提供されていますがsha256sum、なし、参照)。子ログ)

解決策:

  1. はいprogress -w(Coreutils Progress Viewer)。watchバックグラウンドプロセスとして実行することができます(または2番目の端末で使用されますwatch progress -w)。

    $ progress -w & sha256sum -c Fedora-Workstation-36-1.5-x86_64-CHECKSUM.txt
    [2] 58536
    [58537] sha256sum /home/user/Downloads/Fedora-Workstation-Live-x86_64-36-1.5.iso
            20.7% (398.1 MiB / 1.9 GiB) 383.3 MiB/s remaining 0:00:03 
    

    インストールが許可されると、必要な内容が提供されます。すべての主要ディストリビューションにパッケージ化する必要がありますが、通常いいえ基本インストール、特に最小インストールの場合。

  2. 最後の処置: pv。残念ながら、その機能を置き換えることはできませんがsha256sum -c(複数のファイルをサポートせずに何かを自動的に比較することはできません)、pvファイルを次にパイプすることは確かに可能ですsha256sum

    $ pv Fedora-Workstation-Live-x86_64-35-1.2.iso | sha256sum
    159GiB 0:00:04 [ 411MiB/s] [============================>      ] 85% ETA 0:00:02
    

    デフォルトでは-p-eおよびはアクティブオプションでなければなりません(進行状況バーと予想完了時間を提供)。pvすべての主要なディストリビューションに対してパッケージ化する必要があり、通常は最小ディストリビューションでもデフォルトでインストールされます。

答え2

この方法を使用するにはインストールが必要な場合がprogressありますxterm

sha256sum -c SHA256SUMS & pid=$! ; xterm -e progress -mp $pid 2>/dev/null

進行状況は別のウィンドウに記録されます(もちろん、グラフィックデスクトップが必要です)。そうでなければ

sha256sum -c SHA256SUMS & progress -mp $!

OKまた動作しますが、見たい確認のような出力を上書きします(高速フラッシュだけでなく)。したがって、別のウィンドウを使用せずにAndreas Haerterの回答で提案されているように、進行状況を継続的に更新するよりも、残りの時間を一度推定することをお勧めします。

$ progress -w & sha256sum -c SHA256SUMS
[6] 9930
[ 9931] sha256sum /media/multimed-2/CD/ubuntu/22.04/ubuntustudio-22.04-dvd-amd64.iso
    5.1% (217.8 MiB / 4.1 GiB) 212.4 MiB/s remaining 0:00:18

ubuntustudio-22.04-dvd-amd64.iso: OK

出力を上書きするのを防ぐために、2番目の方法をより良くする一時ファイルを介して修正を追加しましたOK。また、多少大きなファイルが複数あるチェックサムファイルにも便利です。

md5sum -c md5sum.txt > /tmp/mytmp & progress -mp $! ; cat /tmp/mytmp

(この最新の修正は、私のディレクトリにあるいくつかの圧縮イメージファイルと対応するmd5sumを使用してテストされたため、sha256sumで切り替えましたが構文は同じです。)

この方法は回避策であり、インストールpvが必要ですespeak

これは回避策ですsha256sum -c。チェックサムは最初にチェックサムファイルから抽出され、2番目のパラメータとして使用される必要があります。

espeak矛盾に関する大きな警告が必要ない場合は、この手順をスキップできます。

シェルスクリプトsha256check-pv:

#! /bin/bash

namesum=$(basename $0)
namesum=${namesum/check/sum}
namesum=${namesum/-pv}
#echo $namesum

if [ "$2" == "" ]
then
 echo "Usage: $0 <file> <$namesum>"
 exit
fi

calcsum=$(pv "$1" | "$namesum" | cut -d " " -f1)
chksum="${2,,}"

echo "calculated $namesum=$calcsum"
echo "should be  $namesum=$chksum"

if [ "$calcsum" == "$chksum" ]
then
 echo "$0 indicates SUCCESSFUL download :-)"
else
 echo ":-( $0 indicates FAILED download :-("
 espeak -p 65 -s 120 -k10 -a 150 "Download failed" >/dev/null 2>/dev/null
fi

例:

正しいダウンロードファイルと正しいチェックサムを使用して:

$ sha256check-pv ubuntustudio-22.04-dvd-amd64.iso 66a6c7e54c41e39b5e671cea65f3af635c26aa7c3b6983d8785970988a9ec0a2
4,14GiB 0:00:19 [ 212MiB/s] [========================================================================>] 100%            
calculated sha256sum=66a6c7e54c41e39b5e671cea65f3af635c26aa7c3b6983d8785970988a9ec0a2
should be  sha256sum=66a6c7e54c41e39b5e671cea65f3af635c26aa7c3b6983d8785970988a9ec0a2
/home/sudodus/bin/sha256check-pv indicates SUCCESSFUL download :-)

チェックサムの最後の数字を変更するとき

$ sha256check-pv ubuntustudio-22.04-dvd-amd64.iso 66a6c7e54c41e39b5e671cea65f3af635c26aa7c3b6983d8785970988a9ec0a1
4,14GiB 0:00:19 [ 212MiB/s] [========================================================================>] 100%            
calculated sha256sum=66a6c7e54c41e39b5e671cea65f3af635c26aa7c3b6983d8785970988a9ec0a2
should be  sha256sum=66a6c7e54c41e39b5e671cea65f3af635c26aa7c3b6983d8785970988a9ec0a1
:-( /home/sudodus/bin/sha256check-pv indicates FAILED download :-(

答え3

これはbashシェルを使用してMacOS 10.15.7でテストされました。他のシェルとは異なるバージョンのMacOSも動作するはずですが、そうでないかもしれません。

sha256sumは標準入力を受け入れるため、ファイルpvやその他の進捗確認フィルタをパイプすることができます。

cat some_long_file_you_want_progress_on | pv | sha256sum

マニュアルページによると、「pvにはディスプレイスイッチ、出力修飾子、および一般的なオプションで区切られた多くのオプションがあります」

パイプラインデータはその長さを知らないため、完了率が必要な場合(ただし意味のないアニメーションではない)ファイルサイズを調べる必要があります。ファイルサイズがわかっている場合は、pvの「-s」スイッチを使用できます。

cat some_long_file_you_want_progress_on | pv -s 12345 | sha256sum

これを頻繁に実行する場合は、ファイルサイズを把握できるようにシェル関数にすることができます。

function sha_prog {
    cat $1 | pv -s $(du -sb $1 | awk '{print $1}') | sha256sum
}

今すぐ入力すると、sha_prog some_long_file_you_want_progress_on状況が発生したときに完了したアニメーションの割合が得られます。

これは、関数の最初の引数( "some_long_file_you_want_progress_on")の内容を使用してパイプを開始し、pv -sそれをファイルサイズ(du)にパイプしてからにパイプしますsha256sum

'{print $1}'一重引用符で保護されるため、$1確かに代わりに、ファイルサイズと名前が標準出力に印刷されるため、実際の文字「$ 1」は入力awkの最初のトークンとして解釈される渡されます。du

私はこれをテストした結果、~/.bashrc後で簡単に再利用できるように、自分のアイテムに追加するのに役立つことがわかりました。利用可能な他のパイプライン進行状況インジケータがあります!

関連情報