大容量ファイルのSHA256チェックサムを確認するときの進捗状況を表示する方法は?sha256sum -c SHA256SUMS
ファイルに大容量ファイルのチェックサムを含む操作を実行すると、SHA256SUMS
コマンドがいつ完了するかがわかりません。作業中に進行状況を表示する方法はありますかsha256sum -c ...
?
答え1
sha256sum
GNU Coreutilsに属します。ほとんどは--progress
またはstatus=progress
オプションがありません(最新バージョンはdd
1つだけ提供されていますがsha256sum
、なし、参照)。子ログ)
解決策:
はい
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
インストールが許可されると、必要な内容が提供されます。すべての主要ディストリビューションにパッケージ化する必要がありますが、通常いいえ基本インストール、特に最小インストールの場合。
最後の処置:
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
後で簡単に再利用できるように、自分のアイテムに追加するのに役立つことがわかりました。利用可能な他のパイプライン進行状況インジケータがあります!