কখন 0 ls -s` "0" মুদ্রণ করে


13

অবশ্যই কোনও ফাইল খালি থাকলে পরীক্ষার মানক উপায়টি রয়েছে test -s FILEতবে আমাদের ক্লায়েন্টদের মধ্যে একটি স্ক্রিপ্ট পেয়েছে যাতে পরীক্ষাগুলি রয়েছে:

RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
    echo "Badness: Log not empty"
    exit 25
fi

সরবরাহকারীর দাবির সাথে যে এটি দুটি পরিবেশে এটি কাজ করেছে যা এটি পরীক্ষা করেছে say এটি বলাই বাহুল্য যে এটি দুটি পরীক্ষায় আমি এটি পরীক্ষা করেছিলে এটি খারাপভাবে ব্যর্থ হয়েছিল।

সুতরাং, আমি কৌতূহল পেয়েছিলাম। খালি ফাইলগুলির জন্য কখন ls -sমুদ্রণ 0করা হয়?

এটি এখন পর্যন্ত আমার অনুসন্ধান:

  • জিএনএফএস লিনাক্স: 4
  • লিনাক্স এ ext4: 0
  • সোলারিসে জেডএফএস: 1
  • সোলারিসে ইউএফএস: 0
  • জিএফএস এআইএক্স: 0
  • এইচপি-ইউএক্স-এ ভিএক্সএফএস: 0
  • এইচপি-ইউএক্স-এ এইচএফএস: 0
  • ম্যাক ওএস এক্সে এইচএফএস: 0

আমি এখনও নেটওয়ার্কযুক্ত ফাইল সিস্টেম পরীক্ষা করে দেখিনি।

প্রশ্ন: আমি কীভাবে অন্যকে তাদের স্ক্রিপ্টগুলি ভুল বলে মার্জিতভাবে ব্যাখ্যা করতে পারি ?

আমার মতে, "সঠিক" সংস্করণটি হবে:

if test ! -s ./log/cr_trig.log
then
    echo "Badness: Log not empty"
    exit 25
fi

5
তাদের কেবল আপনার পরীক্ষাগুলি দেখান। আপনার কাছে এমন হার্ড ডেটা রয়েছে যা প্রমাণ করে যে তাদের পরীক্ষাটি বহনযোগ্য নয়, আপনার আর কী দরকার?
মাদুর

এই সার্ভারে আমি এখনও অবধি সবচেয়ে আকর্ষণীয় প্রশ্ন দেখেছি। খুব খারাপ যে কেবল একটি পয়েন্ট ব্যয় করতে পারে।
কেটিএফ

@ktf আপনি সর্বদা একটি অনুদান পুরষ্কার দিতে পারেন।
জো

উত্তর:


6

খুব আকর্ষণীয় সন্ধান। যদিও আমি কখনই ls -sকোনও ফাইল খালি কিনা তা যাচাই করার জন্য ব্যবহার করিনি , তবে আমি ধরে নিয়েছি, এটি 0খালি ফাইলের জন্যও রিপোর্ট করে।

আপনার প্রশ্নের কাছে: মাদুর যেমন ইতিমধ্যে মন্তব্য করেছে, তাদের আপনার পরীক্ষার ফলাফলগুলি দেখান। তাদের ফলাফলগুলি ব্যাখ্যা করার জন্য, ls -sফাইল সিস্টেমে বরাদ্দকৃত ব্লকের পরিমাণের প্রতিবেদন করুন, বাইটের প্রকৃত আকার নয়। স্পষ্টতই কিছু ফাইল সিস্টেমের প্রয়োগগুলি ব্লকগুলি বরাদ্দ করে এমনকি যদি তাদের ইনডে কেবলমাত্র একটি ন্যূনাল পয়েন্টার সংরক্ষণের পরিবর্তে কোনও ডেটা সংরক্ষণ না করে।

এর ব্যাখ্যাটি পারফরম্যান্স-সম্পর্কিত হতে পারে। খালি ফাইলগুলি তৈরি করা যা খালি থাকবে তা হ'ল স্বাভাবিক প্রক্রিয়াজাতকরণের জন্য একটি ব্যয় (আমি সর্বাধিক প্রচলিত ব্যবহার হ'ল স্থিতি ফাইলগুলি তৈরি করা যেখানে কোনও ফাইলের উপস্থিতি সফ্টওয়্যারটির একটি নির্দিষ্ট অবস্থার প্রতিনিধিত্ব করে)।

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

দ্বিতীয় কারণটি হ'ল কোনও ফাইলটিতে অতীতে ডেটা রয়েছে যা মুছে ফেলা হয়েছে। সর্বশেষ ডেটা ব্লকটি মুক্ত করার পরিবর্তে এটি একই ফাইলের মাধ্যমে পুনরায় ব্যবহারের জন্য সেই ডেটা ব্লক রাখার উপযুক্ত হতে পারে।

সম্পাদনা করুন:

আরও একটি কারণ মাথায় আসলো: আপনি যে ফাইল সিস্টেমগুলি 0 টি মান খুঁজে পেয়েছেন তা হ'ল জেডএফএস , রেড + এলভিএম + এফএস বাস্তবায়ন এবং জিএফএস , একটি ক্লাস্টার ফাইল সিস্টেম m উভয় ফাইলের অখণ্ডতা বজায় রাখতে মেটাডেটা সঞ্চয় করতে পারে যা আইওডগুলিতে সংরক্ষণ করা হয় না। এটি হতে পারে যে ls -sএই মেটাডেটার জন্য বরাদ্দ করা ডেটা ব্লকে গণনা করা যেতে পারে ।


4

বেশিরভাগ (সমস্ত না থাকলে) অন্যান্য ফাইল সিস্টেমের বিপরীতে, জেডএফএস ইনোডের একটি স্ট্যাটিক অ্যারে প্রিলোকলেট করে না। ZFS উপর একটি খালি ফাইল তৈরি করা হচ্ছে তারপর তথ্য একটি নতুন ব্লক যার দ্বারা রিপোর্ট এক ব্যবহার করা হবে ls -s

আমি সন্দেহ করি যে জিএফএসের সিঙ্ক্রোনাইজেশন / লক ডেটা সংরক্ষণ করতে হবে যা অন্য শূন্যের ফলাফলের দিকে না যায়।


2

ls -s ডিরেক্টরিতে প্রবেশের মধ্যে সরাসরি সঞ্চিত যা আছে তা সহ ফাইলের জন্য বরাদ্দকৃত ব্লকের সংখ্যা রিপোর্ট করে।

বেশিরভাগ ক্ষেত্রে, ব্লকের সংখ্যাটি বাইটগুলিতে ব্লকের আকার দ্বারা বিভক্ত বাইট সংখ্যা, গোল হয়।

বিরল ফাইলের জন্য ব্লকের সংখ্যা এর চেয়ে কম হতে পারে । উদাহরণস্বরূপ, বেশিরভাগ ফাইল সিস্টেমে এটি 0 টি ব্লক বিস্তৃত 8192-বাইট ফাইল তৈরি করবে:

$ perl -e 'truncate STDOUT, 8192' >a
$ ls -l a
-rw-r--r-- 1 gilles gilles 8192 Nov  1 21:32 a
$ ls -s a
0 a

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

কেন ls -sভুল তা ব্যাখ্যা করার জন্য: এটি ফাইলের আকার গণনা করে না, তবে একটি ফাইল সিস্টেম নির্ভর নির্ভর পরিমাণ। বাহ্যিক সরঞ্জাম ( ls) এবং কিছু বিশ্লেষণের জন্য কোনও ফাইল প্রথম স্থানে খালি কিনা তা নির্ধারণ করার এটি একেবারেই অপ্রত্যক্ষ উপায় ; পরিবর্তে, তাদের ব্যবহার করা উচিত test -s, যার কোনও পার্সিংয়ের প্রয়োজন নেই, এবং অনুরোধ করা ঠিক তেমন সম্পাদন করে। যদি তারা মনে করেন যে ls -sকোনও ফাইল খালি আছে কিনা তা পরীক্ষা করার এটি একটি ভাল উপায়, এটি কাজ করে যে তা প্রমাণ করার জন্য তাদের উপর কাজ করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.