কীভাবে কোনও লগ প্রোগ্রাম মুছে ফেলা ফাইলটিতে লগ করা চালিয়ে যেতে পারে?


12

থেকে ইউনিক্স শক্তি সরঞ্জাম, 3 য় সংস্করণের : এর পরিবর্তে একটি ফাইল সরানোর, এটা খালি অধ্যায়:

যদি কোনও সক্রিয় প্রক্রিয়াতে ফাইলটি খোলা থাকে (লগ ফাইলগুলির জন্য অস্বাভাবিক নয়), ফাইলটি সরিয়ে এবং নতুন তৈরি করা লগিং প্রোগ্রামকে প্রভাবিত করবে না; এই বার্তাগুলি কেবল সেই ফাইলটিতে যেতে থাকবে যা আর লিঙ্কযুক্ত নয় । ফাইল খালি করা অ্যাসোসিয়েশন ভেঙে না এবং তাই এটি লগিং প্রোগ্রামকে প্রভাবিত না করে ফাইল সাফ করে।

( জোর আমার )

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

উত্তর:


11

আপনি যখন কোনও ফাইল মুছবেন তখন আপনি সত্যই ফাইলটির একটি লিঙ্ক সরিয়ে ফেলবেন (ইনোডে)। যদি কারও কাছে ইতিমধ্যে সেই ফাইলটি খোলা থাকে তবে তারা তাদের কাছে থাকা ফাইলের বিবরণী রাখতে পারে। ফাইলটি ডিস্কে থেকে যায়, স্থান গ্রহণ করে, এবং এতে অ্যাক্সেস থাকলে আপনার কাছে এটি লেখা এবং পড়া যায়।

unlinkফাংশন POSIX এই আচরণ সঙ্গে সংজ্ঞায়িত করা হয়:

যখন ফাইলটির লিঙ্ক গণনা 0 হয়ে যায় এবং কোনও প্রক্রিয়াতে ফাইলটি খোলা থাকে না, তখন ফাইল দ্বারা দখল করা স্থানটি মুক্ত করা হবে এবং ফাইলটি আর অ্যাক্সেসযোগ্য হবে না। শেষ লিঙ্কটি সরানোর সময় যদি এক বা একাধিক প্রক্রিয়াতে ফাইলটি খোলা থাকে, লিঙ্কটি আনলিংক () ফেরতের আগে মুছে ফেলা হবে তবে ফাইলের সমস্ত উল্লেখ বন্ধ না হওয়া পর্যন্ত ফাইলের বিষয়বস্তু অপসারণ স্থগিত করা হবে

এই আচরণের কারণে এই টুকরো পরামর্শ। ডিমনটির ফাইলটি খোলা থাকবে এবং এটি লক্ষ্য করা যাবে না যে এটি মুছে ফেলা হয়েছে (যদি না এটি এটি সুনির্দিষ্টভাবে পর্যবেক্ষণ না করে, যা অস্বাভাবিক)। এটি বিদ্যমান ফাইল বর্ণনাকারীর কাছে নির্দ্বিধায় লিখতে থাকবে: আপনি ডিস্কে আরও (বেশি) স্থান অবিরত রাখবেন, তবে আপনি যে বার্তাটি লিখেছেন তা কোনওটি দেখতে সক্ষম হবেন না, তাই আপনি সত্যিই সবচেয়ে খারাপ অবস্থায় আছেন উভয় বিশ্বের। যদি আপনি এর পরিবর্তে ফাইলটি শূন্য দৈর্ঘ্যে ছাঁটাই করেন তবে স্থানটি তাত্ক্ষণিকভাবে খালি করা হবে এবং যে কোনও নতুন বার্তা ফাইলের নতুন প্রান্তে যুক্ত করা হবে যেখানে আপনি সেগুলি দেখতে পাবেন।

পরিণামে, যখন ডিমন closeফাইলটি বন্ধ করে দেয় বা স্থান দেয়, স্থানটি খালি করা হবে। নতুন কেউ মধ্য সময়ে ফাইলটি খুলতে পারে না ( লিনাক্সের/proc/x/fd/... মতো সিস্টেম-নির্দিষ্ট প্রতিচ্ছবি ইন্টারফেসের বাইরে )। এটি গ্যারান্টিযুক্ত যে:

যদি ফাইলটির লিঙ্ক গণনা 0 হয়, যখন ফাইলের সাথে যুক্ত সমস্ত ফাইল বর্ণনাকারী বন্ধ হয়ে যায়, তখন ফাইল দ্বারা অধিগ্রহণ করা স্থানটি মুক্ত হয়ে যাবে এবং ফাইলটি আর অ্যাক্সেসযোগ্য হবে না।

সুতরাং আপনি স্থায়ীভাবে আপনার ডিস্কের স্থানটি হারাবেন না, তবে আপনি ফাইলটি মুছে ফেলাতে কোনও কিছুই অর্জন করতে পারবেন না এবং আপনি নতুন বার্তাগুলির অ্যাক্সেস হারাবেন।


1
যদি কোনও ব্যবহারকারী (লিঙ্কটি এখানে বলতে পারি) লিঙ্কমুক্ত করার চেষ্টা করে তবে কী হবে /proc/x/fd/y? প্রক্রিয়া ফাইল বিবরণকারী লিখতে ব্যর্থ হতে পারে, বা এটি একটি অবৈধ অপারেশন?
ন্যানোফারাড

@ হেক্সাফ্রাকশন হ'ল /proc/*/fd/*আসল ফাইলগুলির প্রতীক (লিঙ্ক) , সুতরাং এগুলি সরানো ফাইল মুছবে না। আমি আপনাকে পরীক্ষার পরামর্শ দিচ্ছি :) (অবশ্যই উত্পাদন ব্যবস্থায় নয়!)
রুসলান

