sha256sum을 사용하여 체크섬을 확인할 때 진행 상황을 표시하는 방법

sha256sum을 사용하여 체크섬을 확인할 때 진행 상황을 표시하는 방법

대용량 파일의 SHA256 체크섬을 확인할 때 진행 상황을 표시하는 방법은 무엇입니까? sha256sum -c SHA256SUMS파일에 대용량 파일에 대한 체크섬이 포함된 작업을 수행 할 때 SHA256SUMS명령이 언제 완료될지 알 수 없습니다. 작업하는 동안 진행 상황을 표시할 수 있는 방법이 있나요 sha256sum -c ...?

답변1

sha256sumGNU Coreutils에 속합니다. 대부분은 --progress또는 status=progress옵션이 없습니다(최근 버전은 dd하나만 제공하지만 sha256sum없음, 참조).자식 로그)

해결책:

  1. progress -w(Coreutils Progress Viewer).watch백그라운드 프로세스로 실행될 수 있습니다(또는 예를 들어 와 함께 두 번째 터미널에서 사용됨 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

출력을 덮어쓰는 것을 방지하기 위해 두 번째 방법을 더 좋게 만드는 임시 파일을 통해 수정 사항을 추가했습니다 OK. 또한 다소 큰 파일이 여러 개 있는 체크섬 파일에도 유용합니다.

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

(이 최신 수정 사항은 내 디렉터리에 있는 몇 가지 압축 이미지 파일과 해당 md5sum을 사용하여 테스트되었으므로 sha256sum에서 전환했지만 구문은 동일합니다.)

이 방법은 해결 방법이며 pv설치가 필요합니다 espeak.

이것은 해결 방법입니다 sha256sum -c. 해당 체크섬은 먼저 체크섬 파일에서 추출되어 두 번째 매개변수로 사용되어야 합니다.

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나중에 쉽게 재사용할 수 있도록 내 항목에 추가할 만큼 유용하다는 것을 알았습니다. 사용할 수 있는 다른 파이프라인 진행률 표시기가 있습니다!

관련 정보