체크섬을 생성하는 가능한 명령
불행히도, 암호화 체크섬을 생성하는 표준 유틸리티는 없습니다. CRC를 생성하는 표준 유틸리티가 있습니다 : cksum
; 이는 적대적이지 않은 환경에서 변경 사항을 감지하는 데 충분할 수 있습니다.
MD5 대신 SHA1을 사용하는 것이 좋습니다. MD5 유틸리티는 있지만 SHA1이없는 시스템은 많지 않으며 암호화 체크섬을 사용하려는 경우 알려진 방법이없는 알고리즘을 사용하여 충돌을 찾을 수도 있습니다 (크기도 확인한다고 가정).
표준은 아니지만 일반적이며 다이제스트를 계산할 수있는 도구 중 하나는 OpenSSL 입니다. Cygwin, Debian 및 OSX에서 사용할 수 있지만 불행히도 OSX에서 기본 설치의 일부는 아닙니다.
openssl dgst -sha1
OSX 10.6에는 shasum
Debian ( perl
패키지 의 일부)에도 있는 유틸리티가 있으며 Cygwin도 믿습니다. 이것은 Perl 스크립트입니다. 대부분의 유닉스 시스템에는 Perl이 설치되어 있으므로이 스크립트가 어디에서나 사용 가능하지 않을까 걱정되면 makefile과 함께 해당 스크립트를 묶을 수 있습니다.
시스템에 맞는 명령 선택
좋아, 실제로 모든 곳에서 작동하는 명령을 찾을 수 없다고 가정 해 봅시다.
껍질에서
사용하여 type
내장 된 명령을 사용할 수 있는지 확인합니다.
sum=
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do
if type "${x%% *}" >/dev/null 2>/dev/null; then sum=$x; break; fi
done
if [ -z "$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
$sum *.org
GNU 메이크
makefile이로드 될 때 shell
함수 를 사용하여 쉘 스 니펫을 실행하고 출력을 변수에 저장할 수 있습니다.
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
포터블 (POSIX) 메이크
규칙에서 쉘 명령 만 실행할 수 있으므로 체크섬을 계산하는 각 규칙에는 조회 코드가 포함되어야합니다. 스 니펫을 변수에 넣을 수 있습니다. 규칙의 개별 줄은 독립적으로 평가됩니다. 또한 $
쉘로 전달 될 부호는로 이스케이프해야한다는 점을 기억하십시오 $$
.
determine_sum = \
sum=; \
for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
done; \
if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi
checksums.dat: FORCE
$(determine_sum); \
$$sum *.org
autotools