대용량 파일의 SHA256 체크섬을 확인할 때 진행 상황을 표시하는 방법은 무엇입니까? sha256sum -c SHA256SUMS
파일에 대용량 파일에 대한 체크섬이 포함된 작업을 수행 할 때 SHA256SUMS
명령이 언제 완료될지 알 수 없습니다. 작업하는 동안 진행 상황을 표시할 수 있는 방법이 있나요 sha256sum -c ...
?
답변1
sha256sum
GNU Coreutils에 속합니다. 대부분은 --progress
또는 status=progress
옵션이 없습니다(최근 버전은 dd
하나만 제공하지만 sha256sum
없음, 참조).자식 로그)
해결책:
예
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
설치가 허용되면 원하는 내용이 제공됩니다. 모든 주요 배포판에 패키지되어 있어야 하지만 일반적으로아니요기본 설치, 특히 최소 설치의 경우.
최후의 조치:
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
나중에 쉽게 재사용할 수 있도록 내 항목에 추가할 만큼 유용하다는 것을 알았습니다. 사용할 수 있는 다른 파이프라인 진행률 표시기가 있습니다!