it-swarm.com.de

Überprüfen Sie den freien Speicherplatz für die aktuelle Partition in Bash

Ich schreibe einen Installer in Bash. Der Benutzer wechselt in das Zielverzeichnis und führt das Installationsskript aus. Daher sollte zunächst geprüft werden, ob genügend Speicherplatz vorhanden ist. Ich weiß, dass df alle Dateisysteme meldet, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, den freien Speicherplatz für die Partition zu erhalten, auf der sich das Zielverzeichnis befindet.

Bearbeiten - die Antwort, die ich gefunden habe

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

Etwas ungerade, da df seine Ausgabe an das Terminal anzupassen scheint, sodass bei einem langen Mount-Point-Namen die Ausgabe um eine Zeile nach unten verschoben wird

98
Greg Reynolds

Ja:

df -k .

für das aktuelle Verzeichnis.

df -k /some/dir

wenn Sie ein bestimmtes Verzeichnis überprüfen möchten.

Möglicherweise möchten Sie auch den Befehl stat(1) auschecken, wenn es in Ihrem System vorhanden ist. Sie können Ausgabeformate angeben, damit Ihr Skript leichter analysiert werden kann. Hier ist ein kleines Beispiel:

$ echo $(($(stat -f --format="%a*%S" .)))
170
Mat
  1. df-Befehl: Speicherplatznutzung des Dateisystems melden
  2. du-Befehl: Schätzt den Dateibereichsverbrauch

Geben Sie df -h oder df -k ein, um den freien Speicherplatz aufzulisten:

 $ df -h

OR

 $ df -k

du zeigt an, wie viel Speicherplatz eine oder mehrere Dateien oder Verzeichnisse belegen.

 $ du -sh

Die -s-Option fasst den Speicherplatz zusammen, den ein Verzeichnis verwendet, und die -h-Option bietet für Menschen lesbare output.

37
Girish

Ich denke, dies sollte ein Kommentar oder eine Bearbeitung der Antwort von ThinkingMedia auf diese Frage sein ( Überprüfen Sie den freien Speicherplatz für die aktuelle Partition in Bash ), aber ich darf nicht kommentieren (nicht genügend Wiederholungen) und meine Bearbeitung wurde durchgeführt abgelehnt (Grund: "Dies sollte ein Kommentar oder eine Antwort sein"). Bitte. Also, Kräfte des SO - Universums, verdammt mich nicht, weil ich die "Antwort" eines anderen wiederholt und repariert habe. Aber jemand im Internet hat sich geirrt! ™ und sie ließen mich nicht reparieren.

Der Code 

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

hat einen schwerwiegenden Fehler: Ja, es wird 50G free als 50 ausgegeben - aber es wird auch 5.0M free als 50 oder 3.4G free als 34 oder 15K free als 15 ausgegeben.

Um ein Skript zu erstellen, mit dem Sie nach einer bestimmten Menge freien Speicherplatz suchen können, müssen Sie die Einheit kennen, auf die Sie prüfen. Entfernen Sie es (wie sed im obigen Beispiel), die Zahlen machen keinen Sinn mehr.

Wenn Sie möchten, dass es funktioniert, müssen Sie Folgendes tun:

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;

Auch für ein Installationsprogramm ist df -k $INSTALL_TARGET_DIRECTORY möglicherweise sinnvoller als df -k "$PWD" Beachten Sie, dass das --output-Flag nicht in jeder Version von df/linux verfügbar ist.

19
trs

Ein vollständiges Beispiel für jemanden, der dies verwenden möchte, um einen Mountpunkt auf einem Server zu überwachen. In diesem Beispiel wird geprüft, ob/var/spool unter 5G ist, und die Person wird per E-Mail benachrichtigt:

  #!/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="[email protected]"
  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
Mike Q

Um die Verwendung des bestimmten Verzeichnisses in GB oder TB in Linux zu kennen, lautet der Befehl:

df -h/dir/inner_dir/ 

 or

df -sh/dir/inner_dir/

und um die Verwendung des spezifischen Verzeichnisses in Bits in Linux zu kennen, ist der Befehl:

df-k/dir/inner_dir/

1
ganesh hegde
df --output=avail -B 1 "$PWD" |tail -n 1

sie erhalten auf diese Weise Größe in Bytes. 

1
xerostomus

Geben Sie den Befehl Shell ein: 

 df -h 

oder 

df -m

oder 

df -k

Es wird die Liste der freien Speicherplätze für jeden Einhängepunkt angezeigt.

Sie können auch einzelne Spalten anzeigen/anzeigen. 

Art: 

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

Hinweis: Hier ist 3 die Spaltennummer. Sie können wählen, welche Spalte Sie benötigen.

0
Masud Sarker

Um den aktuellen freien Speicherplatz in lesbarer Form mit Buchstaben abzurufen. Im Folgenden wird der freie Speicherplatz für die aktuelle Partition ausgegeben, die Kopfzeile und die Buchstaben werden entfernt.

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

Ausgaben 50G frei als 50.

Um einen Teil des freien Speicherplatzes im Bash-Skript zu erstellen.

FREE=`df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'`
if [[ $FREE -lt 10 ]]; then
         # less than 10GBs free!
fi;
0
cgTag