मुझे कमांड लाइन पर निर्देशिका का आकार कैसे मिलता है?


1065

मैंने lsविकल्प के साथ कमांड का उपयोग करके एक निर्देशिका (निर्देशिका और उप निर्देशिका युक्त) का आकार प्राप्त करने की कोशिश की l। यह फ़ाइलों ( ls -l file name) के लिए काम करने लगता है , लेकिन अगर मैं एक निर्देशिका (उदाहरण के लिए ls -l /home) का आकार प्राप्त करने की कोशिश करता हूं, तो मुझे केवल 4096 बाइट्स मिलते हैं, हालांकि कुल मिलाकर यह बहुत बड़ा है।


18
1) सख्ती से बोलना, आप नहीं कर सकते। लिनक्स में निर्देशिकाएं हैं, फ़ोल्डर नहीं। 2) एक निर्देशिका के आकार (जो एक विशेष फ़ाइल जो इनोड्स को अन्य फ़ाइलों को इंगित करता है) और उस निर्देशिका की सामग्री के आकार के बीच अंतर है। जैसा कि दूसरों ने बताया है, डु कमांड बाद में प्रदान करता है, जो कि ऐसा लगता है जैसे आप चाहते हैं।
jamesqf

11
जैसा कि आप नए प्रतीत हो रहे हैं, मैं आपके द्वारा विकल्प (यानी ) में -hजोड़े जा सकने वाले सहायक विकल्प को केवल 1130301 के बजाय 1.1M जैसे मानव-अनुकूल संकेतन में मुद्रित करने के लिए -lविकल्प (यानी ls -lh) में जोड़ दूंगा। "h "उस du -hsआदेश में, जो @sam ने निर्देशिकाओं के बारे में आपके प्रश्न के उत्तर के रूप में दिया है, जिसका अर्थ" मानव-पठनीय "भी है, और यह ऐसा भी प्रतीत होता है df -hजिसमें डिस्क पर मानव पठनीय मात्रा में प्रयुक्त और मुक्त स्थान दिखाई देता है ।
एमएसथ

जवाबों:


1489

du -sh file_path

व्याख्या

  • du( d isc u sage) कमांड फ़ाइल file_path स्थान उपयोग का अनुमान लगाती है
  • विकल्प -shहैं (से man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    एक से अधिक निर्देशिकाओं की जाँच करने और कुल देखने के लिए, उपयोग करें du -sch:

      -c, --total
             produce a grand total
    

44
... जब तक आपके पास
हार्डलिंक

15
यह उस तरह का उत्तर है जो मुझे पसंद है <3 यह संक्षेप में है और कमांड के लिए एक तरह का परिचय है duऔर आप अधिक विवरण की खोज करने का तरीका भी देते हैं man du...

यूनिक्स जैसे निर्माताओं के लिए संकेत: अगली बार, बस "डिस्कस्यूज़" कमांड को पहले बनाएं, या शायद "डिस्क उपयोग" ... फिर शॉर्टकट ...;)
jave.web

यह find वर्तमान पथ में विशिष्ट उपनिर्देशिकाओं में स्थान की मात्रा की गणना करने के लिए उदाहरण के लिए बहुत अच्छा काम करता है : $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
एलेक्स Glukhovtsev

321

बस duकमांड का उपयोग करें :

du -sh -- *

आपको मानव-पठनीय प्रारूप में वर्तमान निर्देशिका में सभी गैर-छिपी निर्देशिकाओं, फ़ाइलों आदि का संचयी डिस्क उपयोग देगा।

आप dfडायरेक्टरी वाले फाइल सिस्टम में खाली जगह जानने के लिए कमांड का उपयोग कर सकते हैं :

df -h .

4
du -sh *यदि "dir" में कोई भी फाइल डैश से शुरू होती है, तो "अज्ञात विकल्प" त्रुटियों को फेंकना शुरू कर देती है। करने के लिए सुरक्षितdu -sh -- *
एमपेन

1
du -sh *छिपे हुए फोल्डर की मेमोरी usages को नहीं दिखाता है
प्रशांत प्रभाकर सिंह

