嵌入式Linux系统上提取有用的系统信息

来源:互联网 发布:手机淘宝怎么登录不了 编辑:程序博客网 时间:2024/05/16 16:01

下面的脚本可以一次性获取嵌入式Linux系统上有用的系统信息,包括网络信息,存储信息,环境信息等等。

它同时支持周期性运行,可以用于系统监测,比如检查内存泄露等。

注:由于我用的busybox中的top不支持-n 选项,因此使用了后台运行,一定时间后再杀死top进程的办法。

top 命令如果支持-n 选项就非常简单了。

使用方法:


$ sysinfo.sh -h
usage: sysinfo.sh [options]
    show system information.
    Without option, it will show all information.
options:
    -c <count> : show how many times.
    -d: show disk information.
    -e: show environment.
    -g: show general information.
    -i <interval>: show information every <interval> seconds.
    -m: show memory information.
    -n: show network information.
    -p: show process information.
    -r: show release information.
    -h: show help


#!/bin/shtrap my_exit SIGINT#---------------------------- variables --------------------------------------------------PROG_NAME=`basename $0`SHOW_GENERAL=0SHOW_DISK=0SHOW_ENV=0SHOW_MEM=0SHOW_NET=0SHOW_PROC=0INTERVAL=-1ALWAYS_LOOP=0COUNT=-1INDEX=1NOT_SHOW_ALL=0#---------------------------- functions --------------------------------------------------my_exit(){killall top 2>/dev/nullexit 0}run_cmd(){  echo $ $*  eval $*  echo}usage() {  cat << ENDusage: $PROG_NAME [options]    show system information.    Without option, it will show all information.options:    -c <count> : show how many times.    -d: show disk information.    -e: show environment.    -g: show general information.    -i <interval>: show information every <interval> seconds.    -m: show memory information.    -n: show network information.    -p: show process information.    -h: show helpEND}set_show_all(){SHOW_GENERAL=1SHOW_DISK=1SHOW_ENV=1SHOW_MEM=1SHOW_NET=1SHOW_PROC=1}show_general(){echo "++++++++++++++++++++++++++ General +++++++++++++++++++++++++++++++++"run_cmd cat /proc/versionrun_cmd cat /proc/uptimerun_cmd cat /proc/cmdlinerun_cmd hostnamerun_cmd cat /proc/modules}show_disk(){echo "++++++++++++++++++++++++++ Disk ++++++++++++++++++++++++++++++++++++"run_cmd cat /proc/mountsrun_cmd cat /proc/mtdrun_cmd df}show_env(){echo "++++++++++++++++++++++++++ Env +++++++++++++++++++++++++++++++++++++"run_cmd env}show_mem(){echo "++++++++++++++++++++++++++ MEM +++++++++++++++++++++++++++++++++++++"run_cmd cat /proc/vmstatrun_cmd cat /proc/meminforun_cmd top &sleep 2killall top}show_proc(){echo "++++++++++++++++++++++++++ Process +++++++++++++++++++++++++++++++++"run_cmd ps w}show_net(){echo "++++++++++++++++++++++++++ Network +++++++++++++++++++++++++++++++++"run_cmd ifconfigrun_cmd route -nrun_cmd cat /etc/resolv.conf}show_info(){ [ $SHOW_GENERAL -eq 0 ] || show_general [ $SHOW_DISK -eq 0 ] || show_disk [ $SHOW_ENV -eq 0 ] || show_env [ $SHOW_MEM -eq 0 ] || show_mem [ $SHOW_NET -eq 0 ] || show_net [ $SHOW_PROC -eq 0 ] || show_proc}#---------------------------- main() --------------------------------------------------# get command line argumentswhile getopts "c:degi:mnph" options; do  case "$options" in    c) COUNT=$OPTARG ;;    d) SHOW_DISK=1;NOT_SHOW_ALL=1 ;;    e) SHOW_ENV=1;NOT_SHOW_ALL=1 ;;    g) SHOW_GENERAL=1;NOT_SHOW_ALL=1 ;;    i) INTERVAL=$OPTARG ;;    m) SHOW_MEM=1;NOT_SHOW_ALL=1 ;;    n) SHOW_NET=1;NOT_SHOW_ALL=1 ;;    p) SHOW_PROC=1;NOT_SHOW_ALL=1 ;;    h) usage; exit 0;;    \?) usage; exit -1;;  esacdoneshift $((OPTIND - 1))#if set interval and not set count, loop foreverif [ $INTERVAL -lt 0 ]; then  INTERVAL=1else if [ $COUNT -lt 0 ]; then   ALWAYS_LOOP=1 fifiif [ $COUNT -lt 0 ]; then  COUNT=1fiif [ $NOT_SHOW_ALL -eq 0 ]; thenset_show_allfiwhile [ $ALWAYS_LOOP -eq 1 ] || [ $COUNT -gt 0 ]; do  echo "============================= SYS INFO ============================="  echo "#$INDEX Date: `date +%Y-%m-%d_%H:%M:%S`"  show_info  echo "============================= SYS INFO END ========================="  INDEX=$((INDEX + 1))  COUNT=$((COUNT - 1))  sleep $INTERVALdone





原创粉丝点击