উত্তরটি "সম্ভবত হ্যাঁ, তবে এটি ফাইল সিস্টেমের ধরণ এবং সময় নির্ভর করে।"
এই তিনটি উদাহরণের মধ্যে কোনওই সুযোগ ছাড়াই পুরানো_ফায়াল বা বিদ্যমান_ফিলের দৈহিক ডেটা ব্লকগুলিকে ওভাররাইট করবে না।
mv new_file old_file
। এটি পুরানো_ ফাইলটিকে লিঙ্কমুক্ত করবে। ওল্ড ফাইলে অতিরিক্ত হার্ড লিঙ্কগুলি থাকলে, অবশিষ্টগুলি লিঙ্কগুলিতে ব্লকগুলি অপরিবর্তিত থাকবে। অন্যথায়, ব্লকগুলি সাধারণত (এটি ফাইল সিস্টেমের ধরণের উপর নির্ভর করে) একটি ফ্রি তালিকায় স্থাপন করা হয়। তারপরে, যদি mv
প্রয়োজনগুলির অনুলিপি (কেবল চলমান ডিরেক্টরি প্রবেশের বিপরীতে) প্রয়োজন হয় তবে নতুন ব্লকগুলি mv
লেখার জন্য বরাদ্দ করা হবে ।
এই সদ্য বরাদ্দকৃত ব্লকগুলি কেবলমাত্র মুক্তি পেয়েছিল এমনগুলি হতে পারে বা নাও হতে পারে । ইউএফএসের মতো ফাইল সিস্টেমে ব্লকগুলি বরাদ্দ করা হয়, যদি সম্ভব হয়, একই সিলিন্ডার গোষ্ঠী থেকে ফাইলটি ডিরেক্টরিটি তৈরি করা হয়েছিল So এবং ওভাররাইট) একই ব্লক যা কেবল মুক্তি পেয়েছিল এই কারণেই যে ব্যক্তিরা দুর্ঘটনাক্রমে একটি ফাইল সরিয়ে দেয় তাদের আদর্শ পরামর্শটি হ'ল যতক্ষণ না কেউ ফাইল পুনরুদ্ধারের চেষ্টা করতে না পারে ততক্ষণ তাদের ডিরেক্টরি ট্রিটিতে (এবং সম্ভবত পুরো ফাইল সিস্টেমে নয়) ফাইলগুলিতে কোনও নতুন ডেটা না লিখে।
cp new_file old_file
নিম্নলিখিতগুলি করবে (আপনি strace
সিস্টেম কলগুলি দেখতে ব্যবহার করতে পারেন):
খোলা ("পুরাতন_ফায়াল", O_WRONLY | O_TRUNC) = 4
ওটিআরআনসি পতাকাটি mv
উপরের মতো সমস্ত ডেটা ব্লককে মুক্ত করে দেবে । এবং উপরের মতো, এগুলি সাধারণত একটি ফ্রি তালিকায় যুক্ত করা হবে এবং cp
কমান্ড দ্বারা পরবর্তী লেখাগুলি পুনরায় ব্যবহার করতে বা নাও পেতে পারে ।
vi existing_file
। যদি vi
আসলে হয় vim
, :x
কমান্ডটি নিম্নলিখিতটি করে:
আনলিংক ("বিদ্যমান_ফিল ~") = -1 উত্স (এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই)
পুনঃনামকরণ ("বিদ্যমান_ফाइल", "বিদ্যমান_ফিল ~") = 0
খোলা ("বিদ্যমান_ফায়াল", ও_আপনি | ও_ক্রিট | ও_আরআনসি, 0664) = 3
সুতরাং এটি এমনকি পুরানো ডেটা অপসারণ করে না; ডেটা ব্যাকআপ ফাইলে সংরক্ষণ করা হয়।
FreeBSD 'র উপর, vi
না open("existing_file",O_WRONLY|O_CREAT|O_TRUNC, 0664)
, যা হিসাবে একই শব্দার্থবিদ্যা থাকবে cp
, উপরোক্ত।
আপনি বিশেষ প্রোগ্রাম ছাড়াই কিছু বা সমস্ত ডেটা পুনরুদ্ধার করতে পারেন; আপনার যা দরকার তা হ'ল grep
এবং dd
কাঁচা ডিভাইসে অ্যাক্সেস।
ছোট পাঠ্য ফাইলের জন্য, আপনি যে প্রশ্নটির সাথে লিঙ্ক করেছেন সেই প্রশ্নের উত্তর @ স্টিভেন ডি থেকে দেওয়া একক grep
কমান্ড হ'ল সহজতম উপায়:
grep -i -a -B100 -A100 'text in the deleted file' /dev/sda1
তবে বৃহত্তর ফাইলগুলির জন্য যা একাধিক অ-সংহত ব্লকের মধ্যে থাকতে পারে, আমি এটি করি:
grep -a -b "text in the deleted file" /dev/sda1
13813610612:this is some text in the deleted file
যা আপনাকে ম্যাচিং লাইনের বাইটগুলিতে অফসেট দেবে। dd
শুরু করে কমান্ডের একটি সিরিজ দিয়ে এটি অনুসরণ করুন
dd if=/dev/sda1 count=1 skip=$(expr 13813610612 / 512)
আপনি এই ব্লকের আগে এবং পরে কিছু ব্লক পড়তে চাইবেন। ইউএফএসে, ফাইল ব্লকগুলি সাধারণত 8KB হয় এবং সাধারণত মোটামুটি স্বচ্ছলভাবে বরাদ্দ করা হয়, একটি ফাইলের ব্লকগুলি অন্য ফাইল বা মুক্ত স্থান থেকে 8 কেবি ব্লকের সাথে পর্যায়ক্রমে ইন্টারলিভ করা হচ্ছে। ইউএফএসে একটি ফাইলের লেজটি 7 1KB অবধি টুকরো টুকরো টুকরো, যা সামঞ্জস্যপূর্ণ বা নাও হতে পারে।
অবশ্যই, ফাইল সিস্টেমগুলিতে যা ডেটা সংকুচিত করে বা এনক্রিপ্ট করে, পুনরুদ্ধার এটি সম্ভবত সোজা নাও হতে পারে।
ইউনিক্সে আসলে খুব কম ইউটিলিটি রয়েছে যা কোনও বিদ্যমান ফাইলের ডেটা ব্লকগুলিকে ওভাররাইট করে। এক যে মনে আসে dd conv=notrunc
। আরেকটি হ'ল shred
।