যতক্ষণ আপনি ফাইল-সিস্টেমের সীমানা জুড়ে ফাইলটি সরান না ততক্ষণ অপারেশনটি নিরাপদ থাকা উচিত should এটি আসলে "চলমান" কীভাবে করা হয় তার প্রক্রিয়াটির কারণে।
আপনি যদি mv
একই ফাইল-সিস্টেমে ফাইল করেন তবে ফাইলটি আসলে ছোঁয়া যায় না, তবে কেবল ফাইল-সিস্টেমের এন্ট্রি পরিবর্তন করা হয়।
$ mv foo bar
আসলে কিছু একটা করে
$ ln foo bar
$ rm foo
এই তৈরি করবে হার্ড ফাইল (আসলে inode ফাইল-সিস্টেম এন্ট্রি দ্বারা নির্দিষ্ট) জন্য লিঙ্ক (একটি দ্বিতীয় ডিরেক্টরির এন্ট্রি) foo
নামে bar
এবং অপসারণ foo
এন্ট্রি। এখন থেকে অপসারণ করার সময় foo
, একটি দ্বিতীয় ফাইল-সিস্টেম এন্ট্রি রয়েছে যা foo
ইনোডের দিকে নির্দেশ করছে , পুরানো এন্ট্রি সরানো foo
আসলে ইনোডের সাথে সম্পর্কিত কোনও ব্লক সরিয়ে দেয় না।
আপনার প্রোগ্রামটি ফাইল-হ্যান্ডেলটি ফাইল-ইনডিতে নয়, যেহেতু এটির খোলা ফাইল-হ্যান্ডেলটি ফাইলের ইনোডের দিকে ইঙ্গিত করে, আনন্দের সাথে ফাইলটিতে যুক্ত হবে।
দ্রষ্টব্য: যদি আপনার প্রোগ্রামটি লেখার মধ্যে ফাইলটি বন্ধ করে এবং পুনরায় খোলে, আপনি পুরানো ফাইল-সিস্টেম এন্ট্রি দিয়ে একটি নতুন ফাইল তৈরি করে শেষ করবেন !
ক্রস ফাইল-সিস্টেমের চালনা:
আপনি যদি ফাইল-সিস্টেমের সীমানা জুড়ে ফাইলটি সরিয়ে থাকেন তবে জিনিসগুলি কুৎসিত হয়। এক্ষেত্রে আপনি নিজের ফাইলটিকে সামঞ্জস্য রেখে গ্যারান্টি দিতে পারবেন না, যেহেতু mv
আসলে
- লক্ষ্য ফাইল-সিস্টেমে একটি নতুন ফাইল তৈরি করুন
- পুরানো ফাইলের সামগ্রীগুলি নতুন ফাইলে অনুলিপি করুন
- পুরানো ফাইল সরান
অথবা
$ cp /path/to/foo /path/to/bar
$ rm /path/to/foo
রেস্প।
$ touch /path/to/bar
$ cat < /path/to/foo > /path/to/bar
$ rm /path/to/foo
অনুলিপিটি আপনার অ্যাপ্লিকেশনটি লেখার সময় ফাইলটির শেষের দিকে পৌঁছেছে কিনা তার উপর নির্ভর করে, এটি ঘটতে পারে যে নতুন ফাইলটিতে আপনার কেবলমাত্র অর্ধেক লাইন রয়েছে have
অতিরিক্তভাবে, যদি আপনার অ্যাপ্লিকেশনটি পুরানো ফাইলটি বন্ধ না করে এবং পুনরায় খোলা না থাকে, তবে এটি পুরানো ফাইলটিতে লেখাটি চালিয়ে যেতে থাকবে, এমনকি এটি মুছে ফেলা বলে মনে হচ্ছে: কার্নেল জানে যে কোন ফাইলগুলি খোলা রয়েছে এবং যদিও এটি ফাইল-সিস্টেমের এন্ট্রি মুছে ফেলবে, এটি আপনার অ্যাপ্লিকেশনটির খোলা ফাইল-হ্যান্ডেল বন্ধ না করা পর্যন্ত পুরানো ফাইলের ইনোড এবং সম্পর্কিত ব্লকগুলি মুছবে না।
rename()
সিস্টেম কল ছিল না। সুতরাং আসল সংস্করণটিmv
আসলেlink()
হার্ড লিঙ্কটি তৈরি করার জন্য কল করেছিল, তারপরেunlink()
মূল নামটি সরিয়ে ফেলবে।rename()
এটিকে কার্নেলের মধ্যে পরমাণুভাবে প্রয়োগ করতে ফ্রিবিএসডি-তে যুক্ত করা হয়েছিল।