Systeminformations-Skript

Laquestianne

Cadet 2nd Year
Registriert
Sep. 2009
Beiträge
25
Hallo, ich habe mir ein Systeminformationsskript gebastelt, was cpu, ram etc. ausgibt.

Ich würde gerne außerdem noch alle freigegebenen Ports auf dem jeweiligen Server, die IP-Adressen, Patchlevel, Interface und Bauform ausgeben, weiß jemand, wie (eins oder mehr davon) geht?
 
Hm,
Ports könntest du mit netstat rausbekomen, IP-Adressen mit ifconfig, ethtool könnte helfen, und einiges an Bauform informationen wirst du in /proc finden. Musste dir alles zusammen greppen und cutten.
Oder wie meinst du das?
Grüße
 
Jop, so meinte ich das, danke :)

Bei
Code:
netstat -lptu
kriege ich nur einen Port numerisch ausgegeben, beim restlichen Output steht da z.B. "www" oder "netbios-ssn". Kann man die auch numerisch ausgeben lassen? Oder liegt es daran, dass ich die nicht bekomme, weil ich kein Root bin?
Das gilt leider für alle Befehle: ich kann sie nicht als Root ausführen lassen, weil das Skript auf vielen Rechnern automatisch ausgeführt werden soll und ohne das PW ins Skript zu packen, geht das nicht, oder? Und das ist mir zu unsicher.

Die Haupt-IP bekomme ich jetzt durch
Code:
ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print "|Haupt-IP="$1}'
Weiß jemand, wie ich alle IPs kriege, durch Kommas getrennt? Das hab ich bisher weder durch experimentieren noch durch googlen herausfinden können.

Das Patchlevel ist erstmal net so wichtig.

Bei der Bauform müsste einer von diesen Werten rauskommen: 19 1HE, 19 2HE, 19 4HE, 19 5HE, 19 Nextgate, 19 Tarox, Rack, virtuell
Code:
grep "virtual" /proc
hat da auf einem virtuellen Server leider nichts ausgegeben (was mich wundert, weil schon im Model Name "virtual CPU" drinsteht).

Beim Interface sollte z.B. eth0, Gbit 1 oder vLan rauskommen.


Tjo, kann mir da jemand weiterhelfen? Wenn eine Info schlicht nicht automatisch in der Form zu bekommen ist, dann ists auch net weiter schlimm, dann muss das halt weiterhin manuell eingetragen werden in den Server-Datenblättern.


Und ich muss das Ganze nochmal für Windows schreiben, da werd ich auch nochmal Spaß haben...



edit: achja, kriege ich die Gesamt-Festplattengröße ohne Root-Rechte irgendwie?
 
Hallo, woher soll ein OS wissen, in was für eine Art von Gehäuse der Computer steckt oder wie viele Höheneinheiten der jeweilige Server im Schrank benötigt? ;-)



vielleicht solltest du auch ein "uname -a" abfrage, um die Kernelversion zu erhalten.
 
CoolHandLuke schrieb:
Hallo, woher soll ein OS wissen, in was für eine Art von Gehäuse der Computer steckt oder wie viele Höheneinheiten der jeweilige Server im Schrank benötigt? ;-)

hihi, da ist was dran... :D

vielleicht solltest du auch ein "uname -a" abfrage, um die Kernelversion zu erhalten.

Hier mal das aktuelle Skript:

Code:
#!/bin/bash

#################################################################################################################
# Sammelt Systeminformationen (Servername, System, Distribution, Version, Ram, Haupt-IP, Festplattengroesse,	#
# CPU-Geschwindigkeit, Anzahl der CPUs                                                                          #
#                                                                                                               #
# Schreibt diese in eine Datei (in denselben Ordner, wo sich dieses Skript befindet)                            #
#                                                                                                               #
# Und gibt diese Datei per cat-Befehl aus                                                                       #
#################################################################################################################


#	Show Hostname
/bin/hostname | awk '{print "|Servername="$0}' > sysinfo.txt

#	Show Operating System
/bin/uname -s | awk '{print "|System="$1}'>> sysinfo.txt

#	Show name of distribution
echo -n "|Distribution=" >> sysinfo.txt
cat /etc/issue | awk '{printf $1}' >> sysinfo.txt
echo >> sysinfo.txt

#	Show version of distribution
echo -n "|Version=" >> sysinfo.txt
cat /etc/issue | awk '{printf $2}' >> sysinfo.txt
echo >> sysinfo.txt

#	Zeige Ram (gerundet auf MB und vernuenftige Werte (1024, 2048 etc.)
find_sbin_cmd() {
    for base in / /usr/ /usr/local; do
        if [ -e $base/sbin/$1 ]; then
            echo $base/sbin/$1
            exit
        fi
    done
}

