#!/bin/bash # # Adapted from Eridan's "fs" (cleanup, enhancements and switch to bash/Linux) # JM, 10/12/2004 # # Integrated into Lain in september 2013 # https://github.com/copycat-killer/lain # Requires gawk # ------------------------------------------------------------------------- # Decoding options # ------------------------------------------------------------------------- USAGE="Usage: $0 [-h(elp)] | [-n(arrow mode)] | [-w(eb output)]" NARROW_MODE=0 WEB_OUTPUT=0 while [ $# -gt 0 ]; do case "$1" in "-h" ) echo $USAGE exit ;; "-d" ) DEBUG=1 ;; "-n" ) NARROW_MODE=1 ;; "-w" ) WEB_OUTPUT=1 ;; * ) echo $USAGE exit ;; esac shift done # ------------------------------------------------------------------------- # Preparations # ------------------------------------------------------------------------- SYSTEM=`uname -s` PATTERN="/" case "$SYSTEM" in "Linux" ) DF_COMMAND="/usr/bin/env df -k" SORT_COMMAND="/usr/bin/env sort -k6" AWK_COMMAND="/usr/bin/env awk" ;; * ) DF_COMMAND="/bin/df -k" SORT_COMMAND="/usr/bin/sort -k6" AWK_COMMAND="/usr/bin/env gawk" ;; esac # ------------------------------------------------------------------------- # Grabbing "df" result # ------------------------------------------------------------------------- DF_RESULT=`$DF_COMMAND` if [ ! -z $DEBUG ]; then echo "--> DF_RESULT:" echo "$DF_RESULT" echo "" fi # ------------------------------------------------------------------------- # Preprocessing "df" result, to join split logical lines # ------------------------------------------------------------------------- PREPROCESSING_RESULT=` \ echo "$DF_RESULT" | $AWK_COMMAND -v PATTERN=$PATTERN \ ' NF == 1 { printf ("%s", $0) } NF == 5 { printf ("%s\n", $0) } NF > 6 { } NF == 6 { printf ("%s\n", $0) }' ` if [ ! -z $DEBUG ]; then echo "--> PREPROCESSING_RESULT:" echo "$PREPROCESSING_RESULT" echo "" fi SORTED_FILE_SYSTEMS_INFO=`echo "$PREPROCESSING_RESULT" | $SORT_COMMAND` if [ ! -z $DEBUG ]; then echo "--> SORTED_FILE_SYSTEMS_INFO:" echo "$SORTED_FILE_SYSTEMS_INFO" echo "" fi # ------------------------------------------------------------------------- # Computing mount point max length # ------------------------------------------------------------------------- MOUNT_POINT_MAX_LENGTH=` \ echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v PATTERN=$PATTERN \ ' BEGIN { mount_point_length_max = 15; } END { printf ("%d", mount_point_length_max); } $0 ~ PATTERN { # printf ("$6 = %s\n", $6); mount_point = $6; # printf ("mount_point = %s\n", mount_point); mount_point_length = length (mount_point); # printf ("mount_point_length = %d\n", mount_point_length); if (mount_point_length > mount_point_length_max) mount_point_length_max = mount_point_length; }' ` if [ ! -z $DEBUG ]; then echo "MOUNT_POINT_MAX_LENGTH: $MOUNT_POINT_MAX_LENGTH" fi # ------------------------------------------------------------------------- # Computing mount point data max size # ------------------------------------------------------------------------- MOUNT_POINT_MAX_SIZE=` \ echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v PATTERN=$PATTERN \ ' BEGIN { mount_point_size_max = 0; } END { printf ("%d", mount_point_size_max); } $0 ~ PATTERN { # df -k shows k_bytes! # printf ("$2 = %s\n", $2); mount_point_size = $2 * 1024; # printf ("mount_point_size = %d\n", mount_point_size); if (mount_point_size > mount_point_size_max) mount_point_size_max = mount_point_size; }' ` if [ ! -z $DEBUG ]; then echo "MOUNT_POINT_MAX_SIZE: $MOUNT_POINT_MAX_SIZE" fi # ------------------------------------------------------------------------- # Let's go! # ------------------------------------------------------------------------- echo "$SORTED_FILE_SYSTEMS_INFO" | $AWK_COMMAND -v DEBUG=$DEBUG -v PATTERN=$PATTERN -v NARROW_MODE=$NARROW_MODE -v LEFT_COLUMN=$MOUNT_POINT_MAX_LENGTH -v MAX_SIZE=$MOUNT_POINT_MAX_SIZE -v SCALE=$SCALE -v WEB_OUTPUT=$WEB_OUTPUT \ ' # {printf ("$0 = %s\n", $0);} # {printf ("$1 = %s\n", $1);} # {printf ("PATTERN = %s\n", PATTERN);} # {printf ("LEFT_COLUMN = %s\n", LEFT_COLUMN);} BEGIN { k_bytes = 1024.0; m_bytes = 1024.0 * k_bytes; g_bytes = 1024.0 * m_bytes; t_bytes = 1024.0 * g_bytes; if (WEB_OUTPUT) { all_stars = "**************************************************"; current_date = strftime ("%d-%m-%Y @ %H:%M:%S", localtime (systime ())); free_threshold = 10; # % printf ("\n"); printf ( \ "\n" \ "
%s -- STATUS OF ALCOR FILE SYSTEMS
Mount point | \n" \ "%% Usato (*)" \ " - %% Free (*) | \n" \ "%% Used | \n" \ "Free | \n" \ "Total | \n" \ "