#!/bin/bash # raspi-info # MREV='KLL engineering 2022_27_10 rev 2.3' # add boards # http://kll.engineering-news.org/kllfusion01/articles.php?article_id=134#example3 # # # rev 2018_04_15 change from n n n y to -h -v -c ... # following http://wiki.bash-hackers.org/howto/getopts_tutorial # https://linuxconfig.org/how-to-use-getopts-to-parse-a-script-options # make executable with # chmod +x raspi-info # start with ./raspi-info # worst case if that script text file is on a USB stick try: sudo bash raspi-info # more options: MINF1='start with ./raspi-info -h -V -c -p -l -m -v ( or -vcpl )' MINF2='to enable use: -h this HELP, -V revision, -c no colored lines, -p no header lines, -l no command lines -m mini info -v print full info' # raspberry pi desktop OR putty terminal colors WHT='\E[37;44m' # white on blue background BLU='\E[47;34m' # blue on white background MAG='\E[47;35m' # magenta on white background GRN='\E[47;32m' # green on NO background RED='\E[47;31m' # red on white background BLK='\E[47;30m' # black on white background BOLD='\033[1m' # and BOLD END2='\033[0m' # end bold CMDL='' MTXT='' # check command line arguments PHC="True" # default print HEADER INFO LINES CMC="True" # default print COMMANDS PMINI="False" # print only basic info PLESS="True" # print only medium info NCOL="False" # no colors like when print to file... while getopts ":hcplmvV" opt; do case $opt in h) #echo "-h help was triggered!" >&2 echo $MINF1 echo $MINF2 exit 1 ;; V) #echo "-V revision info was triggered!" >&2 echo $MREV exit 1 ;; v) #echo "-v print more info triggered!" >&2 PLESS="False" PMINI="False" ;; m) #echo "-m print mini info triggered!" >&2 PLESS="True" PMINI="True" ;; c) #echo "-c no colored-lines triggered!" >&2 NCOL="True" ;; p) #echo "-p no header-lines triggered!" >&2 PHC="False" ;; l) #echo "-l no command-lines triggered!" >&2 CMC="False" ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; esac done if [ "$NCOL" = "True" ] ; then # kill color format strings ( as they look ugly in "print to file " source ) WHT='' # white on blue background BLU='' # blue on white background MAG='' # magenta on white background GRN='' # green on NO background RED='' # red on white background BLK='' # black on white background BOLD='' # and BOLD END2='' # end bold fi # give color argument like: printheadercol $WHT$BOLD function printheadercol { if [ "$PHC" = "True" ]; then echo -e $1$MTXT$END2 else echo '' # show empty line fi } function printcmdline { if [ "$CMC" = "True" ]; then echo -e $BLK$CMDL$END2 fi eval $CMDL # here actually execute the command } # from bonzadog https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=191335#p1201006 # http://elinux.org/RPi_HardwareHistory#INFO_Revision_History function printmaker { rev=$(grep Revision /proc/cpuinfo | cut -f 2 -d: | tr -d '[:space:]') #echo $rev echo -n 'board: ' case $rev in 0002) echo "A RPi B Rev 1.0 with 256MB RAM Released: Q1 2012" ;; 0003) echo "A RPi B Rev 1.0 (ECN0001 - no fuses , D14 removed with 256MB RAM Released: Q3 2012" ;; 0004) echo "A RPi B Rev 2.0 with 256MB RAM Released: Q3 2012 by: Sony" ;; 0005) echo "A RPi B Rev 2.0 with 256MB RAM Released: Q3 2012 by: Qisda " ;; 0006) echo "A RPi B Rev 2.0 with 256MB RAM Released: Q4 2012 by: Egoman" ;; 0007) echo "A RPi A Rev 2.0 with 256MB RAM Released: Q1 2013 by: Egoman" ;; 0008) echo "A RPi A Rev 2.0 with 256MB RAM Released: Q1 2013 by: Sony " ;; 0009) echo "A RPi A Rev 2.0 with 256MB RAM Released: Q1 2013 by: Qisda" ;; 000d) echo "A RPi B Rev 2.0 with 512MB RAM Released: Q4 2012 by: Egoman" ;; 000e) echo "A RPi B Rev 2.0 with 512MB RAM Released: Q4 2012 by: Sony" ;; 000f) echo "A RPi B Rev 2.0 with 512MB RAM Released: Q4 2012 by: Qisda" ;; 0010) echo "A RPi B+ Rev 1.0 with 512MB RAM Released: Q3 2014 by: Sony" ;; 0011) echo "A RPi Compute Module Rev 1.0 with 512MB RAM Released: Q3 2014 by: Sony" ;; 0012) echo "A RPi A+ Rev 1.1 with 256MB RAM Released: Q4 2014 by: Sony" ;; 0013) echo "A RPi B+ Rev 1.2 with 512MB RAM Released: Q1 2015 by: ?" ;; 0014) echo "A RPi Compute Module Rev 1.0 with 512MB RAM Released: Q2 2014 by: Embest" ;; 0015) echo "A RPi A+ Rev 1.1 with 256MB/512MB RAM Released: ? by: Embest" ;; a01040) echo "A RPi 2 Model B Rev 1.0 with 1GB Released: ? by: Sony" ;; a01041) echo "A RPi 2 Model B Rev 1.1 with 1GB RAM Released: Q1 2015 by: Sony" ;; a21041) echo "A RPi 2 Model B Rev 1.1 with 1GB RAM Released: Q1 2015 by: Embest" ;; a22042) echo "A RPi 2 Model B (with BMC2837 Rev 1.2 with 1GB RAM Released: Q3 2016 by: Embest" ;; 900021) echo "A RPi Model A+ Rev 1.1 with 512MB RAM Released: Q1 2016 by: Sony UK" ;; 900032) echo "A RPi Model B+ Rev 1.2 with 512MB RAM Released: Q1 2016 by: Sony UK" ;; a02082) echo "A RPi 3 Model B Rev 1.2 with 1GB RAM Released: Q1 2016 by: Sony" ;; a020a0) echo "A RPi 3 Model CM3 Rev 1.0 with 1GB RAM Released: Q1 2017 by: Sony" ;; a22082) echo "A RPi 3 Model B Rev 1.2 with 1GB RAM Released: Q1 2016 by: Embest" ;; a32082) echo "A RPi 3 Model B Rev 1.2 with 1GB RAM Released: Q4 2016 by: Sony Japan" ;; a020d3) echo "A RPi 3 Model B+ Rev 1.3 with 1GB RAM Released: Q1 2017 by: Sony" ;; 900092) echo "A Pi Zero Rev 1.2 with 512MB RAM Released: 2014 by: Sony" ;; 900093) echo "A Pi Zero Rev 1.3 with 512MB RAM Released: 2015 by: Sony" ;; 920093) echo "A Pi Zero Rev 1.3 with 512MB RAM Released: 2015 by: Embest" ;; 9000c1) echo "A Pi Zero W Rev 1.1 with 512MB RAM Released: 2016 by: Sony" ;; #__ update RPI4 a03111) echo "A RPi 4 Rev 1.1 with 1GB RAM Released: 2019 by: Sony UK" ;; b03111) echo "A RPi 4 Rev 1.1 with 2GB RAM Released: 2019 by: Sony UK" ;; b03112) echo "A RPi 4 Rev 1.2 with 2GB RAM Released: 2020 by: Sony UK" ;; c03111) echo "A RPi 4 Rev 1.1 with 4GB RAM Released: 2019 by: Sony UK" ;; c03112) echo "A RPi 4 Rev 1.2 with 4GB RAM Released: 2020 by: Sony UK" ;; c03114) echo "A RPi 4 Rev 1.4 with 4GB RAM Released: 2020 by: Sony UK" ;; d03114) echo "A RPi 4 Rev 1.4 with 8GB RAM Released: 2020 by: Sony UK" ;; 902120) echo "A Zero 2 W Rev 1.0 with 512MB RAM Released: 2021 by: Sony UK" ;; *) echo "BuM--"$rev"--" ;; esac } #____________________________________________ if [ "$PMINI" = "False" ]; then MTXT='_____SYS INFO'; printheadercol $WHT$BOLD MTXT='____/boot/cmdline.txt'; printheadercol $WHT CMDL='cat /boot/cmdline.txt'; printcmdline MTXT="____/boot/config.txt"; printheadercol $WHT CMDL='cat /boot/config.txt | grep -v -e "^$" -e "#"' ; printcmdline if [ "$PLESS" = "False" ]; then MTXT="____list codec"; printheadercol $WHT CMDL='for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; done'; printcmdline fi MTXT='_____NETWORK config'; printheadercol $GRN$BOLD MTXT='_____/sys/class/net/'; printheadercol $GRN CMDL='ls /sys/class/net/'; printcmdline MTXT='_____/etc/network/interfaces'; printheadercol $GRN CMDL='cat /etc/network/interfaces | grep -v -e "^$" -e "#"'; printcmdline MTXT='_____/etc/network/interfaces.d/'; printheadercol $GRN CMDL='ls /etc/network/interfaces.d/'; printcmdline MTXT='_____/etc/wpa_supplicant/wpa_supplicant.conf'; printheadercol $GRN MTXT=' ! WARNING THIS CONTAINS PRIVATE DATA ! not publish without blanking '; printheadercol $RED CMDL='sudo cat /etc/wpa_supplicant/wpa_supplicant.conf | grep -v -e "^$" -e "#"'; printcmdline MTXT='_____/etc/dhcpcd.conf'; printheadercol $GRN CMDL='cat /etc/dhcpcd.conf | grep -v -e "^$" -e "#"'; printcmdline if [ "$PLESS" = "False" ]; then MTXT='_____/etc/modprobe.d/raspi-blacklist.conf'; printheadercol $GRN CMDL='cat /etc/modprobe.d/raspi-blacklist.conf'; printcmdline fi MTXT='_____NETWORK status'; printheadercol $GRN$BOLD MTXT='_____ifconfig'; printheadercol $GRN CMDL='ifconfig'; printcmdline if [ "$PLESS" = "False" ]; then MTXT='_____iwconfig'; printheadercol $GRN CMDL='iwconfig'; printcmdline MTXT='_____wifi accesspoints'; printheadercol $GRN CMDL='iwlist wlan0 scan | grep -e "Cell" -e "ESSID"'; printcmdline MTXT='_____ip addr show'; printheadercol $GRN CMDL='ip addr show'; printcmdline MTXT='_____ip route'; printheadercol $GRN CMDL='ip route'; printcmdline MTXT='_____/etc/resolv.conf'; printheadercol $GRN CMDL='cat /etc/resolv.conf'; printcmdline MTXT='_____network stats'; printheadercol $GRN CMDL='sudo netstat -tlnp'; printcmdline MTXT='_____ping google.com'; printheadercol $GRN CMDL='ping -c1 google.com'; printcmdline MTXT='_____ping google nameserver'; printheadercol $GRN CMDL='ping -c1 8.8.8.8'; printcmdline fi MTXT='_____SSH status'; printheadercol $WHT CMDL='service ssh status | grep Active:'; printcmdline MTXT='_____Sysinfo'; printheadercol $BLU CMDL='cat /etc/os-release | grep "PRETTY_NAME="'; printcmdline CMDL='cat /proc/version | grep -o "Linux version............"'; printcmdline if [ "$PLESS" = "False" ]; then # rev 2018-04-04 include SAMBA MTXT='_____/etc/samba/smb.conf'; printheadercol $GRN CMDL='cat /etc/samba/smb.conf | grep -v -e "^$" -e "^#" -e "^;" '; printcmdline MTXT='____bootloader'; printheadercol $BLU CMDL='vcgencmd version'; printcmdline CMDL='apt-cache policy raspberrypi-bootloader'; printcmdline # rev 2020-05-09 RPI4 MTXT='____bootloader RPI4'; printheadercol $BLU CMDL='vcgencmd bootloader_config' printcmdline CMDL='vcgencmd bootloader_version' printcmdline MTXT='____processes'; printheadercol $BLU CMDL='ps -fu pi'; printcmdline fi MTXT="____free mem"; printheadercol $WHT CMDL='free -h'; printcmdline MTXT="____BOARD"; printheadercol $MAG CMDL='cat /sys/firmware/devicetree/base/model;echo'; printcmdline MTXT="____CPU "; printheadercol $MAG CMDL='lscpu | grep -o "armv.."'; printcmdline if [ "$PLESS" = "False" ]; then CMDL='cat /proc/cpuinfo | grep -m1 -e model'; printcmdline CMDL='cat /proc/cpuinfo | grep -e Serial -e Hardware -e Revision'; printcmdline MTXT="!info: this serial you need to buy a codec"; printheadercol $RED printmaker fi MTXT="____cpu temp"; printheadercol $MAG CMDL='vcgencmd measure_temp'; printcmdline if [ "$PLESS" = "False" ]; then MTXT="____list HZ"; printheadercol $MAG CMDL='for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do echo -e "$src:\t$(vcgencmd measure_clock $src)" ; done'; printcmdline MTXT='____RPI Hz min, cur, max'; printheadercol $MAG CMDL='sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq'; printcmdline CMDL='sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq'; printcmdline CMDL='sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq'; printcmdline MTXT="____core volt"; printheadercol $MAG CMDL='vcgencmd measure_volts core'; printcmdline MTXT="____Monitor"; printheadercol $MAG CMDL='tvservice -n'; printcmdline CMDL='tvservice -s'; printcmdline fi MTXT='____USB'; printheadercol $WHT CMDL='lsusb'; printcmdline MTXT='____Drives and Partitions'; printheadercol $WHT CMDL='lsblk --output NAME,VENDOR,MODEL,SIZE,TYPE,MOUNTPOINT'; printcmdline MTXT='____System space ( and RAM disk )'; printheadercol $WHT CMDL='df -Th'; printcmdline MTXT='_____that is lot of news, thanks Raspberry Pi'; printheadercol $WHT MTXT=' '; DATE=`date +%Y-%m-%d_%H:%M:%S`; printheadercol $WHT$DATE MTXT='you can run it again with:'; printheadercol $MAG MYNAME=$(hostname) MTXT='./raspi-info -cv | tee '$MYNAME'_raspi-info.txt'; printheadercol $BLU MTXT='to save it to a file and later read with:'; printheadercol $MAG MTXT='cat '$MYNAME'_raspi-info.txt | more'; printheadercol $BLU MTXT=$MINF1 printheadercol $MAG MTXT=$MINF2 printheadercol $MAG fi # PMINI False if [ "$PMINI" = "True" ]; then MYNAME=$(hostname) MTXT='i am '$MYNAME; printheadercol $BLU printmaker echo -n 'DEBIAN ' && lsb_release -sc cat /proc/version | grep -o "Linux version............" ifconfig eth0 | grep "inet " ifconfig wlan0 | grep "inet " lsblk --output NAME,VENDOR,MODEL,SIZE,TYPE,MOUNTPOINT df -h --type='ext4' -l --output='source','avail' fi #