TL; ড
নংটি >>
মূলত "সর্বদা ফাইলের সমাপ্তির চেষ্টা করা হয়" যখন >
সর্বশেষ লিখিত অবস্থানে একটি পয়েন্টার বজায় রাখে।
পুরো উত্তর
(দ্রষ্টব্য: আমার সমস্ত পরীক্ষাগুলি ডেবিয়ান জিএনইউ / লিনাক্স 9 এ সম্পন্ন হয়েছে)।
আর একটি পার্থক্য
না, তারা সমতুল্য নয়। আরও একটি পার্থক্য আছে। লক্ষ্য ফাইলটি আগে ছিল কিনা তা নির্বিশেষে এটি নিজেই প্রকাশ করতে পারে।
এটি পর্যবেক্ষণ করতে, এমন একটি প্রক্রিয়া চালান যা ডেটা উত্পন্ন করে এবং একটি ফাইলের সাথে >
বা >>
(যেমন pv -L 10k /dev/urandom > blob
) পুনঃনির্দেশ red এটি চালানো যাক এবং ফাইলের আকার পরিবর্তন করুন (উদাহরণস্বরূপ truncate
)। আপনি দেখতে পাবেন যে >
এটি >>
সর্বদা শেষ হওয়ার সাথে সাথে (বাড়তে থাকা) অফসেট রাখে ।
- আপনি যদি ফাইলটিকে একটি ছোট আকারে ছাঁটাই করেন (এটি শূন্য আকারের হতে পারে)
>
পাত্তা দেবে না, এটি তার পছন্দসই অফসেটে লিখবে যেন কিছুই হয়নি; অফসেটটি কেটে ফেলার পরে ফাইলের শেষের বাইরে চলে যাওয়ার পরে, ফাইলটি তার পুরানো আকারটি ফিরে পেতে এবং আরও বাড়বে, অনুপস্থিত ডেটা শূন্যে পূরণ করা হবে (যদি সম্ভব হয় তবে খুব কম);
>>
নতুন প্রান্তে যুক্ত হবে, ফাইলটি তার কাটা আকার থেকে বাড়বে।
- আপনি যদি ফাইলটি বড় করেন
>
পাত্তা দেবে না, এটি তার পছন্দসই অফসেটে লিখবে যেন কিছুই হয়নি; অফসেটটি ফাইলের অভ্যন্তরে কোথাও উপস্থিত আকার পরিবর্তন করার পরে, এটি কিছুক্ষণের জন্য ফাইলটি বাড়ানো বন্ধ করে দেবে, যতক্ষণ না অফসেটটি নতুন প্রান্তে পৌঁছায়, তারপরে ফাইলটি স্বাভাবিকভাবে বৃদ্ধি পাবে;
>>
নতুন প্রান্তে যুক্ত হবে, ফাইলটি তার প্রসারিত আকার থেকে বাড়বে।
আর একটি উদাহরণ হ'ল >>
ডেটা তৈরির প্রক্রিয়া চলমান থাকাকালীন এবং ফাইলটিতে লেখার সময় অতিরিক্ত কিছু সংযোজন (পৃথক সাথে )। এটি ফাইলটি বড় করার অনুরূপ।
- উত্পন্ন প্রক্রিয়াটি
>
তার পছন্দসই অফসেটে লিখবে এবং শেষ পর্যন্ত অতিরিক্ত ডেটা ওভাররাইট করবে।
- উত্পন্ন প্রক্রিয়াটি
>>
নতুন ডেটা এড়িয়ে যাবে এবং এটি অতীতে সংযোজন করবে (রেসের শর্ত দেখা দিতে পারে, দুটি স্ট্রিম আন্তঃবাহিত হতে পারে, এখনও কোনও তথ্য ওভাররাইট করা উচিত নয়)।
উদাহরণ
এটি বাস্তবে কোন ব্যাপার? নেই এই প্রশ্নের :
আমি একটি প্রক্রিয়া চালাচ্ছি যা স্টাডাউটে প্রচুর আউটপুট তৈরি করে। এটিকে একটি ফাইলে পাঠানো হচ্ছে [...] আমি কি কোনও ধরণের লগ রোটেশন প্রোগ্রাম ব্যবহার করতে পারি?
এই উত্তরটি বলে সমাধান logrotate
সঙ্গে copytruncate
বিকল্প যা এই মত কাজ করে:
পুরানো লগ ফাইলটি সরানো এবং allyচ্ছিকভাবে একটি নতুন তৈরি করার পরিবর্তে একটি অনুলিপি তৈরির পরে মূল লগ ফাইলটি ছাঁটাই করুন।
আমি উপরে যা লিখেছি তা অনুসারে, পুনর্নির্দেশের >
ফলে কাটা কাটা লগ কোনও দিনই বড় হয়ে যাবে। স্বল্পতা দিনটি বাঁচাবে, কোনও ডিস্কের উল্লেখযোগ্য স্থান নষ্ট করা উচিত নয়। তবুও প্রতিটি একটানা লগে এতে আরও বেশি করে নেতৃস্থানীয় শূন্য থাকবে যা সম্পূর্ণ অপ্রয়োজনীয়।
তবে যদি logrotate
স্বল্পতা সংরক্ষণ না করে অনুলিপিগুলি তৈরি করে, তবে প্রতিবার একটি অনুলিপি তৈরি করার সময় এই নেতৃস্থানীয় শূন্যগুলিকে আরও বেশি করে ডিস্ক স্পেসের প্রয়োজন হবে। আমি সরঞ্জামের আচরণটি তদন্ত করে দেখিনি, উড়ে উড়ে যাওয়া বা সংক্ষেপণের সাথে এটি যথেষ্ট স্মার্ট হতে পারে (যদি সংক্ষেপণ সক্ষম করা থাকে)। তবুও শূন্যগুলি কেবল সমস্যা সৃষ্টি করতে পারে বা সর্বোপরি নিরপেক্ষ হতে পারে; তাদের মধ্যে ভাল কিছুই।
এই ক্ষেত্রে >>
পরিবর্তে ব্যবহার >
করা উল্লেখযোগ্যভাবে আরও ভাল, এমনকি যদি লক্ষ্য ফাইলটি এখনও তৈরি হতে চলেছে।
কর্মক্ষমতা
যেমনটি আমরা দেখতে পাচ্ছি, দুটি অপারেটর কেবল শুরু করার পরে নয় পরে পরে পৃথকভাবেও কাজ করে। এর ফলে কিছু (সূক্ষ্ম?) পারফরম্যান্স পার্থক্য হতে পারে। আপাতত এটিকে সমর্থন বা প্রত্যাখ্যান করার মতো আমার কাছে কোনও অর্থবহ পরীক্ষার ফলাফল নেই তবে আমি মনে করি আপনি সাধারণভাবে তাদের পারফরম্যান্সটি একই রকম মনে করবেন না।
>>
সময় মূলত "সর্বদা ফাইলের সমাপ্তির চেষ্টা করা হয়">
। দেখে মনে হচ্ছে যে তারা যেভাবে কাজ করে তাতে কিছু সূক্ষ্ম পারফরম্যান্স পার্থক্য থাকতে পারে ...