বাশে বর্তমান পার্টিশনের জন্য বিনামূল্যে ডিস্কের স্থানটি পরীক্ষা করুন


118

আমি ব্যাশে একটি ইনস্টলার লিখছি। ব্যবহারকারী টার্গেট ডিরেক্টরিতে যাবে এবং ইনস্টল স্ক্রিপ্টটি চালাবে, সুতরাং পর্যাপ্ত স্থান রয়েছে কিনা তা পরীক্ষা করে প্রথম কর্মটি করা উচিত। আমি জানি যে ডিএফ সমস্ত ফাইল সিস্টেমের প্রতিবেদন করবে, তবে আমি ভাবছিলাম যে কেবলমাত্র ডিরেক্টরিটি চালু করার পার্টিশনের জন্য ফাঁকা স্থান পাওয়ার কোনও উপায় ছিল কিনা?

সম্পাদনা করুন - আমি উত্তরটি নিয়ে এসেছি

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

কিছুটা অদ্ভুত কারণ df টার্মিনাল ফিট করার জন্য এটির আউটপুট ফর্ম্যাট করে বলে মনে হচ্ছে, সুতরাং দীর্ঘ মাউন্ট পয়েন্টের নামের সাথে আউটপুটটি একটি লাইনের নীচে স্থানান্তরিত হবে


4
-Pপতাকাটি ব্যবহার করুন df, আপনি এটি সমস্ত এক লাইনে পাবেন।
মাদুর

5
du -hs .বর্তমান ডিরেক্টরিতে ব্যবহৃত ডিস্কের স্থানটি সম্পর্কিত ।
এখানে

@ ম্যাট যেমন বলেছে, আপনি যদি নিজের সমাধানটি নিয়ে যান তবে আপনি -P ব্যবহার করতে চাইবেন। অতীতে আমি অদ্ভুতভাবে ফর্ম্যাটেড বা দীর্ঘ নামযুক্ত পার্টিশনের মুখোমুখি হয়েছি যার ফলে স্ক্রিপ্ট ব্যর্থ হয়েছিল কারণ -P পতাকাটি অনুপস্থিত ছিল।
সুপারটেলম্যান

উত্তর:


204

হ্যাঁ:

df -k .

বর্তমান ডিরেক্টরি জন্য।

df -k /some/dir

আপনি যদি একটি নির্দিষ্ট ডিরেক্টরি পরীক্ষা করতে চান।

stat(1)আপনার সিস্টেমে এটি থাকলে কমান্ডটিও পরীক্ষা করে দেখতে চাইতে পারেন। আপনার স্ক্রিপ্টটির বিশ্লেষণ সহজ করার জন্য আপনি আউটপুট ফর্ম্যাটগুলি নির্দিষ্ট করতে পারেন। এখানে একটি সামান্য উদাহরণ:

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

তার জন্য ধন্যবাদ! স্ট্যাটটি আমার কাছে কিছুটা মন-উদ্দীপনা দেখাচ্ছে। ম্যান পৃষ্ঠাটি পড়ার পরামর্শ দেয় যে আমি আমার ডিএফ সংস্করণে -k চাই না, তবে পথটি কার্যকরভাবে সাহায্য করেছিল।
গ্রেগ রেইনল্ডস

আহ - এখন দেখছি আপনি কেন-কে ব্যবহার করেন, গণনা সহজ করে তোলে!
গ্রেগ রেইনল্ডস

1
জিনিসটি হ'ল প্রচুর সিস্টেমগুলি 512 বাইট ব্লকে ডিফল্ট হবে যদি আপনি উল্লেখ না করেন -k। (কোর্টিলস ডিএফ 1 ডি ব্লকের ডিফল্ট, সুতরাং আপনি লিনাক্সে যদিও বেশ সুরক্ষিত হন - তবে আপনার যদি কোরিউটিল থাকে তবে আপনার কাছে রয়েছে statএবং এটি আরও নিরাপদ - কোনও পার্সিংয়ের প্রয়োজন নেই)।
মাদুর

2
আমার রেড-হ্যাট কিছুতে বিন্যাসের স্ট্রিংটি এর %a*%sপরিবর্তে হওয়া উচিত %a*%S। আমি নিশ্চিত নই যে এটি কোনও পার্থক্য বা টাইপো কিনা।
আরএনএমএস

