So drucken Sie den Prozentsatz der Festplattenbelegung aus "df -hl"

12

Ich weiß, dass df -hleine Liste aller meiner Partitionen mit Größe, Auslastung in Prozent und verfügbarem Speicherplatz ausgegeben wird.

Wenn ich nur die Größe und die Auslastung als Prozentsatz von ausgeben wollte sda2und sda3zum Beispiel, wie könnte ich Linux (Ubuntu) anweisen, sie zu überprüfen, zu summieren und mir zu zeigen?

user32398
quelle
1
Die folgenden Antworten könnten vereinfacht werden, indem der Befehl df geändert wird, mit dem die Datenträger in die Befehlszeile df gestellt werden, anstatt alle Datenträger zu analysieren. dh df -hl / dev / sda [23]
mdpc

Antworten:

11

Für dfzu berechnen Summen, verwenden Sie die --totalsOption. Wenn Sie die Gesamtsummen nur für einige ausgewählte Laufwerke verwenden möchten, geben Sie sie als Argumente an.

Beispiele (und Ausgabe von meinem Computer)

Dies ist die Summe für alle lokalen Reittiere:

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%

Beschränkung auf wenige Laufwerke (Beachten Sie, dass der nächstgelegene Einhängepunkt verwendet wird, wenn der angegebene Pfad kein genauer Einhängepunkt ist [siehe Hinweis am Ende] ):

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%

oder mit devNamen:

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%

Weitere Anpassung

Wenn Sie alle Bereitstellungen mit Ausnahme der speziellen Bereitstellungen auflisten möchten, können Sie sie mithilfe der -xOption nach Partitionstyp ausschließen. (Verwenden Sie die -TOption, um die Typen anzuzeigen.)

Persönlich verwende ich für die interaktive Verwendung den folgenden Bash-Alias ​​(hinzugefügt ~/.bash_aliases), um die "nicht-physischen" Reittiere auszuschließen.

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

Hinweis

Das Angeben von Pfaden innerhalb von Einhängepunkten kann manchmal zu unterschiedlichen Ergebnissen führen, wenn der genaue Pfad zum Einhängepunkt angegeben wird. Zum Beispiel verwende ich auf meinem Laptop sshfs, um meinen (lokalen) Dateiserver einzuhängen.

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root

Der Server root ( /) ist unter gemountet ~/.server-root. Auf dem Server sind jedoch Datenträger gemountet /disks/*, von denen df(auf dem Laptop) nichts bekannt ist.

Offensichtlich dfkann die Datenträgerverwendung auf den verschiedenen Bereitstellungen auf dem Server aufgeführt werden, wenn die richtigen Pfade angegeben werden. Es wird jedoch für alle Pfade dasselbe „Dateisystem“ und „Mounted on“ angezeigt, da (glaube ich) dies der einzige Mount-Punkt (in Bezug auf diesen sshfsMount) in der lokalen Kernel-Mount-Tabelle ist.


Eine andere Sache: Nicht wirklich mit der Frage verbunden, sondern mit einer vorherigen Antwort auf die Frage.

Das Aufsummieren der Zahlen mit einem awkSkript (oder ähnlichem), wie es einige zuvor veröffentlichte Antworten tun, ist keine gute Idee, wenn Sie die -hFlagge verwenden. Dies liegt daran, dass eine besondere Behandlung erforderlich ist. Sie können nicht nur size+=$2;für ein Feld 418Min einer Reihe und 12Gin einer anderen Reihe etwas Nützliches daraus machen ...

Für ein Beispiel mit awkHinzufügen 500Mzu 10.2GAusbeuten

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

510,2 von was?

Hier liegt eindeutig ein Problem vor. Dies ist nur ein Tipp, den Sie sich merken sollten , wenn Sie (automatisierte) Berechnungen für die Ausgabe von df (und anderen, die 'vom Menschen lesbare' Zahlen verwenden können) durchführen . Stellen Sie sicher, dass Sie das Flag nicht verwenden -hund die Eingabe in das Berechnungsskript stattdessen normalisiert ist (z. B. auf Bytes, Blöcke, KBs oder was auch immer), und führen Sie am Ende die "Anzeigeskalierung" durch . In den meisten Skript- und Programmiersprachen ist es nicht schwer, Folgendes hinzuzufügen:

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)

in den Wert in Bytes ist und Schwelle ein Wert in der Größenordnung von 1000. Das Ergebnis dieser Methode ist , ist , dass man ganz einfach einstellen kann ihn gedruckt Werte erzeugen (ohne Vorzeichen) in einem gewünschten Bereich und mit einer Anzahl von signifikanten Ziffern auf Ihre wählen. Im Vergleich zu Standarddienstprogrammen mit -hSwitches, bei denen das Format häufig festgelegt ist.

Natürlich kann diese Berechnung oft effizienter und / oder eleganter gestaltet werden, aber das ist eine Frage für die spezifische Sprache, in der sie geschrieben ist. Ehrlich gesagt, wenn sie in einem Benutzerskript verwendet wird, das nur ab und zu zum interaktiven Anzeigen ausgeführt wird Einige Informationen, Effizienz ist nicht wirklich ein Anliegen.

Johan E
quelle
4

Ich denke, Sie wollten die Summe von beidem sizeunduse%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
pradeepchhetri
quelle
Das gleiche wie oben.
User32398
@ user32398: Es gibt Unterschiede Alter.
Pradeepchhetri
Am Ende meiner Antwort auf diese Frage habe ich ein wenig dargelegt, warum ich diese Frage nicht (nur size+=$1) mit einem simplen awk-Ansatz beantworten sollte. Diese Methode ist wirklich nicht kompatibel mit der -hOption von df.
Johan E
2

Sie würden ein Tool verwenden wie awk:

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

Wo:

  • /^\/dev\/sd[ab]/ist ein Muster zum Filtern nur der Zeilen, die mit /dev/sdaoder beginnen/dev/sdb
  • { sum+=$5 } Fügen Sie das fünfte Feld für Übereinstimmungen mit dem obigen Muster hinzu

Einige hilfreiche awkReferenzen finden Sie im Awk.info-Wiki .

jasonwryan
quelle
Ich denke, es ist nicht genug, um die% zu summieren, aber danke, ich verstehe die Idee.
User32398
1
sudo df -hl | grep 'mountdirname' | awk '{print $5}'
sandeep
quelle
1
Er fragte nach size, % usedund available. Nicht nur% verwendet. @Mdpc hat auch eine bessere Methode zum Herausgreifen des Laufwerks, aber wenn Sie eine df -hl | awk '/sda2/{print $2,$5,$4}'
Musterübereinstimmung
0

Wenn Sie es mit Warnungen wollten, mache ich es mit IFTTT, Telegramm und WebHooks (was alles kostenlos ist)

#!/bin/bash
diskusage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom|mmcblk0p1' | awk '{ print $5 " " $1 }'| cut -f1 -d '%')
hostname=$(hostname)
tolerance=(85)
date=$(date)

if [[ "$diskusage" -gt "$tolerance" ]]
        then
        echo ""
        echo total disk usage is $diskusage%
        echo ""
        curl -X POST -H "Content-Type: application/json" -d '{"value1":"--Alert--","value2":"Total disk usage is '$diskusage'% ","value3":"Host information: '$hostname' "}' https://maker.ifttt.com/trigger/{alert}/with/key/PutYourKeyHEre
fi
echo ''
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date >> /var/log/IFTTT/checkdiskspace.log
pooley999
quelle