কম্পিউটার টিউটোরিয়াল

Linux Diff কমান্ড 습득: ফাইল তুলনা, পরিবর্তন চিহ্নিতকরণ এবং প্যাচ তৈরি – ধাপে ধাপে গাইড

diff কমান্ডটি লিনাক্স শেল থেকে ফাইল বা ডিরেক্টরি তুলনার একটি সহজ উপায়। এই আর্টিকেলে এর ব্যবহার দেখানো হয়েছে কিছু সাধারণ উদাহরণসহ।

diff কমান্ডটি দুটি ফাইল বা ডিরেক্টরির লাইন-বাই-লাইন তুলনা করে এবং তাদের পার্থক্য আউটপুট করে।

আপনি কেন ফাইল বা ডিরেক্টরি তুলনা করতে চাবেন?

  • আপনার একই নামে দুটি ফাইল থাকতে পারে যা দেখতে এক जैসা মনে হয় এবং আপনি তাদের পার্থক্য দেখতে চান।
  • আপনার তৈরি করা একটি প্রজেক্টের প্রোগ্রামিং কোডের পরিবর্তন একটি নতুন এবং পুরানো ভার্সনের মধ্যে তুলনা করা।
  • আপনি অনেক ফাইল অন্য একটি ড্রাইভে কপি করেছেন এবং সবকিছু সফলভাবে এবং করাপশন ছাড়া কপি হয়েছে কিনা তা নিশ্চিত করতে চান।
  • আপনি এবং আপনার বন্ধু একই সেট ফাইল একটি ফোল্ডারে রাখেন। আপনি আপনার ফাইলগুলোতে পরিবর্তন আনলেন, কিন্তু সবগুলো আবার আপনার বন্ধুকে পাঠাতে চান না। আপনি diff ব্যবহার করে শুধু পরিবর্তনগুলো ধারণকারী একটি প্যাচ তৈরি করতে পারেন, সেটি তাদের পাঠাতে পারেন, এবং তারপরে পুরো কিছু পুনরায় ডাউনলোড না করেই তাদের কপি আপডেট করতে পারেন।

ফাইল তুলনার জন্য আপনার নিজস্ব কারণ থাকতে পারে, তাই চলুন diff এবং এর ব্যবহার 쪽으로।

diff সিনট্যাক্স

diff OPTIONS FILES

মনে রাখবেন:

  • OPTIONS অপশনাল এবং নিচের টেবিল থেকে প্রদান করা যেতে পারে
  • FILES হলো তুলনা করার জন্য দুটি ফাইলের পাথ, স্পেস দিয়ে আলাদা করা

diff অপশন

ইউজার ম্যানুয়াল থেকে সরাসরি diff কমান্ডের সবচেয়ে সাধারণভাবে ব্যবহৃত OPTIONS গুলো নিচে:

অপশন বর্ণনা
-q, –brief শুধু ফাইলগুলো ভিন্ন হলে রিপোর্ট করুন
-s, –report-identical-files দুটি ফাইল একই হলে রিপোর্ট করুন
-u, -U NUM, –unified[=NUM] NUM (ডিফল্ট ৩) লাইন ইউনিফাইড কন্টেক্সট আউটপুট করুন
-N –new-file অনুপস্থিত ফাইলকে খালি মনে করুন
-l, –paginate 'pr' এর মাধ্যমে আউটপুট পাস করে পেজিনেট করুন
-r, –recursive খুঁজে পাওয়া সাবডিরেক্টরিগুলো রিকার্সিভলি তুলনা করুন
–no-dereference সিমবলিক লিঙ্ক ফলো করবেন না
-a, –text সকল ফাইলকে টেক্সট হিসেবে বিবেচনা করুন
-d, –minimal ছোট পরিবর্তন সেট খুঁজে বের করার চেষ্টা করুন
–speed-large-files বড় ফাইল এবং ছড়ানো ছোট পরিবর্তন অনুমান করুন

আপনি এখানে ফুল ম্যানুয়াল দেখতে পারেন বা রান করুন:

man diff

…কমান্ড লাইন থেকে পূর্ণ অপশন সেট পেতে।

উদাহরণ

diff দিয়ে লিনাক্সে ফাইল তুলনা

এটি diff কমান্ডের সবচেয়ে সহজ ব্যবহার এবং কনসোলে দুটি সরবরাহকৃত ফাইলের পার্থক্য আউটপুট করবে:

diff file1.txt file2.txt

আউটপুট রিডাইরেক্ট করা

আপনি যদি প্যাচ তৈরি করার বদলে পার্থক্য দেখতে চান, আউটপুট একটি ফাইলে রিডাইরেক্ট করা ব্যবহারিক – যাতে টার্মিনাল অনেক পরিবর্তন থাকলে সেগুলো কাটিয়ে না ফেলে:

