cmp - مقایسه دوفایل به صورت بایت بایت

cmp - از این دستور برای مقایسه ی دو فایل به صورت بایت بایت استفاده می‌شود.

شکل کلی دستور:

$ cmp [options] [firstfile] [secondfile]

برای مقایسه‌ی بین دوفایل روش‌های مختلفی وجود دارد که باید کاربر بین آن‌ها، دستوری را انتخاب کند که باب نیاز خود باشد. دستور cmp یکی از دستورهایی است که به آن کم توجه می‌شود ولی دارای مزیت‌های خاص خودش هست. این دستور که مخفف compare است، دو فایل را به صورت بایت بایت مقایسه می‌کند.

برای این‌که بهتر متوجه بشوید من دو فایل با نام‌های test1 و test2 ایجاد می‌کنم، با دستور cat از محتویات آن خروجی می‌گیرم که به صورت زیراست:

$ cat test1
this is a test
$ cat test2
this is a test

محتویات دوفایل کاملاً یکسان در نظر گرفتم و حال با دستور cmp این دو فایل را با یکدیگر مقایسه می‌کنم:

مثال:

$ cmp test1 test2

همین‌طور که می‌دانید این دوفایل یکسان بوده پس در خروجی هیچ‌چیز نخواهیم دید!

مثال دیگری را میاوریم که محتویات یکسان نبوده:

مثال:

$ cat test1
www.30li.ir
$ cat test2
this is a test
$ cmp test1 test2
test1 test2 differ: byte 1, line 1

بله! بایت اول از اولین خط فایل ۱ با فایل ۲ متفاوت است. که خروجی چنین را به ما می‌گوید. پس چون متفاوت است نیازی به مقایسه‌ی بقیه بایت‌ها نداریم (هدف از مقایسه، پی بردن به همسان بودن دو فایل است، اگر بایت اول  از فایل اول با بایت اول از فایل دوم همسان بود به سراغ بایت دوم هر فایل می رویم، در غیراین صورت اگر همسان نبود، لازم نیست به مقایسه‌ی بایت‌های بعدی بپردازیم، پس فایل همسان نیست).

درمثال بعد، ما محتویات دو فایل را طوری تغییر داده‌ایم که کمی شبیه به یکدیگر باشند:

مثال:

$ cat test1
a
b
c
d
e
g
$ cat test2
a
b
c
d
e
f
$ cmp test1 test2
test1 test2 differ: byte 11, line 6

گزینه‌های اختیاری:

i-: توسط این گزینه‌ی اختیاری می توانیم شروع مقایسه را براساس بایت مشخص کنیم. به عبارت بهتر، می‌گوییم که مقایسه را از کدام بایت شروع کن.

مثال:

$ cat test1
a
a
b
c
d
$ cat test2
f
f
b
c
d
$ cmp test1 test2
test1 test2 differ: byte 1, line 1
$ cmp -i 3 test1 test2

فرمان cmp در مقایسه‌ی اول، از اولین بایت شروع به مقایسه کرده و حاصل مقایسه را در خروجی نمایش داده است (اولین بایت از خط اول).

در دومین مقایسه، با اینکه ۲ بایت اول از هر فایل با یکدیگر کاملاً تفاوت دارند ولی چون مقایسه از بایت سوم شروع شده است، خروجی نخواهیم داشت مبنی بر اینکه این دو فایل از بایت دوم به بعد کاملاً یکسان بوده است.

نوع دیگر استفاده از این گزینه‌ی اختیاری به این صورت است که مقدار اولیه برای هر فایل را که بایدمقایسه  از آنجا  شروع شود، متفاوت در نظر بگیریم. فرض کنید می‌خواهیم مقایسه در فایل اول از بایت پنجم شروع شود و در فایل دوم از بایت دهم:

مثال:

$ cmp -i 5:10 test1 test2

l-: مانند گزینه‌ی اختیاری v-خیلی از دستورها عمل می‌کند، با این تفاوت که شماره بایت خروجی و تفاوت ارزش بایتی را نشان می‌هد.

مثال:

cmp -l test1 test2
3 141 142

n-: با این گزینه می‌توانیم یک محدوده بر اساس بایت برای مقایسه در نظر بگیریم.

مثال:

$ cat test1
abcdefghijklmnopqrstuvwxyz
$ cat test2
zyxwvutsrqponmlkjihgfedcba
$ cmp -l -n 10 test1 test2
 1 141 172
 2 142 171
 3 143 170
 4 144 167
 5 145 166
 6 146 165
 7 147 164
 8 150 163
 9 151 162
10 152 161

c-: در خروجی کاراکتری که متفاوت هست هم نمایش می‌دهد.

مثال:

$ cat test1
abcdefghijklmnopqrstuvwxyz
$ cat test2
zyxwvutsrqponmlkjihgfedcba
$ cmp -c test1 test2
test1 test2 differ: byte 1, line 1 is 141 a 172 z