Ls -l के बाद की पहली पंक्ति में वह "कुल" क्या है? [बन्द है]


131

totalके आउटपुट में क्या है ls -l?

    $ ls -l /etc
    total 3344
    -rw-r--r--   1 root root   15276 Oct  5  2004 a2ps.cfg
    -rw-r--r--   1 root root    2562 Oct  5  2004 a2ps-site.cfg
    drwxr-xr-x   4 root root    4096 Feb  2  2007 acpi
    -rw-r--r--   1 root root      48 Feb  8  2008 adjtime
    drwxr-xr-x   4 root root    4096 Feb  2  2007 alchemist

जवाबों:


94

आप lsअपने मंच के दस्तावेज़ में उस पंक्ति की परिभाषा पा सकते हैं । के लिए coreutils ls(बहुत सारे लिनक्स सिस्टम पर पाया जाने वाला), जानकारी के माध्यम से पाया जा सकता है info coreutils ls:

सूचीबद्ध प्रत्येक निर्देशिका के लिए, फ़ाइलों को एक लाइन 'कुल BLOCKS' के साथ प्रस्तुत करें, जहाँ BLOCKS उस निर्देशिका की सभी फ़ाइलों के लिए कुल डिस्क आवंटन है।


14
मजेदार रूप से, man lsमेरे सिस्टम पर उस लाइन का उल्लेख नहीं है, लेकिन info coreutils lsकरता है। कैसे आता है man lsऔर info coreutils lsएक ही कमांड के बारे में अलग-अलग जानकारी है? lsसिर्फ एक बार दस्तावेज क्यों नहीं किया जाता है ? एक ही कमांड के लिए दो अलग-अलग दस्तावेज़ होने से ऐसा लगता है कि असफलता के लिए तैयार है।
हैलोगूडबी 15

1
infoकोरुटिल्स सामान के लिए डॉक्स अक्सर मैन पेजों की तुलना में अधिक विस्तृत होते हैं। यही कारण है कि उनके पास प्रत्येक आदमी पृष्ठ के अंत में एक नोट है जो आपको अधिक विवरण के लिए जानकारी अनुभाग का संदर्भ देता है।
Mat

7
आह। मैंने निष्पादित किया info lsऔर इसे उसी आउटपुट के रूप में देना है info coreutils ls। तर्क क्या करता coreutilsहै?
नमस्तेगौडबी

46

सूत्र: वह संख्या क्या है ?

कुल int = प्रत्येक फ़ाइल के लिए (physical_blocks_in_use) * physical_block_size / ls_block_size) का योग

कहाँ पे:

  • ls_block_sizeएक मनमाना पर्यावरण चर (सामान्य रूप से 512 या 1024 बाइट्स) है जो --block-size=<int>झंडे के साथ स्वतंत्र रूप से परिवर्तनीय है ls, POSIXLY_CORRECT=1GNU पर्यावरण चर (512-बाइट इकाइयों को प्राप्त करने के लिए), या -k1kB इकाइयों को बल देने के लिए ध्वज है।
  • physical_block_sizeएक आंतरिक ब्लॉक इंटरफ़ेस का ओएस निर्भर मूल्य है, जो अंतर्निहित हार्डवेयर से जुड़ा हो सकता है या नहीं भी हो सकता है। यह मान सामान्य रूप से 512b या 1k है, लेकिन पूरी तरह से OS पर निर्भर है। यह %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

26

सूचीबद्ध फ़ाइलों द्वारा उपयोग किए जाने वाले अप्रत्यक्ष ब्लॉक सहित फ़ाइल सिस्टम ब्लॉक की कुल संख्या है। यदि आप ls -sएक ही फाइल पर चलते हैं और रिपोर्ट किए गए नंबरों को जोड़ते हैं तो आपको वही नंबर मिलेगा।


बस यह सच नहीं है। उदाहरण: /bin/ls -s-> total 15 2 filename 3 filename2 3 filename3 3 filename4 2 filename5 2 filename6 2 filename8 2 filename9
डॉन स्कॉट

3
मैं क्या प्रणाली पर हैं पता नहीं है, लेकिन मेरे लिए, यह है सच। उदाहरण: gist.github.com/rfjakob/200f6001bf91cf801891
जैकब

@ जाकोब ने एक पूर्ण उत्तर पोस्ट किया, एक बार देखिए और मुझे बताइए कि क्या यह स्पष्ट है।
डॉन स्कॉट

यह विंडोज के लिए गिट बैश में सच नहीं है।
थूडेन

18

सिर्फ उल्लेख करने के लिए - मानव-पठनीय प्रारूप में इसे परिवर्तित करने के लिए -h (ls -lh) का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.