#!/bin/sh ######################################## # Description: This script is used to get system information on x64 systems. ######################################## ######################### # Set variables ######################### PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin version_file=/etc/version dmesg_file=/var/run/dmesg.boot ######################### # This function displays the system name. ######################### name() { value=`hostname -f` echo $value } ######################### # This function displays the operating system. ######################### os() { os=`cat $version_file | cut -d - -f 1` os_release=`cat $version_file | cut -d - -f 2,3` value=`echo $os $os_release` echo $value } ######################### # This function displays the operating system (full details). ######################### osfull() { os_name=`cat $version_file | cut -d - -f 1` os_release=`cat $version_file | cut -d - -f 2,3,4` os_arch=`uname -m` case $os_arch in amd64) arch=64-bit ;; esac value=`echo $os_name $os_release' ('$arch' '$os_arch')'` echo $value } ######################### # This function displays the operating system (short). ######################### osshort() { value=`cat $version_file | cut -d - -f 1` echo $value } ######################### # This function displays the chassis tag number. ######################### tag() { 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 echo $value } ######################### # This function displays the hardware (full details). ######################### hardwarefull() { # CPU cpu_model=`sysctl -n hw.model | sed 's/^ *//;s/ *$//' | sed 's/ */\ /g'` 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 '^FreeBSD/SMP:.*package(s)' $dmesg_file > /dev/null 2>&1 if [ $? -eq 0 ] then physical_cpus=`grep '^FreeBSD/SMP:.*package(s)' $dmesg_file | uniq | \ cut -d : -f 2 | cut -d x -f 1 | awk '{print $1}'` cores_per_cpu=`grep '^FreeBSD/SMP:.*package(s)' $dmesg_file | uniq | \ cut -d : -f 2 | cut -d x -f 2 | awk '{print $1}'` grep '^FreeBSD/SMP:.*package(s)' $dmesg_file | uniq | \ cut -d : -f 2 | grep threads > /dev/null 2>&1 if [ $? -eq 0 ] then thread_number=`grep '^FreeBSD/SMP:.*package(s)' $dmesg_file | \ uniq | cut -d : -f 2 | cut -d x -f 3 | awk '{print $1}'` threads_per_cpu=$(($cores_per_cpu * $thread_number)) else threads_per_cpu=$(($physical_cpus * $cores_per_cpu)) fi else physical_cpus=1 cores_per_cpu=1 threads_per_cpu=$(($physical_cpus * $cores_per_cpu)) fi if [ "$threads_per_cpu" -gt "$cores_per_cpu" ] then hyper_threading=Yes else hyper_threading=No fi logical_cpus=$(($physical_cpus * $threads_per_cpu)) 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 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 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_total_b=`sysctl -n hw.realmem` ram_total=$(echo "scale=0; $ram_total_b / 1024 / 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() { 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 echo $value } ######################### # This function displays the model. ######################### model() { 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 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