#!/bin/sh ######################################## # Description: This script is used to get system information on x86 and x64 systems. ######################################## ######################### # Set variables ######################### PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin cpuinfo_file=/proc/cpuinfo meminfo_file=/proc/meminfo ######################### # This function displays the system name. ######################### name() { hostname -f > /dev/null 2>&1 if [ $? -eq 0 ] then value=`hostname -f` else value=`hostname` fi echo $value } ######################### # This function displays the operating system. ######################### os() { if [ -e /etc/lsb-release ] then value=`lsb_release -d | cut -d : -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//'` else grep ^PRETTY_NAME /etc/*release > /dev/null 2>&1 if [ $? -eq 0 ] then value=`grep ^PRETTY_NAME /etc/*release | uniq | \ cut -d = -f 2 | sed 's/^["]*//;s/["]$*//'` else lsb_release -d > /dev/null 2>&1 if [ $? -eq 0 ] then value=`lsb_release -d | cut -d : -f 2- | \ sed 's/^[ \t]*//;s/[ \t]*$//'` else value=Unknown fi fi fi echo $value } ######################### # This function displays the operating system (full details). ######################### osfull() { if [ -e /etc/lsb-release ] then distro=`lsb_release -d | cut -d : -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//'` else grep ^PRETTY_NAME /etc/*release > /dev/null 2>&1 if [ $? -eq 0 ] then distro=`grep ^PRETTY_NAME /etc/*release | uniq | \ cut -d = -f 2 | sed 's/^["]*//;s/["]$*//'` else lsb_release -d > /dev/null 2>&1 if [ $? -eq 0 ] then distro=`lsb_release -d | cut -d : -f 2- | \ sed 's/^[ \t]*//;s/[ \t]*$//'` else distro=Unknown fi fi fi distro_arch=`uname -m` case $distro_arch in i686) arch=32-bit ;; x86_64) arch=64-bit ;; esac value=`echo $distro' ('$arch' '$distro_arch')'` echo $value } ######################### # This function displays the operating system (short). ######################### osshort() { if [ -e /etc/lsb-release ] then value=`lsb_release -i | cut -d : -f 2- | sed 's/^[ \t]*//;s/[ \t]*$//'` else grep ^NAME /etc/*release > /dev/null 2>&1 if [ $? -eq 0 ] then value=`grep ^NAME /etc/*release | uniq | cut -d = -f 2 | \ sed 's/^["]*//;s/["]$*//'` else lsb_release -d > /dev/null 2>&1 if [ $? -eq 0 ] then value=`lsb_release -i | cut -d : -f 2- | \ sed 's/^[ \t]*//;s/[ \t]*$//'` else value=Unknown fi fi fi echo $value } ######################### # This function displays the chassis tag number. ######################### tag() { if [ -e /sys/class/dmi/id/sys_vendor ] then manufacturer=`cat /sys/class/dmi/id/sys_vendor` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then value=Virtual else if [ -e /sys/class/dmi/id/product_serial ] then value=`sudo cat /sys/class/dmi/id/product_serial` else value=Unknown fi fi else sudo dmidecode -V > /dev/null 2>&1 if [ $? -eq 0 ] then sudo dmidecode | grep 'No SMBIOS nor DMI' > /dev/null 2>&1 if [ $? -eq 1 ] then manufacturer=`sudo dmidecode -t 1 | \ sed -r 's/^[[:space:]]+//' | grep '^Manufacturer: ' | \ cut -d : -f 2-` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then value=Virtual else value=`sudo dmidecode -t 1 | \ sed -r 's/^[[:space:]]+//' | \ grep '^Serial Number: ' | cut -d : -f 2-` fi else value=Unknown fi else value=Unknown fi fi echo $value } ######################### # This function displays the hardware (full details). ######################### hardwarefull() { # CPU cpu_model=`grep '^model name' $cpuinfo_file | uniq | cut -d : -f 2` model=`echo $cpu_model` echo $cpu_model | grep Hz > /dev/null 2>&1 if [ $? -eq 1 ] then sudo dmidecode -V > /dev/null 2>&1 if [ $? -eq 0 ] then sudo dmidecode | grep 'No SMBIOS nor DMI' > /dev/null 2>&1 if [ $? -eq 1 ] then cpuspeed=`sudo dmidecode -t 4 | \ sed -r 's/^[[:space:]]+//' | grep '^Current Speed:' | \ uniq | awk '{print $3}'` if [ $cpuspeed -lt 1000 ] then cpuspeed_pretty=`echo $cpuspeed'MHz'` else cpuspeed_ghz=$(echo "scale=2; $cpuspeed / 1000" | bc) cpuspeed_pretty=`echo $cpuspeed_ghz'GHz'` fi fi else cpuspeed_pretty=Unknown fi cpu_model=`echo $model @ $cpuspeed_pretty` fi grep '^physical id' $cpuinfo_file > /dev/null 2>&1 if [ $? -eq 0 ] then physical_cpus=`grep '^physical id' $cpuinfo_file | sort | uniq | \ wc -l` else physical_cpus=1 fi logical_cpus=`grep '^processor' $cpuinfo_file | uniq | wc -l` threads_per_cpu=$(($logical_cpus / $physical_cpus)) grep '^cpu cores' $cpuinfo_file > /dev/null 2>&1 if [ $? -eq 0 ] then cores_per_cpu=`grep '^cpu cores' $cpuinfo_file | sort | uniq | \ cut -d : -f 2` else cores_per_cpu=1 fi if [ "$threads_per_cpu" -gt "$cores_per_cpu" ] then hyper_threading="Yes" else hyper_threading="No" fi cpu_value=`echo CPU: Model: $cpu_model, Hyper-Threading: $hyper_threading, \ Physical CPU\'s: $physical_cpus, Cores per CPU: $cores_per_cpu, Threads \ per CPU: $threads_per_cpu, Logical CPU\'s: $logical_cpus` # RAM sudo dmidecode -V > /dev/null 2>&1 if [ $? -eq 0 ] then sudo dmidecode | grep 'No SMBIOS nor DMI' > /dev/null 2>&1 if [ $? -eq 1 ] then ram_data_width=`sudo dmidecode -t 17 | sed -r 's/^[[:space:]]+//' | \ grep '^Data Width:' | head -n 1 | awk '{print $3}'` if [ "$ram_data_width" = "41024" ] then ram_total=`sudo dmidecode -t 17 | sed -r 's/^[[:space:]]+//' | \ sed -n '/^Data Width:.*bits/,/^Size:/p' | \ sed -n '/^Size: [[:digit:]]/p' | awk '{s+=$2} END {print s}'` else ram_total=`sudo dmidecode -t 17 | sed -r 's/^[[:space:]]+//' | \ sed -n '/^Data Width: '$ram_data_width'/,/^Size:/p' | \ sed -n '/^Size: [[:digit:]]/p' | awk '{s+=$2} END {print s}'` fi if [ $ram_total -lt 1024 ] then ram_total_pretty=`echo $ram_total' MB'` else ram_total_gb=$(echo "scale=0; $ram_total / 1024" | bc) ram_total_pretty=`echo $ram_total_gb' GB'` fi if [ -e /sys/class/dmi/id/sys_vendor ] then manufacturer=`cat /sys/class/dmi/id/sys_vendor` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then ram_modules_installed=Virtual ram_module_speed=Virtual else if [ "$ram_data_width" = "41024" ] then ram_modules_installed=`sudo dmidecode -t 17 | \ sed -r 's/^[[:space:]]+//' | \ sed -n '/^Data Width:.*bits/,/^Size:/p' | \ sed -n '/^Size: [[:digit:]]/p' | wc -l` else ram_modules_installed=`sudo dmidecode -t 17 | \ sed -r 's/^[[:space:]]+//' | \ sed -n '/^Data Width: '$ram_data_width'/,/^Size:/p' | \ sed -n '/^Size: [[:digit:]]/p' | wc -l` fi ram_module_speed=`sudo dmidecode -t 17 | \ sed -r 's/^[[:space:]]+//' | grep ^Speed: | uniq | \ head -n 1 | awk '{print $2,$3}'` fi else ram_modules_installed=Unknown ram_module_speed=Unknown fi else ram_total_b=`cat $meminfo_file | grep ^MemTotal | \ cut -d : -f 2- | awk '{print $1}'` ram_total=$(echo "scale=0; $ram_total_b / 1024" | bc) if [ $ram_total -lt 1024 ] then ram_total_pretty=`echo $ram_total' MB'` else ram_total_gb=$(echo "scale=0; $ram_total / 1024" | bc) ram_total_pretty=`echo $ram_total_gb' GB'` fi ram_modules_installed=Unknown ram_module_speed=Unknown fi else ram_total_pretty=Unknown ram_modules_installed=Unknown ram_module_speed=Unknown fi ram_value=`echo RAM: Total installed: $ram_total_pretty, Modules installed: \ $ram_modules_installed, Module speed: $ram_module_speed` echo $cpu_value echo $ram_value } ######################### # This function displays the chassis. ######################### chassis() { if [ -e /sys/class/dmi/id/sys_vendor ] then manufacturer=`cat /sys/class/dmi/id/sys_vendor` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then value=Virtual else value=`echo $manufacturer` fi else sudo dmidecode -V > /dev/null 2>&1 if [ $? -eq 0 ] then sudo dmidecode | grep 'No SMBIOS nor DMI' > /dev/null 2>&1 if [ $? -eq 1 ] then manufacturer=`sudo dmidecode -t 1 | \ sed -r 's/^[[:space:]]+//' | grep '^Manufacturer: ' | \ cut -d : -f 2-` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then value=Virtual else value=`echo $manufacturer` fi else value=Unknown fi else value=Unknown fi fi echo $value } ######################### # This function displays the model. ######################### model() { if [ -e /sys/class/dmi/id/sys_vendor ] then manufacturer=`cat /sys/class/dmi/id/sys_vendor` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then value=Virtual else if [ -e /sys/class/dmi/id/product_name ] then product_name=`cat /sys/class/dmi/id/product_name` else product_name=Unknown fi if [ -e /sys/class/dmi/id/product_version ] then version=`cat /sys/class/dmi/id/product_version` else version=Unknown fi value=`echo $product_name $version` fi else sudo dmidecode -V > /dev/null 2>&1 if [ $? -eq 0 ] then sudo dmidecode | grep 'No SMBIOS nor DMI' > /dev/null 2>&1 if [ $? -eq 1 ] then manufacturer=`sudo dmidecode -t 1 | \ sed -r 's/^[[:space:]]+//' | grep '^Manufacturer: ' | \ cut -d : -f 2-` echo $manufacturer | grep -Ei '(Microsoft|Nutanix|VMware)' > /dev/null 2>&1 if [ $? -eq 0 ] then value=Virtual else product_name=`sudo dmidecode -t 1 | \ sed -r 's/^[[:space:]]+//' | \ grep '^Product Name: ' | cut -d : -f 2-` version=`sudo dmidecode -t 1 | \ sed -r 's/^[[:space:]]+//' | \ grep '^Version: ' | cut -d : -f 2-` value=`echo $product_name $version` fi else value=Unknown fi else value=Unknown fi fi echo $value } ######################### # This is the main part of the script. ######################### if [ $# -ne 1 ] then echo usage: system_info.sh [option] echo echo " name Displays system name" echo " os Displays operating system" echo " osfull Displays operating system (full details)" echo " osshort Displays operating system (short)" echo " tag Displays chassis tag number" echo " hardwarefull Displays hardware (full details)" echo " chassis Displays chassis" echo " model Displays model" exit 0 else case $1 in name) name ;; os) os ;; osfull) osfull ;; osshort) osshort ;; tag) tag ;; hardwarefull) hardwarefull ;; chassis) chassis ;; model) model ;; *) echo Unknown option ;; esac fi exit 0