बैश में वर्तमान विभाजन के लिए मुफ्त डिस्क स्थान की जाँच करें


118

मैं बैश में इंस्टॉलर लिख रहा हूं। उपयोगकर्ता लक्ष्य निर्देशिका में जाएगा और इंस्टॉल स्क्रिप्ट चलाएगा, इसलिए पहली कार्रवाई यह जांचने के लिए होनी चाहिए कि पर्याप्त जगह है। मुझे पता है कि df सभी फ़ाइल सिस्टम को रिपोर्ट करेगा, लेकिन मैं सोच रहा था कि क्या विभाजन के लिए मुफ्त स्थान प्राप्त करने का कोई तरीका है जो लक्ष्य निर्देशिका चालू है।

संपादित करें - जवाब मैं साथ आया था

df $PWD | awk '/[0-9]%/{print $(NF-2)}'

थोड़ा अजीब है क्योंकि df टर्मिनल को फिट करने के लिए अपने आउटपुट को प्रारूपित करता है, इसलिए एक लंबे आरोह बिंदु नाम के साथ आउटपुट को एक पंक्ति में स्थानांतरित कर दिया जाता है


4
-Pध्वज का उपयोग करें df, आपको यह सब एक पंक्ति में मिलेगा।
Mat

5
du -hs .वर्तमान निर्देशिका के लिए उपयोग में डिस्क स्थान को देखने से संबंधित है।
यहाँ

जैसा कि @ मट ने कहा था, यदि आप अपने समाधान के साथ जाते हैं, तो आप उपयोग करना चाहेंगे। अतीत में मैंने अजीब रूप से स्वरूपित या लंबे नाम वाले विभाजन का सामना किया है, जो स्क्रिप्ट को विफल करने का कारण बना, क्योंकि -P ध्वज गायब था।
सुपरटेटेलमैन

जवाबों:


204

हाँ:

df -k .

वर्तमान निर्देशिका के लिए।

df -k /some/dir

यदि आप एक विशेष निर्देशिका की जाँच करना चाहते हैं।

stat(1)यदि आपका सिस्टम है, तो आप कमांड को देखना भी चाहेंगे । आप अपनी स्क्रिप्ट को पार्स करना आसान बनाने के लिए आउटपुट स्वरूप निर्दिष्ट कर सकते हैं। यहाँ एक छोटा सा उदाहरण है:

$ echo $(($(stat -f --format="%a*%S" .)))

उसके लिए धन्यवाद! स्टैट मुझे थोड़ा दिमाग उड़ाता हुआ दिखता है। मैन पेज को पढ़ने से पता चलता है कि मैं अपने df संस्करण पर -k नहीं चाहता, लेकिन मदद करने के लिए रास्ता रखा।
ग्रेग रेनॉल्ड्स

आह - अब मैं देखता हूं कि आप क्यों -k का उपयोग करते हैं, गणना आसान बनाता है!
ग्रेग रेनॉल्ड्स

1
यदि आप निर्दिष्ट नहीं करते हैं तो यह चीज़ बहुत से सिस्टम 512 बाइट ब्लॉक के लिए डिफ़ॉल्ट होगी -k। (कोरुटिल्स डीएफ 1k ब्लॉकों में चूक करता है, इसलिए आप लिनक्स पर बहुत सुरक्षित हैं - लेकिन यदि आपके पास कोर्यूटिल हैं, तो आपके पास है stat, और यह भी सुरक्षित है - कोई पार्सिंग की आवश्यकता नहीं है)।
Mat

2
मेरे Red-Hat कुछ में, स्वरूप स्ट्रिंग के %a*%sबजाय होना चाहिए %a*%S। मुझे यकीन नहीं है कि यह एक अंतर या एक टाइपो है।
RnMss

@RnMss: यह रेडहैट पर मैन पेज के अनुसार (राजधानी) माना जाता है %S। एक फ़ाइल सिस्टम नहीं मिल रहा है जहाँ %s != %Sकुछ रेडहेट्स पर मेरी पहुँच बहुत अधिक है, इसलिए जाँच नहीं कर सकते हैं :-(
Mat

43
  1. df आदेश: रिपोर्ट फ़ाइल सिस्टम डिस्क स्थान उपयोग
  2. du आदेश: फ़ाइल स्थान उपयोग का अनुमान लगाएं

मुफ्त डिस्क स्थान टाइप df -hया df -kसूचीबद्ध करने के लिए:

 $ df -h

या

 $ df -k

du दिखाता है कि एक या एक से अधिक फ़ाइलों या निर्देशिकाओं का कितना स्थान है:

 $ du -sh

-sविकल्प अंतरिक्ष एक निर्देशिका उपयोग कर रहा है और को सारांशित -hविकल्प प्रदान करता है मानव पठनीय उत्पादन।


24

मुझे लगता है कि यह बहुत ही सवाल पर थिंकिंगमीडिया के जवाब के लिए एक टिप्पणी या एक संपादन होना चाहिए ( वर्तमान विभाजन में मुफ्त डिस्क स्थान की जाँच करें ), लेकिन मुझे टिप्पणी करने की अनुमति नहीं है (पर्याप्त प्रतिनिधि नहीं) और मेरा संपादन अस्वीकार कर दिया गया है (कारण: "यह एक टिप्पणी या एक उत्तर होना चाहिए")। तो कृपया, SO ब्रह्माण्ड की शक्तियाँ, मुझे किसी और के "उत्तर" को दोहराने और ठीक करने के लिए लानत नहीं हैं। लेकिन इंटरनेट पर कोई गलत था! ™ और उन्होंने मुझे इसे ठीक नहीं करने दिया।

कोड

  df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'

इसमें पर्याप्त दोष है: हाँ, यह 50G50 के रूप में मुफ्त उत्पादन करेगा - लेकिन यह भी 5.0M50 के 3.4Gरूप में 15Kमुफ्त या 34 के रूप में मुफ्त या 15 के रूप में मुफ्त उत्पादन करेगा ।

एक निश्चित मात्रा में मुफ्त डिस्क स्थान की जाँच करने के उद्देश्य से एक स्क्रिप्ट बनाने के लिए आपको उस इकाई को जानना होगा जिसे आप जाँच रहे हैं। इसे (as) हटा देंsed कि ऊपर उदाहरण में दिया गया है) संख्याओं का कोई मतलब नहीं है।