KiB=`grep MemTotal /proc/meminfo | tr -s ' ' | cut -d' ' -f2`
MiB=`expr $KiB / 1024`
#note various mem not accounted for, so round to appropriate size
#on my 384MiB system over 8MiB was unaccounted for
#on my 1024MiB system over 20MiB was unaccounted for so round to next highest power of 2
round=32
echo "`expr \( \( $MiB / $round \) + 1 \) \* $round` MiB" | awk '{print "|RAM="$1" MB"}'>> sysinfo.txt
echo

#	Zeige Haupt-IP
ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print "|Haupt-IP="$1}' >> sysinfo.txt
#ODER: (ACHTUNG, ERSTE IP IST NICHT IMMER HAUPT-IP) Lookup local ip address (equivalent to host `hostname`):
#hostname -i | awk '{print "|Haupt-IP="$1}' >> sysinfo.txt


#	Zeige Festplattengröße 
fdisk -l | grep GB | awk '{print "|Festplattengroeße="$3" GB"}'>> sysinfo.txt
#(falsch, brauche Gesamtgröße):
#du -hsx /opt | awk '{print "|Festplattengroeße="$1}'>> sysinfo.txt

#	Zeige CPU-Speed
grep "cpu MHz" /proc/cpuinfo | awk '{print "|CPU-Speed="$4" MHz"}'>> sysinfo.txt

#	Zeige Anzahl CPUs
grep -c 'model name' /proc/cpuinfo | awk '{print "|Anzahl CPUs="$1}'>> sysinfo.txt
#ODER MIT CPU-BEZEICHNUNG:
:<<COMMENT
COUNT=$(cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //' | wc -l)
echo $(cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //' | uniq) = $COUNT >>sysinfo.txt
COMMENT


cat sysinfo.txt

Wer evtl. was zur Umsetzung unter Windows weiß:hier bitte antworten


edit: Root-Rechte sind doch kein Problem, die hätte ich auch, also ist Festplattengröße jetzt auch möglich.
 
Zuletzt bearbeitet:
Vllt wären alle installieren Pakete interessant. dpkg -la und auf Rot Hut sowie Susen rpm -qa
 
Vllt wären alle installieren Pakete interessant. dpkg -la und auf Rot Hut sowie Susen rpm -qa

Mh also was da alles ausgegeben wird, das würde den Rahmen sprengen, ich will das nämlich alles mal automatisch auf Wikiseiten schreiben.

Momentan habe ich noch vor allem das Problem, dass der Befehl, um die Festplattenanzahl und -größe bei Rechnern mit SAN GB-Angaben doppelt und dreifach ausgibt:
Code:
fdisk -l | grep GB | awk '{print "|Festplattengroeße="$3" GB"}'>> sysinfo.txt

Bei "normalen" Festplatten funktioniert der Befehl wunderbar.

Wenn ich einen Vorschlag von linuxquestions.org ausprobiere, passiert einfach garnix.


Außerdem hab ich bisher weiterhin noch keine Lösung gefunden, um offene Ports rauszubekommen (das lag auch nicht an den Rootrechten). Alle IPs, durch Kommas getrennt, da hab ich gerade noch eine Idee zu. Ich poste das Skript dann nochmal am Ende, wenns komplett fertig ist.


edit: ich bin irgendwie gerade zu blöd, um ne Zahl durch 1000 zu teilen...:
Code:
MHz=`grep "cpu MHz" /proc/cpuinfo | awk '{print $4}' | head -1`
echo $MHz >> $name.txt
GHz=`expr $MHz / 1000`
echo $GHz >> $name.txt

Das geht nicht, die MHz-Variable ist in nem Beispiel mit 2593.571 gefüllt, aber die GHz bleibt leer. Nehme ich "/1000" raus, ist $GHz=$MHz. Liegt das daran, dass die Zahl n float ist und man die nicht einfach durch 1000 teilen kann? Wie gehts richtig? Hilfää ;)
 
Zuletzt bearbeitet:
Festplattengröße? Partitionsgröße macht glaub ich mehr Sinn oder? df hilft da, bzw. df -h

Ports könnte man vielleicht auch über die Firewall? Da bin ich aber auch überfragt. Mehr als mit yast hab ich bisher Firewall technisch nichts gemacht. :-)

Update 1:
Macht Spaß sowas zu bauen. :-)
So bekommst du alle IP Adressen komma getrennt. Geht bestimmt auch eleganter, funktioniert aber immerhin. :-)
ifconfig | grep "inet addr" | cut -d: -f2 | cut -d" " -f1 | xargs echo | sed s/" "/,/g

