এর সাধারণ উত্তরটি হ'ল আইসো ফাইলটি আনপ্যাক করা, এটিকে পরিবর্তন করুন এবং এটি আবার প্যাক করুন। দেখে মনে হচ্ছে "আইএসও মাস্টার" যেমন dv3500ea এর উত্তরে উল্লিখিত হয়েছে এটি করা ভাল ফ্রন্ট-এন্ড।
এমন:
- আপনার পক্ষে এর জন্য পর্যাপ্ত জায়গা নেই
- আপনি পুরো জিনিসটি পুনরায় লেখার পরিবর্তে কেবল একটি অস্ত্রোপচার পরিবর্তন করতে চান
- আপনি একটি স্টোরেজ ডিভাইসটি সংশোধন করতে চান যাতে পুরো ডিভাইসটি অনুলিপি না করে একটি আইসফস ফাইল সিস্টেম (ওরফে iso9660) রয়েছে, বা
- আপনি যদি মনে করেন যে এই আনপ্যাকিং / রিপ্যাকিং জিনিসটি কেবল যথেষ্ট যথেষ্ট নয়
তাহলে এই উত্তরটি আপনার জন্য!
সংক্ষেপে, আমরা isofs ফাইল সিস্টেমে একটি বিদ্যমান ফাইলকে আমাদের কাঙ্ক্ষিত ফাইলের সাথে প্রতিস্থাপন করব। আমাদের কাঙ্ক্ষিত ফাইলটি অবশ্যই বিদ্যমান (টার্গেট) ফাইলের চেয়ে ছোট হওয়া উচিত এবং হোয়াইট স্পেস (বা আবর্জনা) অনুসরণ করতে হবে। এটিতে কেবলমাত্র দুটি কমান্ডের প্রয়োজন, তবে সতর্ক থাকুন: একটি টাইপো লক্ষ্য ফাইল সিস্টেমটিকে পুরোপুরি ধ্বংস করতে পারে, বা উত্স ফাইলটি ওভাররাইটও করতে পারে। ব্যাকআপ আপনার বন্ধু!
আমার ক্ষেত্রে, আমি একটি লাইভ বুটে একটি স্ক্রিপ্ট সঞ্চয় করতে চেয়েছিলাম যাতে প্রতিবার এটি পুনরায় টাইপ করতে না হয়। স্ক্রিপ্টটি রয়েছে script.py
এবং আমার লক্ষ্য (একটি ইউএসবি স্টিক) রয়েছে /dev/sdc
। স্ক্রিপ্টটির আকার 202 বাইট, সুতরাং আমাদের প্রথম পদক্ষেপটি 202 বাইটের চেয়ে বড় ফাইল খুঁজে পাওয়া, যাতে আমরা এটি ওভাররাইট করতে পারি। এটি মাউন্ট করার পরে /mnt
, আমি একটি উপযুক্ত ফাইল খুঁজে পেয়েছি /mnt/info.txt
।
আমরা কেবল মাউন্টপয়েন্টে ওভাররাইট করতে পারি না info.txt
, এটি অভিযোগ করবে যে এটি কেবল পঠনযোগ্য ফাইল সিস্টেম। আমরা মূল, যদিও, এর আসল অর্থটি তাদের দেখানো যাক! info.txt
ফাইল সিস্টেমে কোথায় রয়েছে তা আমাদের খুঁজে বের করতে হবে । কিছু স্ট্রিং সন্ধান করুন (সম্ভবত) এর থেকে অনন্য info.txt
, উদাহরণস্বরূপ This is the official distribution CD of X.
, এবং এটি ডিস্কে অনুসন্ধান করুন:
$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]
অন্যথা, এই, grep, যা একটি অনেক দ্রুততর সঙ্গে সম্পন্ন করা যেতে পারে, কিন্তু তারপর আপনি কি আবার গোড়া থেকে এটা উল্লেখ করা প্রয়োজন: $ sudo grep -oba 'This is ...' /dev/sdc
।
এখন এটি আমরা কোথায় জানি, আমাদের কেবলমাত্র সেই ফাইলগুলি আমাদের ফাইলের সাথে প্রতিস্থাপন করতে হবে:
$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202
এই লাইন:
- ইনপুট ফাইল (
if
) থেকে আউটপুট ফাইল ( of
) এ বাইটস অনুলিপি করে এবং আউটপুট ফাইলটি আসলে একটি ডিভাইস বলে কোনও যত্ন নেই, কারণ "সবকিছুই একটি ফাইল"।
conv=notrunc
এটি আউটপুট ফাইলটি ছাঁটাই না করার জন্য বলে, কারণ আমরা কেবল কয়েকটি বাইট ওভাররাইট করতে চাই, একটি নির্দিষ্ট বিন্দু থেকে ফাইলটি ওভাররাইট করতে চাই না।
bs=1
ব্লকের আকার 1 এ সেট করে You আপনি সাধারণত 4k বা উচ্চতর ব্লকের আকার চান তবে এটি উভয়ই গণিত (ইনলাইন) করা এড়িয়ে যায় এবং আমাদের বাইটের সঠিক অবস্থানটি নির্দিষ্ট করতে দেয়।
seek=N
আউটপুট ফাইলে একটি নির্দিষ্ট পয়েন্ট সন্ধান করে (নোট যা seek=N
আলাদা হয় skip=N
কারণ skip
ইনপুট ফাইল থেকে বাইট এড়িয়ে যায়!)। আমরা অবশ্যই এটি সেট করেছি যেখানে লক্ষ্য পাঠ্য রয়েছে।
count=N
এই অনেকগুলি বাইট অনুলিপি করুন। আমি মনে করি এটি বাদ দেওয়া যেতে পারে কারণ এটি ইনপুট ফাইলটির সমাপ্তিটি লক্ষ্য করবে, তবে আমি এটি নিশ্চিত রেখেছি।
এবং ভয়েলা, ফাইলটি ওভাররাইট করা!
তবে অপেক্ষা করুন, টার্গেট ফাইলটি আমাদের স্ক্রিপ্টের চেয়ে বড় ছিল, সুতরাং ইউএসবি স্টিকের সাহায্যে ফাইলটি এখন এমন কিছু হয়: "যখন চলুন তবে (ব্লা; ব্লা;); ইয়ারাইট 2007 এক্স ইনক।" সেখানে পিছনে আবর্জনা রয়েছে। এটি ঠিক করার দুটি উপায়: আমাদের ইনপুট ফাইলটি দীর্ঘতর করুন (স্পেস যুক্ত করুন), বা শেষে একটি মন্তব্য প্রতীক যুক্ত করুন। নোট যে অনেক সম্পাদক শেষে একটি newline যুক্ত করুন যাতে আপনি সেট করতে চাইবেন count=
করার N-1
বাইট (যদি আপনার ফাইলটি বর্তমানে 203 বাইট, এবং আপনি যে গত বাইট একটি newline, 202 সেট গণনা হয় লক্ষ্য)। xxd script.py | tail
শেষ বাইটটি 0a
(বা, অদ্ভুত ক্ষেত্রে, 0d
) হয় কিনা তা পরীক্ষা করে আপনি নিউলাইনগুলির জন্য একটি ফাইল পরীক্ষা করতে পারেন ।
প্রক্রিয়া একটি জন্য অভিন্ন .iso
ফাইল শুধু মানসিকভাবে প্রতিস্থাপন /dev/sdc
সঙ্গে your.iso
।
নোট করুন যে আপনি যখন মাউন্টপয়েন্টে লক্ষ্যটি পরীক্ষা করেছেন এটি পরীক্ষা করে কিনা, আপনাকে সম্ভবত strings
আবার ব্যবহার করতে হবে (এই বারে আপনার স্ক্রিপ্টটি অনুসন্ধান করতে হবে) যেহেতু ফাইলটি সম্ভবত এখনও পড়া ক্যাশে রয়েছে।