neo_philiac
06-13-2008, 04:02 PM
I am trying to do a simple script for disk usage but I cant get the nfs mounts. Here is the code i found. The problem if that this parses every line but if you do df the big mount paths show up in the second line. How do I fix this problem?
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d0p1 99188468 5442116 88626440 6% /
/dev/cciss/c0d0p3 736300856 2363176 695932308 1% /home
tmpfs 1031284 0 1031284 0% /dev/shm
xx.xx.xx.xx:/usr/users
309811104 251185312 55527680 82% /usr/users
/dev/sr0 3510680 3510680 0 100% /media
/dev/sr0 3510680 3510680 0 100% /dvd
xx.xx.xx.xx:/disk/disk1
480719104 202752 456097280 1% /data/disk1
xx.xx.xx.xx:/disk/disk2
480719104 324577792 131722240 72% /data/disk2
xx.xx.xx.xx:/media
#!/usr/bin/perl
use strict;
sub makeeasy{
my $size = shift;
$size *= 1024;
if($size > 1024){if($size > 1048576){if($size > 1073741824){$size = (int(($size / 1073741824) * 100) / 100) . ' GB';}else{$size = (int(($size / 1048576) * 100) / 100) . ' MB';}}else{$size = (int(($size / 1024) * 100) / 100) . ' KB';}}else{$size = $size . ' B';}
return $size;
}
my (%used,%available);
my $dir = "/home";
my $df = `df`;
my $otherused = 0;
my $otheravailable = 0;
my($actualpath,$totalspace,$usedspace,$availablespace,$usedpercent,$mountedon,$line);
while($df =~ m/\ \ /){$df =~ s/\ \ / /g;}
foreach $line (split("\\n",$df)){
($actualpath,$totalspace,$usedspace,$availablespace,$usedpercent,$mountedon) = split(' ',$line);
if($mountedon =~ m/^\//){
$used{$mountedon} = $usedspace;
$available{$mountedon} = $availablespace;
}
}
foreach $mountedon (keys(%used)){
print "Used space on $mountedon\: " . makeeasy($used{$mountedon}) ."\n";
print "Available space on $mountedon\: " . makeeasy($available{$mountedon}) ."\n";
}
Thanks
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/cciss/c0d0p1 99188468 5442116 88626440 6% /
/dev/cciss/c0d0p3 736300856 2363176 695932308 1% /home
tmpfs 1031284 0 1031284 0% /dev/shm
xx.xx.xx.xx:/usr/users
309811104 251185312 55527680 82% /usr/users
/dev/sr0 3510680 3510680 0 100% /media
/dev/sr0 3510680 3510680 0 100% /dvd
xx.xx.xx.xx:/disk/disk1
480719104 202752 456097280 1% /data/disk1
xx.xx.xx.xx:/disk/disk2
480719104 324577792 131722240 72% /data/disk2
xx.xx.xx.xx:/media
#!/usr/bin/perl
use strict;
sub makeeasy{
my $size = shift;
$size *= 1024;
if($size > 1024){if($size > 1048576){if($size > 1073741824){$size = (int(($size / 1073741824) * 100) / 100) . ' GB';}else{$size = (int(($size / 1048576) * 100) / 100) . ' MB';}}else{$size = (int(($size / 1024) * 100) / 100) . ' KB';}}else{$size = $size . ' B';}
return $size;
}
my (%used,%available);
my $dir = "/home";
my $df = `df`;
my $otherused = 0;
my $otheravailable = 0;
my($actualpath,$totalspace,$usedspace,$availablespace,$usedpercent,$mountedon,$line);
while($df =~ m/\ \ /){$df =~ s/\ \ / /g;}
foreach $line (split("\\n",$df)){
($actualpath,$totalspace,$usedspace,$availablespace,$usedpercent,$mountedon) = split(' ',$line);
if($mountedon =~ m/^\//){
$used{$mountedon} = $usedspace;
$available{$mountedon} = $availablespace;
}
}
foreach $mountedon (keys(%used)){
print "Used space on $mountedon\: " . makeeasy($used{$mountedon}) ."\n";
print "Available space on $mountedon\: " . makeeasy($available{$mountedon}) ."\n";
}
Thanks