PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : df -h verfügbarer Speicher in script auswerten?



boesi666
02.12.11, 07:43
Moinzusammen.

ich kenn ja den df -h befehl und auch den grep befehl gajnz gut (nicht perfekt)

aber ich weiss nicht wie ich es hinbekomme, dass ich die anzeige der freien megabytes oder die Prozentzahl so aus der anzeige von df -h filtern kann, um dies in eine variable zu schieben mit der ich arbeiten kann. ich will eben verhindern damit, dass ein großes tar archiv gepackt wird, wenn die festplatte bald voll ist

das geht bestimmt mit cryptischen befehlen irgendwie.

mit vb6 hab ich eine textdatei wo der ihnalt von df-h drin steht schon prima auswerten können aber unter der shell von linux fehlt mir so der letzte schliff, dass auch hinzubekommen
danke im voraus für eure tipps!!!

marce
02.12.11, 08:17
weil heute Freitag ist mal eine hoffentlich allgemeingültige Komplettlösung:

df -h | tr -s [:space:] | cut -d\ -f4

HirschHeisseIch
02.12.11, 08:22
[[ $(df -B 1M | grep "DEVICE" | awk '{printf $4}') -gt PLATZ ]] && ERSTELLE TAR-ARCHIV || echo "Es steht nicht genügend Speicherplatz zur Verfügung"

DEVICE und PLATZ sowie "ERSTELLE TAR-ARCHIV" müssen entsprechend der Verhältnisse angepasst werden.


df -B 1M
"Das übliche" df-Listing mit Blockgröße 1 Mebibyte

grep "DEVICE
Nur das Device, welches von Belang ist.

awk '{printf $4}') nur das vierte Feld (Verfügbarer Speicher) ist interessant. Awk spuckt nur dieses aus.

[[ Befehls-Konstrukt -gt PLATZ ]]
Teste, ob der Rückgabe-Wert des Befehls-Konstruktes größer ist als PLATZ (ebenfalls in MiB anzugeben)
Ist der Rückgabe-Wert größer als PLATZ, hat test ([[ ist ein anderer aufruf für test) den Exit-Status 0, sonst 1.

&& ERSTELLE TAR-ARCHIV
Bei Exit-Status 0, führe Befehl "ERSTELLE TAR-ARCHIV" aus

|| echo ...
Bei Exit-Status 1, gib aus, dass der Speicherplatz nicht ausreicht.

Aqualung
02.12.11, 08:37
Willst Du deine tar-Erstellung abhängig von der relativen Belegung des FS?


[[ $(df -h /dev/sda6 | awk '{print $5}' | tail -1 | tr -d '%') -lt 90 ]] && echo tar || echo "platte voll"
(tail -1 wg. Kopfzeile von df)

Das Bsp. geht von max. 90% Belegung aus.

rot-unterlegte Inhalte musst Du durch eigene ersetzten.

boesi666
02.12.11, 10:46
boah, coole Lösungsansätze!!!

Also habe jetzt folgende varianten durchgespielt und hoffentliich richtig verstanden:

1.: Wenn sdb 67% schon voll ist, dann sage ich mit:
[[ $(df -h /dev/sdb1 | awk '{print $5}' | tail -1 | tr -d '%') -lt 70 ]] && echo "nochwasfrei" || echo "platte voll"

dass ich mind 70% freien speicher haben will, damit ich als ergebnis "nochwasfrei" bekomme. wenn lt <= 60 angegeben wäre, würde als ergebnis festplatte voll rauskommen...

(noch mal geändert:)

das isoben war ganz perfekt:

das sagt:
[[ $(df -B 1M | grep /dev/sdb1 | awk '{printf $4}') -gt 5000 ]] && echo "kannlosgehen" || echo "Es steht nicht genügend Speicherplatz zur Verfügung"
dass ich mind 5000 mb freien speicher brauche um fortzusetzen. Klasse lösung!! Danke

PS: Das einziger was mir noch aufgefallen ist: dieser Befehl mit den [[ und ]] Klammern geht nur , wenn das shell script mit #/bin/bash (und nicht mit #/bin/sh) aufgerufen wird.

da muss ich kucken, ob der rest wenn ich das so ändere auch noch klappt...

HirschHeisseIch
02.12.11, 19:08
Du könntest es mit einfachen [ und ] versuchen. Bin mir nicht sicher. /bin/sh ist hier ein Link auf /bin/bash.

pferdefreund
05.12.11, 11:06
/bin/sh ist oft ein Link aus /bin/bash - aber je nachdem, wie die aufgerufen wird, reagiert die
teilweise anders - so wird bei mir z. B .bashrc bei sh nicht gelesen (richtigerweise).

403
10.12.11, 12:47
[[..]] ist ein bashism.
test $(df -h /dev/sda2 | awk '/[0-9]+%/{ gsub("%","");print $5}') -lt 90 && echo ok