यदि आप वास्तव में काम करना चाहते हैं, तो आपको कुछ करना होगा:

FREE=`df -k --output=avail "$PWD" | tail -n1`   # df -k not df -h
if [[ $FREE -lt 10485760 ]]; then               # 10G = 10*1024*1024k
     # less than 10GBs free!
fi;

इंस्टॉलर के लिए df -k $INSTALL_TARGET_DIRECTORYभी अधिक समझदारी हो सकती है df -k "$PWD"। अंत में, कृपया ध्यान दें कि --outputझंडा df / linux के हर संस्करण में उपलब्ध नहीं है।


सभी --output=avail
डिस्ट्रोस में

1
अच्छा अवलोकन। ठीक यही बात उत्तर प्रदेश का अंतिम वाक्य है। @YzmirRamirez ;-)
टीआरएस


2

किसी ऐसे व्यक्ति के लिए एक पूर्ण उदाहरण जो किसी सर्वर पर माउंट बिंदु की निगरानी के लिए इसका उपयोग करना चाहता है। यह उदाहरण जाँच करेगा कि क्या / var / स्पूल 5G से कम है और व्यक्ति को ईमेल करता है:

  #!/bin/bash
  # -----------------------------------------------------------------------------------------
  # SUMMARY: Check if MOUNT is under certain quota, mail us if this is the case
  # DETAILS: If under 5G we have it alert us via email. blah blah  
  # -----------------------------------------------------------------------------------------
  # CRON: 0 0,4,8,12,16 * * * /var/www/httpd-config/server_scripts/clear_root_spool_log.bash

  MOUNTP=/var/spool  # mount drive to check
  LIMITSIZE=5485760 # 5G = 10*1024*1024k   # limit size in GB   (FLOOR QUOTA)
  FREE=$(df -k --output=avail "$MOUNTP" | tail -n1) # df -k not df -h
  LOG=/tmp/log-$(basename ${0}).log
  MAILCMD=mail
  EMAILIDS="dude@wheres.mycar"
  MAILMESSAGE=/tmp/tmp-$(basename ${0})

  # -----------------------------------------------------------------------------------------

  function email_on_failure(){

          sMess="$1"
          echo "" >$MAILMESSAGE
          echo "Hostname: $(hostname)" >>$MAILMESSAGE
          echo "Date & Time: $(date)" >>$MAILMESSAGE

          # Email letter formation here:
          echo -e "\n[ $(date +%Y%m%d_%H%M%S%Z) ] Current Status:\n\n" >>$MAILMESSAGE
          cat $sMess >>$MAILMESSAGE

          echo "" >>$MAILMESSAGE
          echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
          echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE

          # sending email (need to have an email client set up or sendmail)
          $MAILCMD -s "Urgent MAIL Alert For $(hostname) AWS Server" "$EMAILIDS" < $MAILMESSAGE

          [[ -f $MAILMESSAGE ]] && rm -f $MAILMESSAGE

  }

  # -----------------------------------------------------------------------------------------

  if [[ $FREE -lt $LIMITSIZE ]]; then
          echo "Writing to $LOG"
          echo "MAIL ERROR: Less than $((($FREE/1000))) MB free (QUOTA) on $MOUNTP!" | tee ${LOG}
          echo -e "\nPotential Files To Delete:" | tee -a ${LOG}
          find $MOUNTP -xdev -type f -size +500M -exec du -sh {} ';' | sort -rh | head -n20 | tee -a ${LOG}
          email_on_failure ${LOG}
  else
          echo "Currently $(((($FREE-$LIMITSIZE)/1000))) MB of QUOTA available of on $MOUNTP. "
  fi

1

GB या TB में विशिष्ट निर्देशिका के उपयोग को जानने के लिए कमांड में है,

df -h / dir / inner_dir /

 or

df -sh / dir / inner_dir /

और कमांड में बिट्स में विशिष्ट निर्देशिका के उपयोग को जानना है,

df-k / dir / inner_dir /


0

कमांड शेल में टाइप करें:

 df -h 

या

df -m

या

df -k

यह प्रत्येक माउंट बिंदु के लिए मुफ्त डिस्क स्थान की सूची दिखाएगा।

आप सिंगल कॉलम को भी दिखा / देख सकते हैं।

प्रकार:

df -m |awk '{print $3}'

नोट: यहां 3 कॉलम नंबर है। आप चुन सकते हैं कि आपको किस कॉलम की आवश्यकता है।

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