4
du -sh -- * .*डॉटफ़ाइल्स को शामिल करने के लिए। .gitउदाहरण के लिए, संभवतः एक बड़ी निर्देशिका को शामिल करना उपयोगी है । वैकल्पिक रूप से zsh में आप setopt globdotsडिफ़ॉल्ट रूप से ग्लोब डॉटफिल कर सकते हैं ।
केब्रिक

1
क्या करता --है? मुझे पता है कि यह शेल टू -इन एंड ऑप्शन के तर्कों पर लागू होता है , लेकिन बिल्ट-इनdu नहीं है और मैं इसके लिए प्रलेखित नहीं देखता du: linux.die.net/man/1/du
flow2k

कभी-कभी आप जोड़ना चाहेंगे -b( --apparent-size)
22

196

duआपका दोस्त है। यदि आप किसी निर्देशिका के कुल आकार को जानना चाहते हैं तो उसमें कूदें और दौड़ें:

du -hs

यदि आप यह भी जानना चाहते हैं कि कौन से उप-फ़ोल्डर कितना डिस्क स्थान लेते हैं ?! आप इस आदेश को आगे बढ़ा सकते हैं:

du -h --max-depth=1 | sort -hr

जो आपको सभी उप-फ़ोल्डर्स (स्तर 1) का आकार देगा। आउटपुट को सॉर्ट किया जाएगा (शीर्ष पर सबसे बड़ा फ़ोल्डर)।


यह लिनक्स के कुछ (शायद पुराने?) संस्करणों पर लगता है, सॉर्ट में एक एच स्विच नहीं है, और इसलिए अगली सबसे अच्छी कमांड जो मुझे मिल सकती है वह है: du -c --max-गहराई = 1 | सॉर्ट-आरएन
रिचहॉलस्टोक

यदि आप ncduफ़ाइलों का उपयोग करते हैं तो @richhallstoke को डिफ़ॉल्ट रूप से अवरोही आकार द्वारा क्रमबद्ध किया जाता है।
आर्मफुट

3
+1 के लिए "| सॉर्ट -हर"
19

67

duउपयोग करने के लिए जटिल हो सकता है क्योंकि आपको सभ्य उत्पादन प्राप्त करने के लिए 100 तर्क पास करने पड़ते हैं। और छिपे हुए फ़ोल्डर के आकार का पता लगाना और भी कठिन है।

अपने जीवन को आसान बनाएं और उपयोग करेंncdu

ncdu

आप प्रति फ़ोल्डर सारांश प्राप्त करते हैं जो आसानी से ब्राउज़ करने योग्य हैं।


9
यह सही उत्तर होना चाहिए, कम से कम उन लोगों के लिए जो सिस्टम पर सॉफ़्टवेयर स्थापित कर सकते हैं। दुर्भाग्य से मुझे नहीं लगता कि अधिकांश लोग इसे देखने के लिए काफी नीचे स्क्रॉल करेंगे।
डेविड

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

@ रिकीनोटारो-गार्सिया मेरी पूरी टिप्पणी पढ़ें: आपका प्रयास छिपी हुई वस्तुओं को अनदेखा करता है और बड़ी निर्देशिकाओं पर लटका हुआ है।
Teque5

2
ncduमहान है, मैं हमेशा भूल जाने पर इस आदेश की खोज करता हूं। यह तेज़ है, नेविगेट करने में आसान है और बड़े फ़ोल्डरों को आसानी से खोजने में मदद करता है। FYI करें, यह macOS के लिए भी उपलब्ध है और शायद सभी लिनक्स मशीनों के लिए।
लुकास

..और आप कुंजी ncduको दबाकर सीधे फ़ोल्डरों को हटा सकते हैंd
ccpizza

32

अन्य लोगों ने उल्लेख किया है du, लेकिन मैं Ncdu का भी उल्लेख करना चाहूंगा - जो कि एक ncurses संस्करण है duऔर अन्तरक्रियाशीलता प्रदान करता है: आप सीधे निर्देशिका पदानुक्रम का पता लगा सकते हैं और उपनिर्देशिकाओं के आकार देख सकते हैं।


