লিনাক্স সিস্টেমে ওপেন ফাইলগুলি কীভাবে আচরণ করে?


17

আমি সবেমাত্র একটি লগ ফাইলের নাম "foo.log.old" রেখেছি এবং ধরে নিয়েছি যে অ্যাপ্লিকেশনটি "foo.log" এ একটি নতুন লগফাইলে লেখা শুরু করবে। আমি অবাক হয়ে আবিষ্কার করেছিলাম যে এটি লগফিলটিকে তার নতুন নামে ট্র্যাক করেছে এবং "foo.log.old" এ লাইন যুক্ত করে রেখেছে।

উইন্ডোজে, আমি এই ধরণের আচরণের সাথে পরিচিত নই - এটি প্রয়োগ করা এমনকি সম্ভব কিনা তা আমি জানি না। এই আচরণটি লিনাক্সে ঠিক কীভাবে প্রয়োগ করা হয়? আমি এ সম্পর্কে আরও কোথায় জানতে পারি?


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

উত্তর:


20

প্রোগ্রামগুলি ফাইল সিস্টেমের দ্বারা পরিচালিত একটি সংখ্যার মাধ্যমে ফাইলগুলিতে সংযুক্ত হয় (traditionalতিহ্যবাহী ইউনিক্স ফাইল সিস্টেমে একটি ইনোড নামে পরিচিত), যার নামটি কেবল একটি রেফারেন্স (এবং সম্ভবত এটিতে কোনও অনন্য রেফারেন্স নয়)।

তাই সচেতন হওয়ার জন্য কয়েকটি বিষয়:

  1. ফাইলটি ব্যবহার mvকরে মুভিং করা সেই আন্ডারলিং নম্বরটিকে পরিবর্তন করে না যতক্ষণ না আপনি এটিকে ফাইল সিস্টেমে সরিয়ে নিয়ে যান (যা মূলটি ব্যবহারের cpপরে সমান rm)।
  2. যেহেতু একাধিক নাম একটি একক ফাইলে সংযুক্ত হতে পারে (যেমন আমাদের হার্ড লিঙ্ক রয়েছে), "মুছে ফেলা" ফাইলগুলিতে থাকা ডেটা আন্ডারলিং ফাইলের সমস্ত উল্লেখ না যাওয়া পর্যন্ত চলে না।
  3. সম্ভবত সর্বাধিক গুরুত্বপূর্ণ: যখন কোনও প্রোগ্রাম openসা ফাইল এটির সাথে একটি রেফারেন্স দেয় যা (কখন ডেটা মুছে ফেলা হবে সেই উদ্দেশ্যে) এর সাথে ফাইলের নাম সংযুক্ত থাকার সমতুল্য।

এটি বেশ কয়েকটি আচরণের জন্ম দেয় যেমন:

  • একটি প্রোগ্রাম openপড়ার জন্য একটি ফাইল করতে পারে , তবে rmএটি কমান্ড লাইনে সম্পাদনা করার পরে অবধি এটি পড়তে পারে না এবং প্রোগ্রামটিতে এখনও ডেটাতে অ্যাক্সেস থাকবে
  • আপনি mvযেটির মুখোমুখি হয়েছিলেন : একটি ফাইল আইং ফাইলটি খোলা আছে এমন কোনও প্রোগ্রাম এবং যে কোনও প্রোগ্রামের মধ্যে সংযোগ বিচ্ছিন্ন করে না (যদি আপনি ফাইল সিস্টেমের সীমানা অতিক্রম না করেন, তবে প্রোগ্রামটিতে এখনও কাজ করার জন্য মূল সংস্করণ নেই)।
  • যদি কোনও প্রোগ্রাম openলেখার জন্য কোনও ফাইল সম্পাদনা করে এবং ব্যবহারকারীর rmকমান্ড লাইনে এটির শেষ ফাইল নাম থাকে তবে প্রোগ্রামটি ফাইলের মধ্যে স্টাফ রাখার বিষয়টি ঠিক রাখতে পারে, তবে এটি বন্ধ হয়ে যাওয়ার সাথে সাথে সেই ডেটা এবং কোনও তথ্য নেই reference এটা চলে যাবে।
  • দুটি প্রোগ্রাম যা এক বা একাধিক ফাইলের মাধ্যমে যোগাযোগ করে তারা ফাইল শেষ openকরার পরে ফাইলগুলি অপসারণ করে একটি অশোধিত, আংশিক সুরক্ষা পেতে পারে । (এটি প্রকৃত সুরক্ষার মন নয়, এটি কেবল একটি ফাঁক গর্তটিকে একটি বর্ণের শর্তে রূপান্তরিত করে))

1
আমি @ ডিএমকেকের সাথে একমত, আমি কেবল এটি নোট করতে চেয়েছিলাম: একটি প্রোগ্রাম openপড়তে এবং লেখার জন্য একটি ফাইল করতে পারে (প্রশ্নটিতে লগ ফাইলের সাথে যা ঘটেছিল)।
jsbillings

@ জেএসবিলিংস: হ্যাঁ, তবে একটি ঝুঁকি রয়েছে। যদি সমস্ত ফাইল সিস্টেমের নাম চলে যায় তবে আপনি একটি খোলা ফাইলে জিবি লিখতে পারেন যা আপনি এটি বন্ধ করার সাথে সাথে সকালের শিশিরের মতো বাষ্প হয়ে উঠবে।
dmckee

1
এছাড়াও, ইনোডটি কার্নেলের মধ্যে অনুলিপি করা হয় এবং এটি অপারেশন করা হয়, ডিস্ক অনুলিপি নয়। সুতরাং ফাইলটি এমভি'ডি বা সিপি 'হতে পারে, তবে একটি ওপেন ফাইল ইতিমধ্যে কার্নাল ডেটা স্টাচচারের সাথে কাজ করছে, ডিস্ক সংস্করণ নয়। সুতরাং আপনি যদি লেখার জন্য উন্মুক্ত ফাইলটিতে অন্য কোনও ফাইল অনুলিপি করেন তবে প্রক্রিয়াটি এখনও পুরানো ফাইলের মতো একই আপেক্ষিক অবস্থানে লিখবে। এই কারণেই প্রোগ্রামগুলিতে, অ্যাপাচি httpd এর মতো সিগন্যাল হ্যান্ডলার রয়েছে যা লগ ফাইলগুলি বন্ধ করে এবং পুনরায় খোলে।
আর্জেজ

0

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

যতদূর উইন্ডোজে এটি কার্যকর করা, এটি অন্য সাইটের জন্য একটি প্রশ্ন।

বইগুলিকে আঘাত না করে এ সম্পর্কে আরও পড়ার জন্য লিনাক্স ফাইল সিস্টেম এবং ইনোডগুলি সন্ধান করুন। এর কোনও সুস্পষ্ট উত্তর নাও থাকতে পারে তবে আপনি কেন তা বুঝতে সক্ষম হবেন।


4
"আশেপাশে অনুসন্ধান করুন - আপনি সম্ভবত একটি ভাল উত্তর খুঁজে পাবেন না তবে এটি বুঝতে পারবেন" একটি ভাল উত্তর নয়।
mattdm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.