Juin 202011
 

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
}
 Publié par à 12 h 47 min  Taggué avec :

 Laisser un commentaire

Vous pouvez utiliser ces tags et attributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(requis)

(requis)

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.