1
@ মিশেলহোমার সম্ভবত আপনি নিজের উত্তরে পরিষ্কার করে দিতে পারেন যে একবার ফাইল লিঙ্কযুক্ত হয়ে গেলে, কোনও ফাইল বর্ণনাকারী দ্বারা নির্দেশিত প্রক্রিয়াটি আবার একই লিঙ্কে লিঙ্ক করতে পারে বা একই পথে নয়। এটি কখনও কখনও দরকারী হতে পারে।
দীর্ঘ

@ হেক্সাফ্রাকশন ওয়েল, এগুলি প্রক্রিয়া অবস্থা এবং অবজেক্টগুলির কেবল উপস্থাপনা (ফাইল সিস্টেমে স্পেসে)। আপনি যদি ফাইল সিস্টেমের স্পেসে এই উপস্থাপনাগুলি সরিয়ে থাকেন তবে প্রকৃত প্রক্রিয়াতে কিছুই ঘটতে হবে না - যদি না এটি (বা অন্য কোনও প্রক্রিয়া) সেই প্রতিনিধিত্বের উপর নির্ভর করে। নিশ্চিত না যে আপনি যাহাই হউক না কেন এই পদ্ধতিতে rmভিতরে না জানিয়ে /procবা অভ্যন্তরীণভাবে ব্যবহার করতে পারবেন /sys
ডেভিড টনহোফার

@ লার্জার্জ এটি কীভাবে সম্পন্ন হয়?
মাইকেল 18

8

যথাযথভাবে।

ফাইলগুলি ত্রি-পার্টাইটাইট।

  • বিষয়বস্তু, এটি হ'ল বাইটের সমতল অ্যারে, কোনও ডিস্কে কোথাও রচনা করা হয়েছে বা ফ্লাইটে তৈরি করা হয়েছে।
  • সূচক নোড বা inode সংক্ষেপে, যা একটি ডাটা স্ট্রাকচার জনবহুল ও কার্নেল ব্যবহার করে থাকেন। এটিতে ফাইল সম্পর্কে সমস্ত মেটাডেটা (আকার, অনুমতি ইত্যাদি) রয়েছে এবং এটি ফাইলের সামগ্রীর অবস্থানের দিকেও নির্দেশ করে।
  • এক বা একাধিক ডিরেক্টরি এন্ট্রি , যা অবস্থান রয়েছে, যেমন কাজে ব্যবহৃত পাথ মত /home/user/personal_file, যা হ্যান্ডলগুলি, যার মাধ্যমে ফাইল ব্যবহার করতে পারেন, এর বিষয়বস্তু পরিবর্তন হিসাবে কাজ, তার মেটাডাটা ইত্যাদি পরিবর্তন

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

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


4

অন্যান্য 2 টি উত্তর ঘটনাকে ঠিকভাবে ব্যাখ্যা - একটি ফাইল নয় পাবেন না "মুছে যাওয়া" পর্যন্ত এটি সব ডিরেক্টরির লিঙ্ক এবং এটি সব খোলা ফাইল বর্ণনাকারী চলে গেছে।

এটি এড়াতে এটি ব্যবহার করা ভাল অভ্যাস

> /var/log/bigfile

পরিবর্তে

rm -f /var/log/bigfile

যেহেতু এটি কেবল মুছে ফেলার পরিবর্তে সামগ্রীটি 0 বাইটে পুনরায় সেট করে এবং আপনি এটিতে কী লেখা আছে তা এখনও দেখতে পারেন।

আপনি যদি ফাইলটি মুছে ফেলে থাকেন এবং লিনাক্সে থাকেন যেখানে আপনার / proc / fd ফাইল সিস্টেম রয়েছে, আপনি এখনও ব্যবহার করতে পারেন can

> /proc/12345/fd/3

ফাইলটির বিষয়বস্তু শূন্য করতে (ধরে নেওয়া 12345 আপনার প্রক্রিয়া আইডি এবং 3 বড় ফাইলের এফডি সংখ্যা)। আপনার ডিস্কটি পুরোপুরি চলমান থাকলে এবং কোনও কারণে আপনার লগ ফাইলটি লিখতে থাকা প্রক্রিয়াটি আপনি মারতে পারবেন না যদি এটি জীবন রক্ষাকারী হতে পারে।


> /var/log/bigfileফাইলটিতে বিদ্যমান ডেটা সরিয়ে দেয় তবে প্রোগ্রামগুলি সেখানে লেখা থেকে থামায় না। খুব কম পরিস্থিতি রয়েছে যেখানে এটি সঠিক জিনিস। আমি বলি এটি badোকা একটি খারাপ অভ্যাস। আপনি যদি কোনও ফাইল মুছতে চান তবে ব্যবহার করুন rm। আপনি যদি সেখানে লেখা প্রোগ্রামগুলি বন্ধ করতে চান, তাদের হত্যা করুন বা অন্যথায় মুছে ফেলার আগে বা পরে তাদের লেখা বন্ধ করে দিন।
গিলস 21:58-

1
@ গাইলস, এই বিষয়টি এই বিষয়টির সাথে সম্পর্কিত যে কোনও প্রোগ্রামটিতে এখনও ফাইলটি খোলা থাকলে মুছে ফেলা সাহায্য করবে না। যদি আপনার ডিস্ক কারণ কিছু প্রোগ্রাম খারাপ এবং পূর্ণ syslogdভর্তি /var/log/messages, > /var/log/messagesহত্যা চেয়ে অনেক ভালো বিকল্প syslogd। অবশ্যই, সমস্যাটি প্রথমে কী তা বিশ্লেষণ করা থেকে আপনাকে বিরত রাখা উচিত নয়।
গুট্রাম ব্লহম মনিকা 24
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.