هنگام دانلود فایل‌ها (به ویژه فایل‌های نصبی) از وب سایت‌ها، بهتر است که صحت فایل دانلود شده را تأیید کنید. یک وب سایت اغلب به منظور تضمین اینکه بارگیری به درستی انجام شده است، برای هر فایل، یک مقدار hash نمایش می‌دهد.

در این مقاله، به شرح ابزار md5sum پرداخته شده است که می‌تواند به منظور تأیید صحت بارگیری فایل‌ها استفاده شود. سه ابزار کاربردی دیگر به نام sha1sum ،sha256sum و sha512sum نیز وجود دارند که مشابه md5sum کار می‌کنند.

 

 

این مطلب نیز ممکن است برای شما مفید باشد: دستور Dig در لینوکس

 

ساختار دستور md5sum در لینوکس

دستور md5sum با استفاده از الگوریتم MD5، یک مقدار checksum با 32 کاراکتر (128 بیت) از فایل داده شده چاپ می‌کند. ساختار این دستور بصورت زیر است:

md5sum [OPTION]... [FILE]...

عملکرد این ابزار در صفحه man آن به صورت زیر آمده است:

Print or check MD5 (128-bit) checksums.

مثال‌های زیر به شما ایده بهتری از کاربرد اساسی md5sum می‌دهند.

توجه: در اینجا از سه فایل با نام‌های file2.txt ،file1.txt و file3.txt به عنوان فایل‌های ورودی استفاده خواهد شد. متن موجود در هر فایل در ادامه لیست شده است.

فایل file1.txt:

hi
hello
how are you
thanks.

فایل file2.txt:

hi
hello to you
I am fine
Your welcome!

فایل file3.txt:

hallo
Guten Tag
Wie geht es dir
Danke.

 

نمایش مقدار hash

از دستور md5sum به تنهایی (بدون هیچ گزینه‌ای) می‌توان به منظور نمایش مقدار hash و نام فایل استفاده کرد.

md5sum file1.txt

خروجی این دستور، مشابه زیر خواهد بود:

[Documents]$ md5sum file1.txt
1ff38cc592c4c5d0c8e3ca38be8f1eb1  file1.txt
[Documents]$

 

با استفاده از گزینه tag-- می‌توان خروجی دستور را در قالب BSD-style نمایش داد.

md5sum --tag file1.txt
[Documents]$ md5sum --tag file1.txt
MD5 (file1.txt) = 1ff38cc592c4c5d0c8e3ca38be8f1eb1
[Documents]$

 

این مطلب نیز ممکن است برای شما مفید باشد: دستور passwd در لینوکس

 

اعتبارسنجی چندین فایل

دستور md5sum می‌تواند چندین فایل را همزمان تأیید کند. به منظور نشان دادن این قابلیت، از دو فایل file2.txt و file3.txt استفاده خواهیم کرد.

اگر hashها را در یک فایل بنویسید، از آن فایل می‌توان به منظور بررسی تغییر یا عدم تغییر هریک از فایل‌های file2.txt و file3.txt استفاده کرد. در اینجا hashهای آن دو فایل در فایل hashes نوشته شده است که با استفاده از آن می‌توان عدم تغییر هر یک از آن فایل‌ها را اعتبار سنجی کرد.

md5sum file1.txt file2.txt file3.txt > hashes
md5sum --check hashes
[Documents]$ md5sum file1.txt file2.txt file3.txt > hashes
[Documents]$ md5sum --check hashes
file1.txt: OK
file2.txt: OK
file3.txt: OK
[Documents]$ 

 

اکنون اگر به عنوان مثال با اضافه کردن عبارت “!”، به انتهای فایل file3.txt، آن را تغییر داده و دستور را دوباره اجرا نماییم.

echo "!" >> file3.txt
md5sum --check hashes

خروجی زیر را مشاهده خواهیم کرد:

[Documents]$ md5sum --check hashes
file1.txt: OK
file2.txt: OK
file3.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
[Documents]$ 

همانطور که مشاهده می‌کنید، مشخص است که فایل file3.txt تغییر کرده است.

 

نمایش تنها فایل‌های اصلاح شده

چنانچه باید صحت فایل‌های زیادی را اعتبارسنجی نمایید، با اضافه کردن گزینه "quiet--" به دستور md5sum می‌توانید، تنها فایل‌های تغییر یافته را در خروجی مشاهده کنید.

md5sum --quiet --check hashes
[Documents]$ md5sum --quiet --check hashes
file3.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
[Documents]$

 

این مطلب نیز ممکن است برای شما مفید باشد: دستور Ls در لینوکس (لیست کردن فایل ها و دایرکتوری ها)

 

تشخیص تغییرات در یک اسکریپت

ممکن است بخواهید از md5sum در یک اسکریپت استفاده نمایید. با استفاده از گزینه "status--"، دستور md5sum هیچ خروجی چاپ نمی‌کند. در عوض، کد وضعیت در صورت عدم تغییر 0 و در صورت عدم تطابق فایل‌ها (تغییر)، 1 را برمی‌گرداند. اسکریپت  hashes.sh زیر، عدد 1 را در کد وضعیت برمی‌گرداند؛ زیرا یکی از فایل‌های مثال قبل تغییر کرده است. فایل اسکریپت در زیر آمده است:

sh hashes.sh
hashes.sh:
#!/bin/bash
md5sum --status --check hashes
Result=$?
echo "File check status is: $Result"
exit $Result

[Documents]$ sh hashes.sh
File check status is: 1
[lion@ornatecandy Documents]$ 

 

شناسایی مقادیر hash نامعتبر

چنانچه هنگام مقایسه فایل‌ها، hash نامعتبری بدست آید، دستور md5sum می‌تواند به شما اطلاع دهد. به منظور فعالسازی این هشدار می‌توانید، از گزینه warn-- استفاده نمایید. برای این مثال آخر، از sed به منظور افزودن یک کاراکتر اضافی در ابتدای خط سوم استفاده کرده‌ایم. با این کار، مقدار hash موجود در فایل‌ها تغییر یافته و آن را نامعتبر می‌کند.

sed -i '3s/.*/a&/' hashes
md5sum --warn --check hashes

خروجی زیر نشان می‌دهد که خط سوم دارای یک hash نامعتبر است.

[Documents]$ sed -i '3s/.*/a&/' hashes
[Documents]$ md5sum --warn --check hashes
file1.txt: OK
file2.txt: OK
md5sum: hashes: 3: improperly formatted MD5 checksum line
md5sum: WARNING: 1 line is improperly formatted
[Documents]$

 

 

منبع:

howtoforge