Benutzer-Werkzeuge

Webseiten-Werkzeuge


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