Hallo Liste, letztens fand ich in der Literatur folgendes Script: 1 #!/bin/sh 2 #fquota - Disk Analyse Tool for UNIX. 3 4 MAXDISKUSAGE=20 5 6 for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 999 { print $1 }') 7 do 8 echo -n "User $name - Belegter Platz: " 9 10 find /home -user $name -type f -ls | \ 11 awk '{ sum += $7 } END { print sum / (1024*1024) "MB" }' 12 13 done | awk "\$7 > $MAXDISKUSAGE {print \$0 }" 14 15 exit 0 bis Zeile 11 ist mir alles verständlich, funktioniert auch. Ich erhalte aber keine Ausgabe. Ändere ich Zeile 13um in 13 done | awk "\$7 < $MAXDISKUSAGE {print \$0 }" erhalte ich User nobody - Belegter Platz: 0MB User xyz - Belegter Platz: 1231,97MB dann wird aber "MAXDISKUSAGE" nicht berücksichtigt. Irgendwie verstehe ich Zeile 13 nicht. Woher weiß awk "\$7 ..." dass die Summe der Felder in Spalte 7 gemeint ist {sum += $7} Vielen Dank im Voraus -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Wednesday 27 December 2006 14:33, Lutz Kasper wrote:
letztens fand ich in der Literatur folgendes Script:
1 #!/bin/sh 2 #fquota - Disk Analyse Tool for UNIX. 3 4 MAXDISKUSAGE=20 5 6 for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 999 { print $1 }') 7 do 8 echo -n "User $name - Belegter Platz: " 9 10 find /home -user $name -type f -ls | \ 11 awk '{ sum += $7 } END { print sum / (1024*1024) "MB" }' 12 13 done | awk "\$7 > $MAXDISKUSAGE {print \$0 }" 14 15 exit 0
bis Zeile 11 ist mir alles verständlich, funktioniert auch. Ich erhalte aber keine Ausgabe. Ändere ich Zeile 13um in 13 done | awk "\$7 < $MAXDISKUSAGE {print \$0 }" erhalte ich User nobody - Belegter Platz: 0MB User xyz - Belegter Platz: 1231,97MB dann wird aber "MAXDISKUSAGE" nicht berücksichtigt.
Irgendwie verstehe ich Zeile 13 nicht. Woher weiß awk "\$7 ..." dass die Summe der Felder in Spalte 7 gemeint ist {sum += $7}
Der awk in Zeile 11 gibt die Summe in folgender Zeile aus: User xyz - Belegter Platz: 1231,97MB Der awk in Zeile 13 soll daraus die Zahl mit $MAXDISKUSAGE vergleichen und die Zeile nur ausgeben, wenn der Wert entsprechend grösser ist. Das Problem hier scheint wohl zu sein, dass die 7 nicht stimmt. 1 = "User" 2 = "xyz" 3 = "-" 4 = "Belegter" 5 = "Platz:" 6 = "1231,97MB" 7 = "" Änder Zeile 11, dass ein Leerzeichen vor MB steht, also " MB", dann ist: ... 6 = "1231,97" 7 = "MB" Und mach aus der 7 in Zeile 13 eine 6. -- Andreas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Mittwoch, 27. Dezember 2006 14:59 schrieb Andreas Winkelmann:
Der awk in Zeile 11 gibt die Summe in folgender Zeile aus:
User xyz - Belegter Platz: 1231,97MB
Der awk in Zeile 13 soll daraus die Zahl mit $MAXDISKUSAGE vergleichen und die Zeile nur ausgeben, wenn der Wert entsprechend grösser ist.
Das Problem hier scheint wohl zu sein, dass die 7 nicht stimmt.
1 = "User" 2 = "xyz" 3 = "-" 4 = "Belegter" 5 = "Platz:" 6 = "1231,97MB" 7 = ""
Änder Zeile 11, dass ein Leerzeichen vor MB steht, also " MB", dann ist: ... 6 = "1231,97" 7 = "MB"
Und mach aus der 7 in Zeile 13 eine 6.
-- Andreas
Klappt prima und vor allem kann ich mit der Erläuterung etwas anfangen. Lutz -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Lutz Kasper wrote:
[...]
Klappt prima und vor allem kann ich mit der Erläuterung etwas anfangen.
So ganz verstehe ich den Sinn des Skriptes nicht. Da ein User kaum ausserhalb seines eigenen Home-Verzeichnisses schreiben darf und auch nicht das wahre $HOME aus /etc/passwd genommen wird (sondern einfach der Username an /home angehaengt wird), sollte es da ein schlichtes du -sm /home/* 2>/dev/null | \ awk '$1>20 { printf("%s: size %dMB exceeds limit (20MB)\n",$2,$1) }' nicht auch tun? Auf alle Faelle ist ein Konstrukt wie cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 999 { print $1 }' unnoetig, da ein awk -F: '$3>999 { print $1 }' /etc/passwd das Gleiche auf einfacherere Weise liefert. Cheers, Th. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Andreas Winkelmann
-
Lutz Kasper
-
Thomas Hertweck