diff -q file1.txt file2.txt > differences.txt

এটি differences.txt তৈরি করবে (অথবা ওভাররাইট করবে!), যা দুটি ফাইলের পার্থক্য সারাংশ করবে।

-q অপশনটি যোগ করা হয়েছে যাতে শুধু পার্থক্যগুলো লিস্ট করা হয়; একই ফাইলগুলো উল্লেখ করা হবে না যাতে কী হচ্ছে সেটি সহজে বোঝা যায়।

diff দিয়ে ডিরেক্টরি তুলনা

ডিরেক্টরিও -r (রিকার্সিভ) অপশন ব্যবহার করে তাদের কন্টেন্ট তুলনা করা যায়:

diff -r -q /path/to/dir1 /path/to/dir2

এখানেও আমি -q অপশন ব্যবহার করেছি যাতে শুধু পার্থক্যগুলো লিস্ট করা হয়।

বড় ফাইল বা বড় ফাইল ধারণকারী ডিরেক্টরি তুলনা

diff একটি ইনটেনসিভ প্রসেস – তুলনা করা প্রতিটি ফাইল পড়া এবং তুলনা করা দরকার। এতে কিছুটা সময় লাগতে পারে।

–speed-large-files অপশনটি diff-এর অ্যালগরিদম পরিবর্তন করে বড় ফাইল তুলনা করার সময় আরও দক্ষ করে তোলে – কিছুটা গতিবর্ধন করে।

একটি ফাইলের জন্য প্যাচ তৈরি করা

একটি প্যাচ তৈরি করতে – দুটি ফাইলের পার্থক্যের একটি তালিকা যা প্রথম ফাইলের অন্য একটি কপিতে প্রয়োগ করা যাবে যাতে সেটি দ্বিতীয় ফাইলের সাথে একই হয়, নিচের কমান্ড ব্যবহার করা যেতে পারে:

diff -u file1.txt file2.txt > update.patch

-u অপশনটি পার্থক্যগুলো ইউনিফাইড ফরম্যাটে আউটপুট করে যা patch কমান্ড দ্বারা মূল ফাইল আপডেট করতে ব্যবহার করা যায়।

এটি উপযোগী যদি আপনার কোনো বন্ধু বা সহকর্মী আপনার কিছু ডেটা বা প্রোগ্রামিং কোড ব্যবহার করে, এবং আপনি আপনার করা আপডেটগুলো পুরো ডেটাসেট বা অ্যাপ্লিকেশন আবার পাঠানো ছাড়াই তাদের পাঠাতে চান।

একটি ফাইলের জন্য প্যাচ ইনস্টল করা

যখন আপনার বন্ধু প্যাচটি পাবে, তিনি নিচের patch কমান্ড দিয়ে প্রয়োগ করতে পারেন:

patch original.txt < update.patch

একটি ফাইলের জন্য প্যাচ анডু করা

আপনি যদি ভুল করেন, -R অপশন দিয়ে রিভার্সে প্যাচ রান করে আনডু করতে পারেন:

patch -R original.txt < update.patch

একটি ডিরেক্টরির জন্য প্যাচ তৈরি করা

নিচের কমান্ডটি -r (রিকার্সিভ), -u (ইউনিফাইড ফরম্যাট), এবং -N (অনুপস্থিত ফাইলকে খালি মনে করা) অপশন রান করে একটি পুরো ডিরেক্টরির জন্য প্যাচ তৈরি করবে:

diff -ruN originalDir updatedDir > update.patch

একটি ডিরেক্টরির জন্য প্যাচ ইনস্টল করা

একটি প্যাচ ডিরেক্টরিতে -p0 অপশন দিয়ে প্রয়োগ করা যায়, যা প্যাচটি সে ডিরেক্টরি স্ট্রাকচারে প্রয়োগ করবে যেটি তৈরি হওয়ার সময় ছিল:

patch -p0 < update.patch

একটি ডিরেক্টরির জন্য প্যাচ анডু করা

শেষে, একটি ডিরেক্টরির প্যাচিং উল্টা করা/রিভার্স করা:

patch -R -p0 originalFile < patchFile
  1. লিনাক্সে mv কমান্ড ব্যবহার করে ফাইল মুভ করার পদ্ধতি

  2. লিনাক্সে ISO ফাইল এক্সট্র্যাক্ট (Extract) করার পদ্ধতি

  3. Linux Watch কমান্ড 습득: সিনট্যাক্স, অপশন এবং প্রয়োগিক উদাহরণ

  4. Windows 10-এ হিডেন ফাইল ও ফোল্ডার দেখানোর ধাপে ধাপ গাইড