(Courriels de diversion: <maintiendrions@merites-repensons.com> <epaississement@feutrer-adverbiaux.com> <commanditer@bacteriologie-numeroterait.com> <postiches@taille-issues.com> <benir@surmenerez-cariaient.com> <vouvoieront@tournebroche-enrobions.com> <voua@rarefieraient-dogmatiques.com> <devoile@egides-empesant.com> <absorbaient@terrassent-expeditifs.com> <coagulerais@elinguer-suspensions.com> )
Le Tue, 21 Dec 2004 01:36:23 +0100
jeanmichel.123@free.fr écrivait :
#!/bin/bash
# Distributed under the terms of the GNU General Public License v2
#Ce script a été créé pour répondre au besoin du CULTe (LUG de toulouse)
# http://www.culte.org
#Ce script donne certaines des caractéristiques principales d'une
machine.
#auteur: Jean-Michel Gay
#date: 21 décembre 2004
# TODO: man page
#
# Change History:
# 0.1 :
# Philippe Coulonges (cphil@cphil.net)# Introduction du changelog
# Parsing des paramètres
# Traitement du mode verbose
# Traitemenent du help
# Différentiation dans la détection de la distrib
# Ajout du mode texte
# Ajout de l'option de fichier de sortie
# Passage en mode texte par défaut (mieux sur la sortie standard)
program_name=`basename $0`
program_version="0.1"
#on ne genre que du html; pas de texte
OUTPUT=txt
FILE=`hostname`
verbose=0
#########" Routines générales
vecho()
{
if [ 1 = $verbose ]; then
echo $program_name: "$1" 1>&2;
fi
}
version()
{
echo "$program_name $program_version"
exit 0
}
aide()
{
echo "\
Usage: $program_name [OPTION]
Détecte la configuration de la machine
-h, --help affiche l'aide
-o fichier sélectionne un fichier de sortie
-t type sélection le type de la sortie.
types valides : txt html
-v mode verbeux (plus de messages)
--version affiche la version du programme "
exit 0
}
# loop over arguments
while [ $# -ne 0 ]; do
case "$1" in
-o)
shift
FILE=$1
;;
-t)
shift
if [[ html = $1 ||txt = $1 ]]
then
OUTPUT=$1
else
echo "Type $1 non reconnu"
exit 0
fi
;;
-h)
aide
;;
--help)
aide
;;
--version)
version
;;
-v)
verbose="1"
;;
*)
aide
;;
esac
shift
done
#########" Routines HTML
#html:balise de début de table
html_tab_start ()
{
if [ html = $OUTPUT ]
then
echo "<table>"
fi
}
#html:balise de fin de table
html_tab_stop ()
{
if [ html = $OUTPUT ]
then
echo "</table>"
fi
}
#html:balise internes à la table
html_tab_line ()
{
if [ html = $OUTPUT ]
then
echo "<tr>"
echo "<td>"
fi
echo $1
if [ html = $OUTPUT ]
then
echo "</td>"
echo "<td>"
fi
echo $2
if [ html = $OUTPUT ]
then
echo "</td>"
echo "</tr>"
fi
}
#html: création d'une table d'une ligne
html_make_sample_table ()
{
html_tab_start
sed 's!^\(.*\)$!<tr><td>\1</td></tr>!g' |
sed 's!:!</td><td>!g'
html_tab_stop
}
# création d'une table d'une ligne
make_sample_table ()
{
if [ html = $OUTPUT ]
then
html_make_sample_table
else
cat
fi
}
#indentation d'un flux
indent ()
{
if [ html = $OUTPUT ]
then
if [ text2 = "$1" ]
then
sed 's!^\(.*\)$!\ \ \ \1<br />!g'
fi
cat
else
sed "s/^/ /g"
fi
}
#affichage d'un titre de section
section ()
{
echo
if [ html = $OUTPUT ]
then
echo "<h4>"
fi
echo $1 :
if [ html = $OUTPUT ]
then
echo "</h4>"
fi
}
#########" Routines de détéction
#détection du système
#Donne la version du noyau, et le nom de la distribution
#note: j'ai un doute sur le issu. Dans mon cas, ca donne Mandrake 10.
#TODO : changer
detect_sys ()
{
kern=`uname -r `
# On teste d'abord /etc/distrib-release
distro_version_file=`find /etc -name *-release`
vecho $distro_version_file
# Si ça marche pas, on essaye d'autres trucs connus
# pour deviner la distrib
if [ ! -f $distro_version_file ]
then
[ -f /etc/slackware-version ] &&
distro_version_file="/etc/slackware-version"
[ -f /etc/debian_version ] &&
distro_version_file="/etc/debian_version"
fi
syst_lsb='Distribution non basée sur la linux standard base'
# Une fois détectée, on applique un traitement adapté
if [ -f $distro_version_file ]
then
distro_version=`cat $distro_version_file`
case "$distro_version_file" in
/etc/lsb-release)
syst_lsb=`cat | grep "ID" `
syst_lsb="$syst_lsb",`cat /etc/lsb-release | grep
"RELEASE" `
distro="";;
/etc/redhat-release)
distro="redhat"
;;
/etc/mandrake-release)
distro="mandrake"
;;
/etc/gentoo-release)
distro="gentoo"
;;
/etc/slackware-version)
distro="slackware"
;;
/etc/debian_version)
distro="debian"
;;
*)
distro="inconnue"
;;
esac
else
distro="inconnue"
fi
vecho "distribution : $distro"
html_tab_start
html_tab_line "noyau" "$kern"
html_tab_line "système LSB " "$syst_lsb"
html_tab_line "système" "$syst"
html_tab_stop
}
#detection du cpu
#en se basant sur les infos de /proc
detect_cpu ()
{
cat /proc/cpuinfo |
grep -e "^\(model name\|cpu MHz\|bogomips\)"
}
#détéction de la mémoire RAM.
detect_mem ()
{
cat /proc/meminfo |
grep "MemTotal"
#experimental: semmble détécter les barettes!
cat /proc/mtrr | sed "s!^.*size=\(.*\):.*write-\(.*\),.*!\2 : \1!g" |
sed "s/back/barette/g" |
sed "s/combining/video/g"
}
#detection des modules ''hard''
#En fait, on ne s'interesse qu'aux modules qui nous intéressent.
#Mais quels sont-ils?
detect_mod ()
{
html_tab_start
lsmod | grep -v Module|
(
while read a b
do
(
#echo $a
desc=`modinfo $a |
grep "^description:" | sed 's/^description://g' `
#grep -v "^depends:" |
#grep -v "^alias:" |
#grep -v "^parm:"|
case $desc in
*Audio* | *Midi* | *sound* | *Sound* )
#FIXME: est on intéréssé par les modules de son?
;;
*ether* | *Ether* | *Modem* )
#echo $a $desc
html_tab_line "$a" "$desc"
;;
esac
#echo "### " $a $desc | indent
)
done
)
html_tab_stop
}
#detection des disques
#On récupére les informations principales sur les 4 disques IDE.
detect_disk ()
{
for disk in hda hdb hdc hdd
do
DSK=/proc/ide/$disk
if [ -d $DSK ]
then
media=`cat $DSK/media`
model=`cat $DSK/model`
echo $disk: $media: $model
(
if [ cdrom != $media ]
then
capacity=`cat $DSK/capacity`
geometry=`cat $DSK/geometry`
echo "capacité: " $capacity "blocs/secteurs"
echo "géométrie:" $geometry
fi
#echo $media
#echo $model
) | indent text2 | sed "s!^!::!g"
fi
if [ 1 = $verbose ]
then
# Tant que l'on y est: liste des partitions
fdisk -l /dev/$disk | indent text2 | indent text2
fi
done
}
#Detection de la configuration réseau courante. (adresses IP).
detect_net ()
{
ifconfig | grep "inet add?r" | grep -v 127.0.0.1
}
#Detéction du matériel présent sur le bus PCI.
detect_pci ()
{
lspci | grep "controller:" | sed "s/^..:..\.. //g" | sed
's!controller:!:!g'
}
#########" Routines de détéction principale
#detection de tout
detect_all ()
{
host=`hostname `
today=`date "+%A %d %B %Y"`
if [ html = $OUTPUT ]
then
today="<small> $today </small>"
else
today="$today"
fi
echo ":$host:$today" | make_sample_table
section "Système"
detect_sys | indent
section "Processeur"
detect_cpu | make_sample_table
section "Mémoire"
detect_mem | make_sample_table
section "Disques"
detect_disk | make_sample_table
section "Réseau"
detect_net | indent
section "Modules spécifiques"
detect_mod | indent
section "Pci"
detect_pci | make_sample_table
}
#########" Verification de l'environnement d'execution du script.
verif ()
{
user=`whoami`
if [ root != $user ]
then
echo "Vous devez être root, pour lancer ce script!"
exit 1
fi
if [ /bin/bash != $BASH ]
then
echo "Désolé, ce script n'a été testé que sous bash!"
exit 1
fi
}
#########" Programme principal
verif
#RESULT=fiche.txt
if [ `hostname` = $FILE ]
then
detect_all
else
RESULT=$FILE.$OUTPUT
detect_all > $RESULT
fi
#cat $RESULT
--
> Toute machine qui se respecte a sa console sur un port serie...
:-)
La question n'est pas de savoir si elle a une console sur port
série,
mais de savoir de quelle planète provient le connecteur ;-)
-- fr.comp.ordinosaures ---
--
Si dieux avait créé l'Homme avec de la toile émeri au creux des mains,
Il y aurait moins de branleurs.
-- Pierre Desproges.
--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>