একটি চেকসাম তৈরির সম্ভাব্য কমান্ড commands
দুর্ভাগ্যক্রমে, একটি ক্রিপ্টোগ্রাফিক চেকসাম উত্পন্ন করার জন্য কোনও স্ট্যান্ডার্ড ইউটিলিটি নেই। সেখানে একটি প্রমিত উপযোগ একটি সিআরসি জেনারেট করতে হল: cksum
; একটি প্রতিকূল পরিবেশে পরিবর্তনগুলি সনাক্ত করার উদ্দেশ্যে এটি আপনার পক্ষে পর্যাপ্ত হতে পারে।
আমি MD5 এর চেয়ে SHA1 ব্যবহার করার পরামর্শ দেব। এমডি 5 ইউটিলিটি রয়েছে তবে এসএএএ 1 নেই এমন অনেকগুলি সিস্টেম নেই এবং আপনি যদি ক্রিপ্টোগ্রাফিক চেকসাম ব্যবহার করতে চলেছেন তবে সংঘর্ষগুলি খুঁজে পাওয়ার জন্য আপনি কোনও অলগরিদম ব্যবহার করতে পারেন (ধরে নিচ্ছেন যে আপনি আকারটিও পরীক্ষা করেছেন)।
একটি সরঞ্জাম যা স্ট্যান্ডার্ড নয় তবে সাধারণ এবং হজমগুলি গণনা করতে পারে তা হ'ল ওপেনএসএসএল । এটি সাইগউইন, ডেবিয়ান এবং ওএসএক্সের জন্য উপলব্ধ, তবে দুর্ভাগ্যক্রমে ওএসএক্সে ডিফল্ট ইনস্টলেশনটির অংশ নয় of
openssl dgst -sha1
ওএসএক্স 10.6-তে, একটি shasum
ইউটিলিটি রয়েছে, যা দেবিয়ানেও উপস্থিত রয়েছে (এটি perl
প্যাকেজের অংশ ) এবং আমি সাইগউইনের উপরও বিশ্বাস করি। এটি পার্ল স্ক্রিপ্ট। বেশিরভাগ ইউনিক্স সিস্টেমে পার্ল ইনস্টল করা আছে, তাই আপনি যদি এই স্ক্রিপ্টটি কোথাও উপলব্ধ না হন তবে উদ্বিগ্ন হন তবে আপনি আপনার মেকফিলের পাশাপাশি সেই স্ক্রিপ্টটি বান্ডিল করতে পারেন।
আপনার সিস্টেমের জন্য সঠিক কমান্ড নির্বাচন করা
ঠিক আছে, আসুন আমরা বলি যে আপনি সত্যিই কোনও আদেশ খুঁজে পাবেন না যা সর্বত্র কাজ করে।
খোলের মধ্যে
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
জিএনইউ মেক করুন
মেকফিলটি লোড হয়ে গেলে শেল স্নিপেট চালানোর জন্য আপনি shell
ফাংশনটি ব্যবহার করতে পারেন এবং আউটপুটটিকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করতে পারেন।
sum := $(shell { command -v sha1sum || command -v sha1 || command -v shasum; } 2>/dev/null)
%.sum: %
$(sum) $< >$@
পোর্টেবল (পসিক্স) তৈরি করুন
আপনি কেবল নিয়মে শেল কমান্ড চালাতে পারেন, সুতরাং প্রতিটি নিয়ম যা একটি চেকসাম গণনা করে তার জন্য লুকিং কোড থাকতে হবে। আপনি একটি পরিবর্তনশীল মধ্যে স্নিপেট রাখতে পারেন। মনে রাখবেন যে বিধিগুলিতে পৃথক লাইনগুলি স্বাধীনভাবে মূল্যায়ন করা হয়। এছাড়াও মনে রাখবেন যে $
শেলটি পাস করতে হবে এমন লক্ষণগুলিতে পালানো দরকার $$
।
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