26

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

-hविकल्प मानव पठनीय रूप में परिणामों से पता चलता है (जैसे, 4k, 5M, 3 जी)।

du -h (file name)

22

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

आपके उदाहरण में, आपने एक फ़ाइल पर ls -l का उपयोग किया है, जिसने फ़ाइल का वास्तविक आकार वापस कर दिया होगा, डिस्क पर इसका आकार नहीं।

यदि आप वास्तविक फ़ाइल आकार जानना चाहते हैं, तो -b विकल्प को du में जोड़ें।

du -csbh .

हाँ। मैं sdfs का उपयोग कर रहा हूं, जो फ़ाइलों को संपीड़ित और काट देता है, इसलिए मैं यह पता नहीं लगा सका कि यह इतनी कम संख्या क्यों रिपोर्ट कर रहा था। Ls के साथ फ़ाइलों का वास्तविक आकार का उपयोग करके पाया जा सकता है: du -b
रयान शिलिंग्टन

15

व्यक्तिगत रूप से मुझे लगता है कि यह सबसे अच्छा है, अगर आप उपयोग नहीं करना चाहते हैं ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

इससे पता चलता है कि आपने वर्तमान ड्राइव पर कितना डिस्क स्थान छोड़ा है और फिर आपको बताता है कि प्रत्येक फ़ाइल / निर्देशिका में कितना समय लगता है। जैसे,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

FYI करें, यह आकार-ऑन-डिस्क की रिपोर्ट करता है। यानी, यह संभवतः निकटतम 4KB के लिए गद्देदार होगा।
एमपीएन


9

वर्तमान निर्देशिका के अंतर्गत सभी फ़ाइलों को पुनरावर्ती रूप से प्राप्त करें और उनके आकार को योग करें:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

मैं -not -type dन केवल साधारण फ़ाइलों ( -type f) के प्रतीकों का उपयोग करता हूं, बल्कि प्रतीकात्मक लिंक के आकार और इतने पर।
anton_rh

यह बहुत अच्छा है, क्योंकि आपको फ़ाइलों को संग्रहीत करने के लिए आवश्यक ओवरहेड नहीं मिलता है, लेकिन केवल फाइलों का आकार ही होता है।
bballdave025

9

यहाँ आपके .bash_aliases के लिए एक फ़ंक्शन है

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

नमूना उत्पादन:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

मातहतों के लिए:

$ dusort .
$ dusort /var/log/


6

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

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

यदि निर्देशिका में हार्ड लिंक हैं, तो duछोटे मान को भी प्रिंट कर सकते हैं क्योंकि निर्देशिका में कई अलग-अलग फाइलें मीडिया पर एक ही डेटा को संदर्भित करती हैं।

निर्देशिका में सभी फ़ाइलों का सीधा कुल आकार प्राप्त करने के लिए, निम्नलिखित एक-पंक्ति शेल अभिव्यक्ति का उपयोग किया जा सकता है (एक GNU मानकर):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

या इससे भी कम:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

यह निर्देशिका में सभी गैर-निर्देशिका फ़ाइलों के आकार (और इसकी उपनिर्देशिका पुनरावर्ती रूप से) एक-एक करके प्रस्तुत करता है। ध्यान दें कि सहानुभूति के लिए, यह साइमलिंक के आकार की रिपोर्ट करता है (फाइल सिम्लिंक की नहीं)।


5

आप उपयोग कर सकते हैं

du -sh directory/

तथा

du -sh filename

फ़ोल्डर या फ़ाइल के कब्जे वाले स्थान को जानना।

df -h

मानव पठनीय प्रारूप में डिस्क उपयोग दिखाएगा-वह करता है।

वहाँ भी एक गुई आधारित कार्यक्रम कहा जाता है Disk Usage Analyzer


5

यहाँ एक POSIX स्क्रिप्ट है जो इसके साथ काम करेगी:

  • एक पंक्ति
  • फ़ाइलें
  • एक निर्देशिका
  • निर्देशिकाएँ
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

स्रोत

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