script permettant un affichage amélioré de : bdf
bdf affiche généralement sur 2 ligne une info concernant un point de montage si celui-ci dépasse 80 caractère, ce qui est souvent le cas.
ce script affiche chaque enregistrement sur une seule ligne, avec en sus, des infos comme le nombre d’inodes et le type de filesystème.
la version perl de ce script fonctionne très bien.
cependant, perl n’est pas présent sur tout les serveurs.
voici donc la version ksh.
Download : bdfa.sh
#!/bin/ksh ##---------------------------------------------------------------------------- # ATTENTION : Pour lecture plus clair tapez :tabstop=3 sous vi ou positionner # --------- "set tabstop=3" dans le fichier ".exrc" ## Script : bdfa ## Version : 2.0.0 ## Objet : Formatage de la commande bdf. ## Auteur : Cedrick GAILLARD ##---------------------------------------------------------------------------- # 1.0.0 27-oct-06 - Cedrick - Creation # 1.0.1 19-mar-07 - Cedrick - Ajout du PATH # 1.1.0 19-mar-07 - Cedrick - modification du script en profondeur # pour une selection du/des chemin(s) plus vaste. # 2.0.0 02-jul-08 - Cedrick - reecriture quasi complete avec apparition de: # - taille affichees du Ko jusqu'au Yo # - plus de doublon sur les FS nfs # - amelioration syntaxique # 2.0.1 30-jul-08 - Cedrick - modification du code pour corriger les problemes suivants: # - bdfa ne remontait pas jusqu'a la racine lors de: bdfa /somedir # - bdfa ne prenais pas bien en compte le repertoire "." # 2.0.2 02-avr-09 - Cedrick - Utilisation de df pour localiser le point de montage. # 2.1.0 13-aou-09 - Cedrick - le metrique (M,G,Y,Etc...) est sur un caractere maintenant. # - ajout du total de tout les FS en fin de calcul # - correction de l'anayse des chemins donnes en argument. # 3.0.0 21-sep-09 - cedrick - reecriture complete. # - beaucoup plus rapide. # - affichage du total si plus d'un FS. # - accepte tous les arguments de bdf. # #----------------------------------------------------------------------------- ## ## Ce script permet d'afficher la sortie d'un bdf sans chevauchement de ligne ## l'option -i de bdf est utilisee ce qui permet d'afficher des informations ## sur les inodes. ## [ "$(uname -s)" != "HP-UX" ] && { echo "Erreur: script indisponible pour [ $(uname -s) ]." exit } # Initialisations SUFFIXES="KMGTPEZY" MAX_SUFF=${#SUFFIXES} # On recupere la sortie du bdf et on met sur une ligne ce qui doit l'etre BDF_OUTPUT=$(bdf -i $@ |tail +2 |sed -e '/^[^ ][^ ]*$/{ N s/[ ]*\n[ ]*/ / }') # On recupere les types de FS presents mont�s sur le systeme MNT_OUTPUT=$(awk '{if($3 ~ "^"autofs"$") {next} else {printf("%s %s\n",$1, $3)}}' /etc/mnttab) #------------------------------------------------------------------------------# # Fonction retournant les nombres convertis avec leur suffixe. # calc_number () { NUMBER=$1 ITERATION=1 while [ "$NUMBER" -gt "1023" ] do [ "$ITERATION" -ge "$MAX_SUFF" ] && break ITERATION=$(($ITERATION + 1)) NUMBER=$(echo "scale=2; $NUMBER / 1024" |bc) done NUMBER=$(printf "%.2f" $NUMBER) [ -n "$(echo "$NUMBER" |fgrep ".00")" ] && { NUMBER=$(printf "%.0f" $NUMBER) } echo "${NUMBER}$(echo $SUFFIXES |cut -c${ITERATION})" } # # Fin - calc_number #------------------------------------------------------------------------------# #------------------------------------------------------------------------------# # affiche le resultat # printf_data () { if [ "${#}" -gt "4" ] then printf "%-${LENGTH_LV}s %8s %8s %8s %5s %8s %8s %5s %5s %s\n" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}" else printf "%${LENGTH_LV}s %8s %8s %8s\n" $1 $2 $3 $4 fi } # # Fin - printf_data #------------------------------------------------------------------------------# # On compte le nombre de caracteres du premier champ avec awk LENGTH_LV=$(echo "${BDF_OUTPUT}" |awk 'BEGIN{name=0} { if(length($1) > name) { name=length($1) } } END { print name }') # Affichage de l'En-tete printf_data 'File System' Size Used Avail '%Used' Inodes Ifree '%IUsed' Type '%Mounted On' TSIZE=0 TUSED=0 TAVAIL=0 # On met en forme echo "${BDF_OUTPUT}" |while read LVOL SIZE USED AVAIL PUSED IUSED IFREE IUSE MOUNTED do TSIZE=$(($TSIZE + $SIZE)) TUSED=$(($TUSED + $USED)) TAVAIL=$(($TAVAIL + $AVAIL)) SIZE=$(calc_number $SIZE) USED=$(calc_number $USED) AVAIL=$(calc_number $AVAIL) # Type de FS FS_TYPE=$(echo "$MNT_OUTPUT" |grep "^$LVOL " |cut -d" " -f2) printf_data $LVOL $SIZE $USED $AVAIL $PUSED $IUSED $IFREE $IUSE $FS_TYPE $MOUNTED done # Affichage du total si plusieurs FS affiches [ "$(echo "${BDF_OUTPUT}" |wc -l)" -gt "1" ] && { TSIZE=$(calc_number $TSIZE) TUSED=$(calc_number $TUSED) TAVAIL=$(calc_number $TAVAIL) printf_data -------- -------- -------- -------- printf_data "Total:" $TSIZE $TUSED $TAVAIL }