लिनक्स में फ़ाइल का भौतिक आकार कैसे प्राप्त करें?


12

मैं ls -lकिसी फ़ाइल का तार्किक आकार प्राप्त करने के लिए उपयोग कर सकता हूं , लेकिन क्या फ़ाइल का भौतिक आकार प्राप्त करने का कोई तरीका है?


कृपया, परिभाषित करें कि "भौतिक" आकार से आपका क्या मतलब है।
जॉर्ग डब्ल्यू मित्तग

जवाबों:


28

ls -lआपको फ़ाइल का स्पष्ट आकार देगा, जो कि बाइट्स की संख्या है जिसे प्रोग्राम तब पढ़ेगा जब उसने फ़ाइल को शुरू से अंत तक पढ़ा होगा। duआपको "डिस्क पर" फ़ाइल का आकार देगा।

डिफ़ॉल्ट रूप से, duआपको डिस्क ब्लॉक की संख्या में फ़ाइल का आकार देता है, लेकिन आप -hइसके बजाय मानव पठनीय इकाई प्राप्त करने के लिए उपयोग कर सकते हैं । duअपने सिस्टम के लिए मैनुअल भी देखें ।

ध्यान दें कि बाइट पाने के लिए जीएनयू कोरुटिल du(जो संभवतः आपके पास लिनक्स पर है) -bके साथ --apparent-sizeविकल्प का अर्थ है । यह वह नहीं है जिसका उपयोग आप डिस्क पर वास्तव में उपयोग किए जाने वाले बाइट्स की संख्या प्राप्त करने के लिए करना चाहते हैं। इसके बजाय, का उपयोग करें --block-size=1या -B 1

GNU के साथ ls, आप ls -s --block-size=1फ़ाइल पर भी कर सकते हैं । यह du -B 1फ़ाइल के लिए समान संख्या देगा ।


उदाहरण:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

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

fallocateअपने लिनक्स सिस्टम के लिए मैनुअल भी देखें ।


किस मामले में यह अंतर महत्वपूर्ण है? क्या आप एक व्यावहारिक उदाहरण बना सकते हैं? पहले ही, आपका बहुत धन्यवाद।
डी आर्सी नाडर

1
@ D'ArcyNader अपडेट किया गया उत्तर देखें।
Kusalananda

अगर मुझे कुछ गलत लगता है तो मुझे सही करें, लेकिन ऐसा प्रतीत होता है कि पहला वाक्य चारों ओर का दूसरा तरीका है: stackoverflow.com/a/31437673/3701431 du दिखाएगा कि वास्तव में कितना डेटा पढ़ा जा सकता है, जबकि lsपता चलता है कि डिस्क सेक्टर किस हद तक आवंटित किए गए हैं।
सर्गी कोलोडियाज़नी

2
@SergiyKolodyazhnyy (देर से जवाब देने के लिए खेद है) नहीं, duवास्तव में फ़ाइल द्वारा उपयोग की गई डिस्क की मात्रा को दिखाता है, जबकि स्पष्ट आकार (तार्किक आकार) द्वारा दिखाया गया lsहै कि एक प्रोग्राम कितने बाइट्स से इसे पढ़ने में सक्षम होगा। यदि फ़ाइल विरल है, तो कुछ रीड बाइट्स शून्य होंगे, लेकिन उन्हें अभी भी उस प्रोग्राम तक पहुंचाया जाएगा जो उन्हें पढ़ता है (बस डिस्क से नहीं)।
Kusalananda

यह एक बहुत अच्छा जवाब था।
छिपकली

3

मुझे इस तरह से बाइट्स में फ़ाइल का आकार मिलता है:

actualsize=$(du -b "${file}" | cut -f 1)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.