I have a script that parses df into something that perl can use.
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 my @headers = qw(name size used free capacity mount);
6 my @df = `df -k`;
7 shift @df; # get rid of the header
8
9 my %devices;
10 for my $line (@df) {
11 my %info;
12 @info{@headers} = split /\s+/, $line; # note the hash slice
13 $info{capacity} = _percentage_to_decimal($info{capacity});
14 $devices{ $info{mount} } = \%info;
15 }
16
17 # Change 12.3% to .123
18 sub _percentage_to_decimal {
19 my $percentage = shift;
20 $percentage =~ s{%}{};
21 return $percentage / 100;
22 }
23 # Now the information for each device is in a hash of hashes.
24
25 # Show how much space is free in device /dev/ad4s1e
26 print $devices{"/production/log"}{free} ;
27 print "\n";
28 for my $info (values %devices) {
29 # Skip to the next device if its capacity is not over 60%.
30 next unless $info->{capacity} > .10;
31
32 # Print some info about each device
33 printf "%s is at %d%% with %dK remaining.\n",
34 $info->{mount}, $info->{capacity}*100, $info->{free};
35 }
However I keep getting these warnings.
Use of uninitialized value in substitution (s///) at ./get_df line 21.
Use of uninitialized value in division (/) at ./get_df line 22.
Use of uninitialized value in hash element at ./get_df line 15.
Use of uninitialized value in substitution (s///) at ./get_df line 21.
Use of uninitialized value in division (/) at ./get_df line 22.
Use of uninitialized value in hash element at ./get_df line 15.
Use of uninitialized value in substitution (s///) at ./get_df line 21.
Use of uninitialized value in division (/) at ./get_df line 22.
Use of uninitialized value in hash element at ./get_df line 15.
Use of uninitialized value in substitution (s///) at ./get_df line 21.
Use of uninitialized value in division (/) at ./get_df line 22.
Use of uninitialized value in hash element at ./get_df line 15.
Use of uninitialized value in substitution (s///) at ./get_df line 21.
Use of uninitialized value in division (/) at ./get_df line 22.
Use of uninitialized value in hash element at ./get_df line 15.
9006792
/production/log is at 70% with 9006792K remaining.
/ is at 37% with 17037532K remaining.
/production is at 11% with 13171728K remaining.
/export/home is at 24% with 11199904K remaining.
/production/archive is at 18% with 8095796K remaining.
/boot is at 28% with 68351K remaining.
UPDATE: I looked at the DF module on CPAN last night at home, but I would have to get sysadmin approval to get it installed. On the df the Filesystem is too long, so it gets printed to another line. This messed up the data dumper print out - some of the hash values get labeled undef.
casper@casperbox]:~/.wjohnson> df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
28313732 9816924 17035356 37% /
/dev/sda1 101086 27516 68351 29% /boot
tmpfs 2987896 0 2987896 0% /dev/shm
/dev/mapper/VolGroupPROD-ExportHome
15481840 3495504 11199904 24% /export/home
/dev/mapper/VolGroupPROD-Production
15481840 1523692 13171716 11% /production
/dev/mapper/VolGroupPROD-ProdLog
30963708 20410952 8979892 70% /production/log
/dev/mapper/VolGroupPROD-ProdArchive
10313016 1693640 8095500 18% /production/archive
[casper@casperbox]:~/.wjohnson>
[casper@casperbox]:~/.wjohnson>
[casper@casperbox]:~/.wjohnson>
[casper@casperbox]:~/.wjohnson>
[casper@casperbox]:~/.wjohnson> df -k | grep -v dev
Filesystem 1K-blocks Used Available Use% Mounted on
28313732 9816924 17035356 37% /
15481840 3495504 11199904 24% /export/home
15481840 1523692 13171716 11% /production
30963708 20410952 8979892 70% /production/log
10313016 1693640 8095500 18% /production/archive
[casper@casperbox]:~/.wjohnson>
From Data::Dumper - many of the hash values are coming up as undefined. is there a way that I could predefine the values of the hash. I want to learn to get rid of them.
$VAR1 = {};
Use of uninitialized value in substitution (s///) at ./get_df.just_capacity line 24.
Use of uninitialized value in division (/) at ./get_df.just_capacity line 25.
Use of uninitialized value in hash element at ./get_df.just_capacity line 17.
$VAR1 = {
'' => {
'free' => undef,
'mount' => undef,
'used' => undef,
'name' => '/dev/mapper/VolGroup00-LogVol00',
'capacity' => '0',
'size' => undef
}
};
$VAR1 = {};
$VAR1 = {
'' => {
'free' => undef,
'mount' => undef,
'used' => undef,
'name' => '/dev/mapper/VolGroup00-LogVol00',
'capacity' => '0',
'size' => undef
},
this is resolved by using df -k | grep -v var
- but there has to be a better way.