সূত্র: সেই সংখ্যাটি কী ?
মোট ইনট = প্রতিটি ফাইলের জন্য (শারীরিক_ব্লক_স_ইউজ) * শারীরিক_ব্লক_সাইজ / এলএস_ব্লক_সাইজ) এর যোগফল ।
কোথায়:
ls_block_size
একটি স্বেচ্ছাসেবী পরিবেশ পরিবর্তনশীল (সাধারণত 512 বা 1024 বাইট) যা
--block-size=<int>
পতাকা ls
, POSIXLY_CORRECT=1
জিএনইউ এনভায়রনমেন্ট ভেরিয়েবল (512-বাইট ইউনিট পেতে), বা -k
পতাকাটি 1 কেবি ইউনিট জোর করে মুক্তভাবে পরিবর্তনযোগ্য।
physical_block_size
কোনও অভ্যন্তরীণ ব্লক ইন্টারফেসের ওএস নির্ভর মান, যা অন্তর্নিহিত হার্ডওয়্যারের সাথে সংযুক্ত থাকতে পারে বা নাও পারে। এই মানটি সাধারণত 512 বি বা 1 কে হয় তবে এটি ওএসের উপর সম্পূর্ণ নির্ভর করে। এটি %B
মান stat
বা এর মাধ্যমে প্রকাশ করা যেতে পারে fstat
। নোট করুন যে এই মানটি (প্রায় সর্বদা) একটি আধুনিক স্টোরেজ ডিভাইসে শারীরিক ব্লকের সংখ্যার সাথে সম্পর্কিত নয় ।
এত বিভ্রান্তিকর কেন?
এই সংখ্যাটি কোনও শারীরিক বা অর্থবহ মেট্রিক থেকে মোটামুটি আলাদা। অনেক জুনিয়র প্রোগ্রামারদের ফাইল হোল বা হার্ড / সিম লিঙ্কগুলির অভিজ্ঞতা নেই । এছাড়াও, এই নির্দিষ্ট বিষয়ে উপলভ্য ডকুমেন্টেশন কার্যত অস্তিত্বহীন।
"ব্লক সাইজ" শব্দের অসন্তুষ্টি এবং অস্পষ্টতা বিভিন্ন বিভিন্ন পদক্ষেপ সহজেই বিভ্রান্ত হওয়ার ফলে এবং ডিস্ক অ্যাক্সেসের চারপাশে ঘোরাফেরার তুলনামূলকভাবে গভীর স্তরের ফলাফল।
বিরোধী তথ্যের উদাহরণ: du
(বা ls -s
) বনামstat
du *
একটি প্রকল্প ফোল্ডারে চলমান নিম্নলিখিত ফল দেয়: (দ্রষ্টব্য: ls -s
একই ফলাফল ফেরত দেয়)
dactyl:~/p% du *
2 check.cc
2 check.h
1 DONE
3 Makefile
3 memory.cc
5 memory.h
26 p2
4 p2.cc
2 stack.cc
14 stack.h
মোট : 2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62 ব্লক
তবুও যখন একটি রান করে stat
আমরা মানগুলির একটি আলাদা সেট দেখতে পাই। stat
একই ডিরেক্টরিতে চলছে ফলন:
dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3 (512) check.cc: 221 bytes
3 (512) check.h: 221 bytes
1 (512) DONE: 0 bytes
5 (512) Makefile: 980 bytes
6 (512) memory.cc: 2069 bytes
10 (512) memory.h: 4219 bytes
51 (512) p2: 24884 bytes
8 (512) p2.cc: 2586 bytes
3 (512) stack.cc: 334 bytes
28 (512) stack.h: 13028 bytes
মোট: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118 ব্লক
দ্রষ্টব্য: আপনি কমান্ডটি stat * --printf="%b\t(%B)\t%n: %s bytes\n"
> আউটপুট করতে (ক্রমানুসারে) ব্লকের সংখ্যা, (প্যারেন্সে) সেই ব্লকের আকার, ফাইলের নাম এবং বাইট আকারে উপরের মতো দেখতে পারেন।
দুটি গুরুত্বপূর্ণ জিনিস গ্রহণের পথে আছে:
stat
উপরের সূত্রে ব্যবহৃত physical_blocks_in_use
এবং physical_block_size
হিসাবে উভয়ই রিপোর্ট করে । নোট করুন যে এগুলি ওএস ইন্টারফেসের উপর ভিত্তি করে মান।
du
যা শারীরিক ডিস্ক ব্যবহারের মোটামুটি সঠিক অনুমান হিসাবে সাধারণত গৃহীত হয় তা সরবরাহ করে ।
রেফারেন্সের জন্য, এখানে ls -l
উপরে ডিরেক্টরিটির ডিরেক্টরি রয়েছে:
dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.cc
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.h
-rw-r--r--. 1 dhs217 grad 0 Oct 16 2013 DONE
-rw-r--r--. 1 dhs217 grad 980 Oct 16 2013 Makefile
-rw-r--r--. 1 dhs217 grad 2069 Oct 16 2013 memory.cc
-rw-r--r--. 1 dhs217 grad 4219 Oct 16 2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18 2013 p2
-rw-r--r--. 1 dhs217 grad 2586 Oct 16 2013 p2.cc
-rw-r--r--. 1 dhs217 grad 334 Oct 16 2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16 2013 stack.h
man ls
আমার সিস্টেমে মজাদারভাবে যথেষ্ট পরিমাণে লাইনটি উল্লেখ করা হয়নি, তবে রয়েছেinfo coreutils ls
। একই কমান্ড সম্পর্কে কীভাবে আসেman ls
এবংinfo coreutils ls
বিভিন্ন তথ্য থাকে? কেনls
শুধু একবার নথিভুক্ত করা হয় না ? একই কমান্ডের জন্য দুটি পৃথক নথিপত্র ব্যর্থতার জন্য সেট আপ করার মতো মনে হয়।