#!/usr/bin/perl ############################################################################### # # Copyright (c) 2009 Ramon Novoa # Copyright (c) 2009 Artica Soluciones Tecnologicas S.L. # # pandora_df Retrieve filesystem disk usage. By default information for all # filesystems is returned, but one or more filesystems may be # specified as command line parameters. If parameter start with # a '-', the filesystem is excluded from results. # # Sample usage: ./pandora_df tmpfs /dev/sda1 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # ############################################################################### use strict; # Retrieve information from all filesystems my $all_filesystems = 0; # Check command line parameters if ($#ARGV < 0) { $all_filesystems = 1; } # Parse command line parameters my %filesystems; my %excluded_filesystems; my $onlyexclude = 1; foreach my $fs (@ARGV) { if (substr($fs,0,1) eq '-') { $excluded_filesystems{substr($fs,1,)} = '-1%'; } else { $filesystems{$fs} = '-1%'; $onlyexclude = 0; } } if ($onlyexclude) { $all_filesystems = 1; } # Retrieve filesystem information # -P use the POSIX output format for portability my @df = `df -P`; shift (@df); # No filesystems? Something went wrong. if ($#df < 0) { exit 1; } # Parse filesystem usage foreach my $row (@df) { my @columns = split (' ', $row); exit 1 if ($#columns < 4); if (defined ($filesystems{$columns[0]}) || ($all_filesystems == 1 && !defined ($excluded_filesystems{$columns[0]}))) { $filesystems{$columns[0]} = $columns[4] ; } } while (my ($filesystem, $use) = each (%filesystems)) { # Remove the trailing % chop ($use); # Print module output print "\n"; print "\n"; print "\n"; print "\n"; print "% of usage in this volume\n"; print "\n"; } exit 0;