adminstoriesdfhundduh

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

adminstoriesdfhundduh [20120823 10:00] (aktuell)
Dirk Deimeke angelegt
Zeile 1: Zeile 1:
 +====== 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.
 +
 +<code perl>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;
 +}</code>
 +
 +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.
 +
 +<code perl>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;
 +}</code>
 +
 +Der Unterschied beider Skripte liegt an der Schleife, die durchlaufen wird, hier ist ''dfh'':
 +
 +<code perl>#!/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 (<DF>) {
 + @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;</code>
 +
 +Und hier kommt ''duh'':
 +
 +<code perl>#!/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 (<DF>) {
 + @line = split;
 + print &trimlengthleft(&to_human_readable($line[0]),5)," "; # size
 + print &trimlengthright($line[1],70),"\n"; # directory
 +}
 +close DU;</code>
 +
 +[[adminstoriesartikel|Zurück zur Uebersicht]]
  • adminstoriesdfhundduh.txt
  • Zuletzt geändert: 20120823 10:00
  • von Dirk Deimeke