====== dfh und duh ====== * Urspruenglicher Autor: Dirk Deimeke * Urspruengliches Datum: 24.06.2011 Da ich auf verschiedenen Unix- und Linux-Versionen unterwegs bin und gerade die Unix-Systeme den Parameter "-h" (human-readable) bei df (disk free) und du (disk usage) nicht kennen, habe ich mir einen kleinen Wrapper in Perl geschrieben, um das einheitlich unter allen Systemen nutzen zu koennen. Aufgerufen werden die Skripte mit ''duh x'' ("x" kann benutzt werden, muss aber nicht, dann gilt das aktuelle Verzeichnis, Wildcards sind auch möglich) und ''dfh x'' (Wildcards erlaubt, bei Weglassen wird die normale Ausgabe von ''df'' durchlaufen). Grundlage der Skripte ist die Funktion ''to_human_readable'', die aus einer Zahl das entsprechende Pendant in den [[https://secure.wikimedia.org/wikipedia/de/wiki/Bin%C3%A4rpr%C3%A4fix|Binaerpraefixen]] kibi, mebi, gibi, Tebi und pebi macht. sub to_human_readable( $ ) { my ($number) = @\_; my @postfix = qw( k M G T P ); my $post; my $divide = 1; foreach (@postfix) { $post = $_; last if (($number / ($divide * 1024)) < 1); $divide = $divide * 1024; } $number = int($number/$divide + 0.5); return $number . $post; } Dann sind da noch die beiden Funktionen ''trimlengthleft'' und ''trimlengthright'', die links oder rechts Leerzeichen anfuegen, wenn die Laenge nicht erreicht ist bzw. den Text abschneiden, wenn die Laenge uerberschritten ist. sub trimlengthright ( $$ ) { my ($txt, $len) = @\_; if ( length($txt) >= $len ) { $txt = substr($txt,0,$len - 1) . " "; } else { $txt = $txt . " " x ($len - length($txt)); } return $txt; } sub trimlengthleft ( $$ ) { my ($txt, $len) = @\_; if ( length($txt) >= $len ) { $txt = substr($txt,0,$len - 1) . " "; } else { $txt = " " x ($len - length($txt)) . $txt; } return $txt; } Der Unterschied beider Skripte liegt an der Schleife, die durchlaufen wird, hier ist ''dfh'': #!/usr/bin/env perl -w use strict; my @line; sub to_human_readable( $ ) { # wie oben } sub trimlengthright ( $$ ) { #wie oben } sub trimlengthleft ( $$ ) { # wie oben } open(DF,"df -k @ARGV |"); while () { @line = split; next if $line[0] eq "Filesystem"; print &trimlengthright($line[0],50); # filesystem print &trimlengthleft(&to_human_readable($line[1]),6); # total print &trimlengthleft(&to_human_readable($line[2]),6); # used print &trimlengthleft(&to_human_readable($line[3]),6); # free print &trimlengthleft($line[4],5); # used percent print " ",$line[5],"\n"; # mount point } close DF; Und hier kommt ''duh'': #!/usr/bin/env perl -w use strict; my @line; sub to_human_readable( $ ) { # wie oben } sub trimlengthright ( $$ ) { #wie oben } sub trimlengthleft ( $$ ) { # wie oben } open(DU,"du -ks @ARGV | sort -n |"); while () { @line = split; print &trimlengthleft(&to_human_readable($line[0]),5)," "; # size print &trimlengthright($line[1],70),"\n"; # directory } close DU; [[adminstoriesartikel|Zurück zur Uebersicht]]