คำสั่งที่เป็นไปได้ในการสร้างการตรวจสอบ
น่าเสียดายที่ไม่มียูทิลิตี้มาตรฐานในการสร้างการตรวจสอบการเข้ารหัสลับ มีสาธารณูปโภคที่ได้มาตรฐานในการสร้างซีอาร์ซีคือcksum
; สิ่งนี้อาจเพียงพอสำหรับวัตถุประสงค์ของคุณในการตรวจจับการเปลี่ยนแปลงในสภาพแวดล้อมที่ไม่เป็นมิตร
ฉันจะแนะนำให้ใช้ SHA1 มากกว่า MD5 มีหลายระบบที่มียูทิลิตี MD5 แต่ไม่มี SHA1 และถ้าคุณจะใช้การตรวจสอบการเข้ารหัสลับคุณอาจใช้อัลกอริทึมที่ไม่มีเมธอดที่รู้จักเพื่อค้นหาการชนกัน (สมมติว่าคุณตรวจสอบขนาดด้วย)
เครื่องมืออย่างหนึ่งที่ไม่ได้มาตรฐาน แต่ที่พบบ่อยและสามารถคำนวณย่อยสลายเป็นOpenSSL มีให้สำหรับ Cygwin, Debian และ OSX แต่น่าเสียดายที่ไม่ได้เป็นส่วนหนึ่งของการติดตั้งเริ่มต้นบน OSX
openssl dgst -sha1
ใน OSX 10.6 มีshasum
ยูทิลิตี้ซึ่งมีอยู่ใน Debian (เป็นส่วนหนึ่งของperl
แพ็คเกจ) และฉันก็เชื่อใน Cygwin ด้วย นี่คือสคริปต์ Perl ระบบ unix ส่วนใหญ่มีการติดตั้ง 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 ทำ
คุณสามารถใช้shell
ฟังก์ชั่นเพื่อเรียกใช้ shell snippet เมื่อโหลดไฟล์และเก็บเอาต์พุตในตัวแปร
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
ทำให้พกพา (POSIX)
คุณสามารถเรียกใช้คำสั่งเชลล์ในกฎดังนั้นแต่ละกฎที่คำนวณ checksum จะต้องมีรหัสการค้นหา คุณสามารถวางตัวอย่างในตัวแปร โปรดจำไว้ว่าบรรทัดแยกต่างหากในกฎจะถูกประเมินโดยอิสระ ยังจำได้ว่าสัญญาณว่าจะได้รับการส่งผ่านไปยังเปลือกจำเป็นที่จะหนีไป$
$$
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