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
}