स्रोत कोड और POSIX मानक में खुदाई करने के बाद, मैं कहूंगा कि @ antje-m और @Gilles द्वारा उत्तर अधिकतर सही हैं।
सारांश के रूप में POSIX.1-2008 की टिप्पणी को उद्धृत करना लायक है :
512-बाइट इकाइयों का उपयोग ऐतिहासिक अभ्यास है और इस POSIX.1-2008 की मात्रा में एलएस और अन्य उपयोगिताओं के साथ संगतता बनाए रखता है। यह अनिवार्य नहीं है कि फ़ाइल सिस्टम 512-बाइट ब्लॉक पर आधारित हो। -K विकल्प को एक समझौता उपाय के रूप में जोड़ा गया था। मानक डेवलपर्स द्वारा यह सहमति व्यक्त की गई थी कि 512 बाइट्स सिस्टम V पर पूर्ण ऐतिहासिक संगति (बनाम BSD सिस्टम पर मिश्रित 512/1024-बाइट उपयोग) के कारण सर्वश्रेष्ठ डिफ़ॉल्ट इकाई थी, और 1024- पर स्विच करने के लिए एक -k विकल्प बाइट यूनिट एक अच्छा समझौता था। जो उपयोगकर्ता अधिक तार्किक 1024-बाइट मात्रा को पसंद करते हैं, वे आसानी से उर्फ df को df -k कर सकते हैं, जो 512-बाइट इकाइयों पर निर्भर कई ऐतिहासिक लिपियों को तोड़े बिना।
ब्लॉक आकार के लिए ls -s:
POSIX का कहना है कि डिफ़ॉल्ट ब्लॉक आकार कार्यान्वयन-परिभाषित है, जब तक कि -kविकल्प नहीं दिया जाता है।
इसमें लागू डिफ़ॉल्ट ब्लॉक आकार में GNU coreutils lsपरिभाषित किया गया है GNU gnulib:
gnulib/lib/human.c
/* The default block size used for output. This number may change in
the future as disks get larger. */
#ifndef DEFAULT_BLOCK_SIZE
# define DEFAULT_BLOCK_SIZE 1024
#endif
जो एक पुरानी प्रतिबद्धता से आता है:
commit 96e78d1f64d7c8d2acc5ad27dc3e73b96ae80585
Author: Jim Meyering <jim@meyering.net>
Date: Mon Jun 29 15:23:04 1998 +0000
प्रतिबद्ध संदेश ने 1024 नंबर के बारे में कुछ नहीं कहा।
और ध्यान दें कि ब्लॉक आकार का उपयोग किया गया है duऔर dfयह भी 1024 है, lsबस उन्हें शामिल करने के लिए चुना गया है। हालांकि के लिए duऔर dfयह POSIX मानक के लिए एक टकराव है (इसलिए यहाँ वातावरण चर POSIXLY_CORRECTआता है)। यह GNU टीम का एक निर्णय लगता है, विकिपीडिया पृष्ठ POSIX को इस विवाद के बारे में देखें ।
आज्ञा के लिए stat।
यह POSIX मानक का हिस्सा नहीं है, लेकिन सिस्टम कॉल है। हालाँकि ब्लॉक आकार के लिए इकाई मानकीकृत नहीं है ( sys_stat.h ):stat
POSIX.1-2008 के भीतर स्टेट स्ट्रक्चर के सदस्य st_blocks के लिए यूनिट परिभाषित नहीं है।
statआदेश बस द्वारा दी गई जानकारी को प्रदर्शित करता है statप्रणाली अधिकार, और कुछ अपवाद के साथ 512 ब्लॉक आकार का उपयोग करते हुए (वे कर रहे हैं गैर लिनक्स, जैसे HP-UX, IBM AIX आदि को देखने के मैक्रो में परिभाषित gnulib/lib/stat-size.h)।
तो 512 नंबर एक ऐतिहासिक विकल्प और लिनक्स सम्मेलन है।
GNU coreutils(इसलिए lsआदेश) लिनक्स कर्नेल (इसलिए का हिस्सा नहीं है statकॉल), वे अलग प्रणाली पहलू लक्षित कर रहे हैं, GNU coreutilsमानव के लिए और अधिक (पढ़ने में आसान) है, और हार्डवेयर सार के लिए लिनक्स कर्नेल (इसलिए हार्डवेयर के करीब)।
संपादित करें: 4096 ब्लॉक आकार "IO ब्लॉक" आकार है, वास्तविक भौतिक ब्लॉक का आकार अभी भी 512 बाइट है जैसा कि इस प्रश्न में बताया गया है ।