لینوکس

مقایسهٔ دو فایل با diff و cmp؛ تشخیص تغییر بدون دست‌کاری

مقایسهٔ متنی با diff -u و بایتی با cmp، تفسیر کدهای خروج و تفاوت پایان خط را بدون دست‌کاری فایل اصلی یاد بگیرید.

رایکت رایکت بروزرسانی ۴ دقیقه مطالعه ۰ دیدگاه
مقایسهٔ دو فایل با diff و cmp؛ تشخیص تغییر بدون دست‌کاری

اگر می‌خواهید بدانید دو نسخهٔ یک فایل چه تفاوتی دارند، diff تفاوت متنی را نشان می‌دهد و cmp مقایسهٔ بایتی انجام می‌دهد. هر دو می‌توانند بدون تغییر فایل‌ها کمک کنند؛ کد خروج۱ برای این ابزارها معمولاً یعنی «تفاوت پیدا شد»، نه اینکه اجرای مقایسه خراب شده باشد.

۱. روی دو کپی مجاز مقایسه کنید

دو فایل آموزشی old.conf و new.conf به‌ترتیب این محتوا را دارند. نام conf در اینجا به معنی فایل تنظیم واقعی سرور نیست:


# old.conf
mode=preview
port=3000

# new.conf
mode=preview
port=3001

خط‌های توضیحیِ نام فایل را داخل خود فایل ننویسید؛ هر فایل فقط دو خط mode و port دارد. این فایل‌ها از قبل در پوشهٔ آزمایش ساخته شدند. هیچ فرمان کپی یا بازنویسی روی تنظیمات سرور برای اجرای این مثال لازم نیست.

۲. خواندن خروجی unified diff


diff -u -- old.conf new.conf

در خروجی، سربرگ با — نسخهٔ اول و با +++ نسخهٔ دوم را معرفی می‌کند. خطی که با – شروع می‌شود در نسخهٔ اول بوده و خط دارای + در نسخهٔ دوم است. در نمونه، -port=۳۰۰۰ و +port=۳۰۰۱ دیده شد.

علامت‌های کنار خط، دستور حذف یا اضافه‌کردن برای شِل نیستند. diff فقط اختلاف را گزارش کرده است؛ فایل old.conf بعد از اجرا همان مقدار اولیه را دارد. زمان‌های کنار سربرگ هم مشخصات فایل‌اند، نه اثبات زمان واقعی حادثه.

۳. cmp برای برابری دقیق بایت‌ها


cmp -- old.conf new.conf
cmp -- old.conf old.conf

cmp در حالت معمول محل اولین اختلاف را گزارش می‌کند. مقایسهٔ فایل با خودش خروجی نداشت و کد۰ داد. نبود خروجی را همراه کد خروج تفسیر کنید؛ اگر stderr را پنهان کرده باشید، فایل ناموجود هم ممکن است فقط با وضعیت خطا معلوم شود.

وضعیت معنی برای GNU diff/cmp
0 تفاوت پیدا نشد
1 تفاوت وجود دارد
2 اشکال اجرا؛ مانند مسیر ناموجود یا دسترسی ناکافی

برای مقایسهٔ چند فایل مستقل از انتقال، هش معتبر هم کاربرد دارد، ولی محل تفاوت متن را نشان نمی‌دهد.

۴. فاصله، پایان خط و فایل باینری

دو فایل ممکن است در ظاهر یکسان باشند ولی CRLF و LF، فاصلهٔ انتهای خط یا encoding متفاوت داشته باشند. cmp چنین تفاوتی را هم اختلاف بایتی می‌بیند. diff برای متن خوانا مناسب‌تر است؛ فایل فشرده و تصویر را با اجبار به متن تبدیل نکنید.

نکته: گزینه‌های نادیده‌گرفتن فاصله می‌توانند اختلاف را پنهان کنند. در فایل‌هایی که فاصله معنایی دارد، مانند YAML یا کد، ابتدا مقایسهٔ عادی را ببینید. «با یک گزینه خروجی خالی شد» به معنی بی‌خطر بودن تفاوت نیست.

۵. مقایسه به معنی مجوز اعمال تغییر نیست

  • فایل درست و مسیر هر دو نسخه را تأیید کنید.
  • اگر محتوا رمز یا کلید دارد، خروجی diff را عمومی ارسال نکنید.
  • برای بررسی یک مقدار، فقط بخش ضروری را با پاک‌سازی اطلاعات به اشتراک بگذارید.
  • diff را به patch یا کپی روی فایل زنده وصل نکنید مگر طرح تغییر و بازیابی جدا دارید.

تفاوت پورت در این نمونه صرفاً نمایشی است؛ مقاله توصیه نمی‌کند پورت سرور شما تغییر کند. خروجی باید به تصمیم کمک کند، نه اینکه خودکار جای نسخهٔ فعلی را بگیرد.

۶. نتیجهٔ قابل ثبت

نام دو نسخه، تاریخ بررسی، فرمان و کد خروج را ثبت کنید. اگر تفاوت مهمی پیدا شد، دلیل مورد انتظار یا غیرمنتظره‌بودن آن را جدا توضیح دهید. در نبود SSH، مقایسهٔ نسخه‌های دانلودشده در محیط مجاز محلی هم ممکن است؛ برای یافتن خود فایل‌ها، راهنمای File Manager مکمل این مسیر است.

هر دو مسیر ورودی diff یا cmp باید به فایل‌های موردنظر اشاره کنند؛ برای تشخیص تفاوت مسیرها، راهنمای pwd و cd و مسیرهای لینوکس را ببینید.

۷. مسیر مطالعهٔ مرتبط

۸. منابع و روش بررسی

منابع رسمی در ۲۴ اکتبر ۲۰۲۶ بررسی شدند. نمونه‌های فرمان با دادهٔ آموزشی در GNU/MSYS روی ویندوز بررسی شده‌اند؛ این محیط، سرور لینوکس بومی نیست. رفتار مالکیت و دسترسی فایل‌سیستم باید روی سیستم مقصد جدا بررسی شود.

این مطلب برایتان مفید بود؟
رایکت
نوشته شده توسط رایکت

تیم محتوای رایکت؛ آموزش‌ها و راهنماهای کاربردی هاست، دامنه و مدیریت سایت.

مطالب مرتبط

دیدگاه‌ها

نظر یا سوال خود را درباره این مطلب با ما در میان بگذارید

دیدگاه خود را بنویسید

aapanel
cloudlinux
cpanel
directadmin
jetbackup
laravel
mysql
virtualizor
vmware
wordpress