(Courriels de diversion: <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> <entrouvrir@transborderiez-superbes.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 --- -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>