CPUInfo

Small shell script that returns the details in /proc/cpuinfo in a more human readable and relevant way.

Sample output

Processor seems to be quite old guessing number.
#######################################
#           CPU Information           #
#######################################

CPU Architecture is: x86_64
CPU Manufacturer is: AMD
CPU Model is:  AMD Opteron(tm) Processor 252
CPU Speed is:  1800 1800MHz
Number of physical CPUs: 2
Number of cores per CPU: 1
Number of logical CPUs (cores & hyperthreading): 2
Hyperthreading enabled (Intel only): N/A

#######################################

  • cpuinfo.sh (1037)
  • #!/bin/bash
    #
    # CPUInfo.sh
    # Copyright 2009 Ryan McLean ryan1_00 !at_NoSPAM hotmail -com
    # GPL v2 or later
    
    # Functions #
    function getArch()
    {
         case `uname -p` in
            "i686")
                eval "$1=x86";
                ;;
            *)
                eval "$1='`uname -p`'";
                ;;
        esac
    }
    
    function getMake()
    {
        # Who Makes it (AMD | INTEL)
        if [ `grep -c -i vendor_id /proc/cpuinfo` -gt 0 ]; then
            tmp=`grep -i vendor_id /proc/cpuinfo | cut -f2 -d":"`;
        elif [ `grep -c -i vendor /proc/cpuinfo` -gt 0 ]; then
            tmp=`grep -i vendor /proc/cpuinfo | cut -f2 -d":"`;
        fi
    
        tmp=`echo $tmp | sed 's/\n/ /g' | cut -f1 -d" "`;
    
        if [ `echo $tmp | grep -c AMD` -eq 1 ]; then
            eval "$1=AMD";
        elif [ `echo $tmp | grep -c Intel` -eq 1 ]; then
            eval "$1=Intel";
        else
            eval "$1=Unknown";
        fi
    }
    
    function getModel()
    {
        # What is is (Athlon | Pentium)
        if [ `grep -c "model name" /proc/cpuinfo` -gt 0 ]; then
            tmp=`grep -i "model name" /proc/cpuinfo | cut -f1,2 -d":"`;
            eval "$1='`echo $tmp | sed 's/\n/ /g' | cut -f2 -d":" | sed 's/model name/ /g'`'";
        elif [ `grep -c "family" /proc/cpuinfo` -gt 0 ]; then
            tmp=`grep -i "family" /proc/cpuinfo | cut -f1,2 -d":"`;
            eval "$1='`echo $tmp | sed 's/\n/ /g' | cut -f2 -d":" | sed 's/family/ /g'`'";
        else
            eval "$1=Unknown";
        fi
    }
    
    function getCPU()
    {
        if [ `grep -c "cpu cores" /proc/cpuinfo` -gt 0 ]; then
            # Get number of cores (assumes that multiprocessor computers
            # have same number of cores on each CPU)
            tmp=`grep -i "cpu cores" /proc/cpuinfo | cut -f2 -d":" | sed 's/ //g'`;
            tmp=`echo $tmp | sed 's/ //g'`;
            eval "$2=`echo ${tmp:0:1}`";
    
            # count number of Physical & logical CPUs
            tmp=`grep -i "physical id" /proc/cpuinfo | cut -f2 -d":" | sed 's/ //g'`;
            tmp=`echo $tmp | sed 's/ //g'`;
    
            x=0;
            while [ $x -lt ${#tmp} ]
            do
                curID=`echo ${tmp:$x:1}`;
                tmp3[$curID]=`expr ${tmp3[$curID]} + 1`;
                x=`expr $x + 1`;
            done
    
                eval "$1=`echo ${#tmp3[*]}`";
    
        elif [ `grep -c "cpu number" /proc/cpuinfo` -gt 0 ]; then
            # count number of Physical & logical CPUs
            tmp=`grep -i "cpu number" /proc/cpuinfo | cut -f2 -d":" | sed 's/ //g'`;
            tmp=`echo $tmp | sed 's/ //g'`;
    
            x=0;
            while [ $x -lt ${#tmp} ]
            do
                curID=`echo ${tmp:$x:1}`;
                tmp2[$curID]=`expr ${tmp2[$curID]} + 1`;
                x=`expr $x + 1`;
            done
    
            eval "$1=`echo ${#tmp2[*]}`";
            eval "$2=1";
        else
            echo " Processor seems to be quite old guessing number.";
            tmp=`grep processor /proc/cpuinfo | cut -f2 -d":" | sed 's/ //g'`;
            tmp=`echo $tmp | sed 's/ //g'`;
    	if [ $ht == "true" ]; then
                tmp=`expr ${#tmp} '%' 2`;
                eval "$1=`echo $tmp`";
            else
                eval "$1=`echo ${#tmp}`";
            fi
            eval "$2=1";
        fi
    }
    
    function getMHZ()
    {
        eval "$1='`grep 'cpu MHz' /proc/cpuinfo | cut -f2 -d':' | cut -f1 -d'.'`'";
    }
    
    function getHT()
    {
        if [ $CPUmak == "Intel" ]; then
            if [ `grep flags /proc/cpuinfo | grep -c " ht "` -gt 0 ]; then
                eval "$1=true";
            else
                eval "$1=false";
            fi
        elif [ $CPUmak == "AMD" ]; then
            eval "$1=N/A";
        else
            eval "$1=Unknown";
        fi
    }
    
    function getLogCPU()
    {
        if [ $ht == "true"  ]; then
            eval "$1=`expr $phyCPU '*' $cores '*' 2`";
        else
            eval "$1=`expr $phyCPU '*' $cores`";
        fi
    }
    
    function output()
    {
        echo "#######################################";
        echo "#           CPU Information           #";
        echo "#######################################";
        echo "";
        echo " CPU Architecture is: $arch";
        echo " CPU Manufacturer is: $CPUmak";
        echo " CPU Model is: $CPUmod";
        echo " CPU Speed is: "$CPUSpeed"MHz";
        echo " Number of physical CPUs: $phyCPU";
        echo " Number of cores per CPU: $cores";
        echo " Number of logical CPUs (cores & hyperthreading): $logCPU";
        echo " Hyperthreading enabled (Intel only): $ht";
        echo "";
        echo "#######################################";
    }
    
    # Set Vars #
    
    arch="Unknown";
    CPUmak="Unknown";
    CPUmod="Unknown";
    CPUSpeed="Unknown";
    phyCPU=0;
    cores=0;
    logCPU=0;
    ht="Unknown";
    
    # Main #
    clear;
    getArch arch
    getMake CPUmak
    getModel CPUmod
    getMHZ CPUSpeed
    getHT ht CPUmak
    getCPU phyCPU cores ht
    getLogCPU logCPU phyCPU cores ht
    
    output arch CPUmak CPUmod CPUSpeed phyCPU cores logCPU ht
    

    One thought to “CPUInfo”

    1. Good stuff I try to add also meminfo in it but no luck sofar, Thanks for creating this, makes live lot easier

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    *

    This blog is kept spam free by WP-SpamFree.