Update 2: :-)
Wenn bei fdisk eine Platte öffters ausgegeben wird (warum weiss ich nicht) kann sort -u helfen, dafür müssen die Zeilen aber 100%ig identisch sein. Aber wie gesagt, vielleicht ist df -h die bessere Lösung.

Update 3: :-) :-)
uptime wäre doch auch noch was dafür.

Grüße
 
Zuletzt bearbeitet:
So, Ips sind jetzt durch Kommata getrennt, fdisk scheint immer die richtigen Werte rauszugeben und gibt diese auch durch Kommas getrennt aus. Die entstehende Datei wird jetzt nach dem Rechnernamen benannt. Alle Kommentare sind auf deutsch und die Haupt-IP wird getrennt von allen vorhandenen IPs ausgegeben.

Tjo, wer uptime o.ä. benötigt, kanns ja reinpacken^^


Aktuelle Version:

Code:
#!/bin/bash


#################################################################################################################
# Sammelt Systeminformationen (Servername, System, Distribution, Version, Ram, Haupt-IP, IPs,                   #
# Festplattengroesse, CPU-Geschwindigkeit, Anzahl der CPUs)                                                     #
#                                                                                                               #
# Schreibt diese in eine Datei mit dem Namen des Servers (in denselben Ordner, wo sich dieses Skript befindet)  #
#                                                                                                               #
# Und gibt diese Datei per cat-Befehl aus                                                                       #
#################################################################################################################


#	Erzeuge Datei mit dem NamendesRechners.txt
hostname -f -s > sysinfotemp.txt
name=$(cat sysinfotemp.txt | cut -b 1-25 | tr -d [:blank:])

#	Zeige Rechnername
/bin/hostname | awk '{print "|Servername="$0}' > $name.txt

#	Zeige Betriebssystem
/bin/uname -s | awk '{print "|System="$1}'>> $name.txt

#	Zeige Name der Distribution
echo -n "|Distribution=" >> $name.txt
cat /etc/issue | awk '{printf $1}' >> $name.txt
echo >> $name.txt

#	Zeige Version der Distribution
echo -n "|Version=" >> $name.txt
cat /etc/issue | awk '{printf $2}' >> $name.txt
echo >> $name.txt

#	Zeige Ram (gerundet auf GB)
		find_sbin_cmd() {
			for base in / /usr/ /usr/local; do
				if [ -e $base/sbin/$1 ]; then
            echo $base/sbin/$1
            exit
				fi
			done
		}

		KiB=`grep MemTotal /proc/meminfo | tr -s ' ' | cut -d' ' -f2`
		GB=`expr $KiB / 1000000`
		#note various mem not accounted for, so round to appropriate size
		#on my 384MiB system over 8MiB was unaccounted for
		#on my 1024MiB system over 20MiB was unaccounted for so round to next highest power of 2
		echo $GB | awk '{print "|RAM="$1" GB"}'>> $name.txt

		
#	Zeige HauptIP
hostname -i | awk '{print "|Haupt-IP="$1}' >> $name.txt		
		
#	Zeige IPs
echo -n "|IPs=" >> $name.txt
ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ printf $1", "}' >> $name.txt
# fuer Ubuntu 6...:
ifconfig  | grep 'inet Addresse:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ printf $1", "}' >> $name.txt
echo >> $name.txt

#	Zeige Festplatten
echo -n "|Festplatten / Baender=" >> $name.txt
fdisk -l | grep GB | sort -u | awk '{printf $3" GB, "}'>> $name.txt
echo >> $name.txt
#(falsch, brauche Gesamtgröße:
#du -hsx /opt | awk '{print "|Festplattengroeße="$1}'>> $name.txt)

# Zeige CPU(s)
COUNT=$(cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //' | wc -l)
echo \|CPU\(s\) = $(cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //' | uniq) , $COUNT Kern\(e\) >>$name.txt
#	ODER Zeige Anzahl CPUs
#grep -c 'model name' /proc/cpuinfo | awk '{print "|Anzahl CPUs="$1}'>> $name.txt

#	Zeige CPU-Geschwindigkeit
echo -n "|CPU-Speed=" >> $name.txt
MHz=`grep "cpu MHz" /proc/cpuinfo | awk '{print $4}' | head -1`
#echo $MHz >> $name.txt
#GHz=`expr $MHz /1000`
GHz=`echo "scale=2; $MHz/1000" | bc` 
echo $GHz" GHz" >> $name.txt
#grep "cpu MHz" /proc/cpuinfo | awk '{print "|CPU-Speed="$4" MHz"}' | head -1 >> $name.txt

cat $name.txt

rm sysinfotemp.txt
 
Zurück
Oben