@ আরএনএমএস: রেডহ্যাটের ম্যান পেজ অনুসারে এটি (মূলধন) হওয়ার কথা%S%s != %Sখুব কম রেডহ্যাটগুলিতে আমার অ্যাক্সেস রয়েছে এমন কোনও ফাইল সিস্টেম সন্ধান করতে পারে না , তাই পরীক্ষা করতে পারবেন না :-(
মাদুর

43
  1. df কমান্ড: ফাইল সিস্টেম ডিস্ক স্থান ব্যবহারের রিপোর্ট করুন
  2. du কমান্ড: ফাইল স্পেস ব্যবহারের অনুমান

টাইপ করুন df -hবা df -kফ্রি ডিস্ক স্থান তালিকা করতে:

 $ df -h

অথবা

 $ df -k

du এক বা একাধিক ফাইল বা ডিরেক্টরিগুলি কতটা স্থান ব্যবহার করছে তা দেখায়:

 $ du -sh

-sবিকল্প স্থান একটি ডিরেক্টরি ব্যবহার করছে ও সংক্ষিপ্ত বিবরণ -hবিকল্প প্রদান করে মানব-পাঠযোগ্য আউটপুট।


24

আমি মনে করি এই খুব প্রশ্নে থিংকিংমিডিয়ার উত্তরের মন্তব্য বা সম্পাদনা হওয়া উচিত ( ব্যাশের বর্তমান পার্টিশনের জন্য ফ্রি ডিস্কের স্থানটি পরীক্ষা করুন ) তবে আমার মন্তব্য করার অনুমতি নেই (আমার পক্ষে যথেষ্ট নয়) এবং আমার সম্পাদনা প্রত্যাখ্যান করা হয়েছে (কারণ: "এটি একটি মন্তব্য বা উত্তর হওয়া উচিত")। সুতরাং দয়া করে, এসও মহাবিশ্বের শক্তিগুলি, অন্য কারও "উত্তর" পুনরাবৃত্তি করতে এবং ফিক্স করার জন্য আমাকে তিরস্কার করবেন না। তবে ইন্টারনেটে কেউ ভুল ছিল! ™ এবং তারা আমাকে এটি ঠিক করতে দেয় না।

কোড

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

এর যথেষ্ট ত্রুটি রয়েছে: হ্যাঁ, এটি 50G50 হিসাবে আউটপুট মুক্ত হবে - তবে এটি 5.0M50 হিসাবে আউটপুট বা 3.4G34 15Kহিসাবে বিনামূল্যে বা 15 হিসাবে নিখরচায় আউটপুটও দেবে।

নির্দিষ্ট পরিমাণ ফ্রি ডিস্ক স্পেসের জন্য যাচাই করার উদ্দেশ্যে একটি স্ক্রিপ্ট তৈরি করতে আপনার যে ইউনিটটি আপনি পরীক্ষা করছেন তার বিষয়টি জানতে হবে। এটি সরান ( 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পতাকাটি ডিএফ / লিনাক্সের প্রতিটি সংস্করণে উপলব্ধ নয়।


সমস্ত ডিস্ট্রোদের নেই--output=avail
ইজমির রামিরেজ

1
ভাল পর্যবেক্ষণ। উত্তরের শেষ বাক্যটি ঠিক এটাই বলে। @ ইজমিরামিরেজ ;-)
trs


2

সার্ভারের মাউন্ট পয়েন্টটি নিরীক্ষণ করতে যে কেউ এটি ব্যবহার করতে চাইতে পারে তার পুরো উদাহরণ। এই উদাহরণটি / var / spool 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

লিনাক্সের জিবি বা টিবি'র নির্দিষ্ট ডিরেক্টরি ব্যবহারের জন্য কমান্ডটি হ'ল,

ডিএফ-এইচ / দির / অভ্যন্তরীণ_দির /

 or

ডিএফ-শ / দির / অন্তর্_দির /

এবং লিনাক্সের বিটগুলিতে নির্দিষ্ট ডিরেক্টরিটির ব্যবহার জানতে কমান্ডটি হ'ল

ডিএফ-কে / দির / অভ্যন্তরীণ_দির /


0

কমান্ড শেল টাইপ করুন:

 df -h 

অথবা

df -m

অথবা

df -k

এটি প্রতিটি মাউন্ট পয়েন্টের জন্য ফ্রি ডিস্ক স্পেসের তালিকা প্রদর্শন করবে।

আপনি একক কলামও প্রদর্শন / দেখতে পারবেন।

টাইপ করুন:

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

দ্রষ্টব্য: এখানে 3 টি কলাম নম্বর। আপনার কোন কলামটি প্রয়োজন তা চয়ন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.