2011-04-17 9 views
19

से इतना अलग क्यों है du का आउटपुट du -b से अक्सर अलग क्यों है? -b--apparent-size --block-size=1 के लिए शॉर्टेंड है। केवल --apparent-size का उपयोग करके मुझे अधिकतर समय मिलते हैं, लेकिन --block-size=1 चाल चल रहा है। मुझे आश्चर्य है कि आउटपुट तब भी सही है, और मैं कौन से नंबर चाहता हूं? (यानी वास्तविक फाइलसाइज, यदि किसी अन्य स्टोरेज डिवाइस पर कॉपी किया गया है)`du` का उत्पादन अक्सर 'du -b`

+6

डाउनवोट क्यों? यह एक बहुत अच्छा सवाल की तरह दिखता है। अगर आप किसी प्रश्न या उत्तर को कम करने जा रहे हैं तो कृपया टिप्पणी करने के लिए सौजन्य करें ताकि हर कोई कुछ सीख सके। एक अज्ञात डाउनवोट एक संभावित शिक्षण पल फेंक दिया जाता है। –

+1

@Pete: शायद क्योंकि यह StackOverflow के लिए विषय बंद है। मुझे आशा है कि कुछ और उच्च प्रतिष्ठित उपयोगकर्ता नोटिस करेंगे। –

उत्तर

21

स्पष्ट आकार बाइट्स अपने अनुप्रयोगों के बारे में सोच फ़ाइल में हैं की संख्या है। यह डेटा की मात्रा है जो नेटवर्क पर स्थानांतरित की जाएगी (प्रोटोकॉल हेडर की गणना नहीं) यदि आपने फ़ाइल को FTP या HTTP पर भेजने का निर्णय लिया है। यह cat theFile | wc -c का परिणाम भी है, और यदि आप mmap का उपयोग करके पूरी चीज लोड करते हैं तो फ़ाइल की पता स्थान की मात्रा होगी।

डिस्क उपयोग ऐसी जगह की मात्रा है जिसका उपयोग किसी और चीज़ के लिए नहीं किया जा सकता है क्योंकि आपकी फ़ाइल उस स्थान पर कब्जा कर रही है।

ज्यादातर मामलों में, स्पष्ट आकार डिस्क उपयोग से छोटा है क्योंकि डिस्क उपयोग फ़ाइल के अंतिम (आंशिक) ब्लॉक के पूर्ण आकार की गणना करता है, और स्पष्ट आकार केवल उस अंतिम ब्लॉक में मौजूद डेटा की गणना करता है। हालांकि, जब आपके पास एक स्पैस फ़ाइल होती है तो स्पष्ट आकार बड़ा होता है (जब आप फ़ाइल के अंत से कहीं अधिक खोजते हैं तो स्पैस फाइलें बनाई जाती हैं, और फिर वहां कुछ लिखते हैं - ओएस शून्य से भरे कई ब्लॉक बनाने के लिए परेशान नहीं होता है - - यह केवल उस फ़ाइल के हिस्से के लिए एक ब्लॉक बनाता है जिसे आपने लिखने का निर्णय लिया था)।

+0

धन्यवाद से अधिक कई आयाम है! यह एक पूरी तरह से स्पष्टीकरण है। तो मुझे 'wc -c thefile' (बिल्ली प्रक्रिया को सहेजने) के समान आउटपुट रखने के लिए' --block-size = 1' क्यों होना चाहिए। ऐसा लगता है कि 'du' केवल बाइट्स की सही संख्या आउटपुट करता है, जब मैं या तो, -k, -m, -B1 इत्यादि निर्दिष्ट करता हूं? लेकिन शायद यह वास्तव में एक और सवाल है? डिफॉल्ट आउटपुट द्वारा 'du' ब्लॉक उपयोग नहीं, बाइट उपयोग नहीं? – knittl

+0

@knittl: मुझे नहीं पता। –

+0

अच्छा स्पष्टीकरण लेकिन प्रश्न में मौजूद '--block-size = 1'' के बारे में बात नहीं करता है -1। –

2

क्योंकि डिफ़ॉल्ट डु द्वारा डिस्क उपयोग देता है, जो फ़ाइल आकार से समान या बड़ा होता है। --apparent आकार के तहत कहा के रूप में

print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be 
larger due to holes in (`sparse') files, internal fragmentation, indirect blocks, and the like 
+0

तो वास्तव में 'स्पष्ट आकार' क्या है? और मुझे बिल्कुल विपरीत सामना करना पड़ता है: स्पष्ट आकार लगभग हमेशा डिस्क उपयोग – knittl

0

तुलना करें (उदाहरण के लिए) du -bm से du -m

-b सेट --apparent-size --block-size=1, लेकिन फिर m ओवरराइड करता है ब्लॉक आकार 1M किया जाना है।

-bh बनाम -h के लिए इसी तरह: -bh मतलब है --apparent-size --block-size=1 --human-readable, और फिर से h ओवरराइड कि ब्लॉक आकार।

2

फ़ाइलें और फ़ोल्डर उनके वास्तविक आकार और डिस्क पर आकार है

  • --apparent आकार फ़ाइल या फ़ोल्डर वास्तविक आकार है

  • डिस्क पर आकार बाइट्स की राशि है फ़ाइल या फ़ोल्डर डिस्क पर लेता है। यही बात का उपयोग करते समय बस du

आपके सामने आने वाली है कि स्पष्ट आकार लगभग हमेशा कई परिमाण डिस्क उपयोग से अधिक है तो इसका मतलब है आप आंतरिक विखंडन के साथ फ़ाइलों का (`विरल ') फ़ाइलों का एक बहुत कुछ है या अप्रत्यक्ष ब्लॉक।

संबंधित मुद्दे