jinghong 发表于 2013-2-4 15:49:11

linux系统获取基础硬件信息的shell

来自http://code.google.com/p/aspersa/

#!/bin/sh# This program is part of Aspersa (http://code.google.com/p/aspersa/)# ######################################################################### A script to summarize system information in a nice way.# Goals: work well on Linux; create a compact diff-able report that is# easy to paste into a wiki or email, and easy to scan and compare too.## Usage: $ wget -O- http://aspersa.googlecode.com/svn/trunk/summary |bash# Options are set through the ASPERSA_SKIP environment variable.Set this# variable to a comma-separated list of things you want to omit.# Options:#MOUNT:   Don't print out mounted filesystems and disk fullness.#NETWORK: Don't print out information on network controllers & config.#PROCESS: Don't print out top processes and vmstat information.## Authors:#Baron Schwartz#Kevin van Zonneveld (kvz@php.net || http://kevin.vanzonneveld.net)# ######################################################################### ######################################################################### Globals, settings, helper functions# ########################################################################POSIXLY_CORRECT=1export POSIXLY_CORRECT# The awk code for fuzzy rounding.(It's used in a few places, so makes sense# not to duplicate).It fuzzy-rounds the variable named fuzzy_var.It goes in# steps of 5, 10, 25, then repeats by a factor of 10 larger (50, 100, 250), and# so on, until it finds a number that's large enough.The pattern is slightly# broken between the initial 1 and 50, because rounding to the nearest 2.5# doesn't seem right to me.fuzzy_formula='   rounded = 0;   if (fuzzy_var <= 10 ) {      rounded   = 1;   }   factor = 1;   while ( rounded == 0 ) {      if ( fuzzy_var <= 50 * factor ) {         fuzzy_var = sprintf("%.0f", fuzzy_var / (5 * factor)) * 5 * factor;         rounded   = 1;      }      else if ( fuzzy_var <= 100* factor) {         fuzzy_var = sprintf("%.0f", fuzzy_var / (10 * factor)) * 10 * factor;         rounded   = 1;      }      else if ( fuzzy_var <= 250* factor) {         fuzzy_var = sprintf("%.0f", fuzzy_var / (25 * factor)) * 25 * factor;         rounded   = 1;      }      factor = factor * 10;   }'# Does fuzzy rounding: rounds to nearest interval, but the interval gets larger# as the number gets larger.This is to make things easier to diff.fuzz () {   echo $1 | $AP_AWK "{fuzzy_var=\$1; ${fuzzy_formula} print fuzzy_var;}"}# The temp files are for storing working results so we don't call commands many# times (gives inconsistent results, maybe adds load on things I don't want to# such as RAID controllers).They must not exist -- if they did, someone would# symlink them to /etc/passwd and then run this program as root.Call this# function with "rm" or "touch" as an argument.temp_files() {   for file in /tmp/aspersa /tmp/aspersa2; do      case "$1" in      touch)         if ! touch "${file}"; then            echo "I can't make my temp file ${file}";            exit 1;         fi         ;;      rm)         rm -f "${file}"         ;;      esac   done}# Print a space-padded string into $line.Then translate spaces to hashes, and# underscores to spaces.End result is a line of hashes with words at the# start.section () {   echo "$1" | awk '{l=sprintf("#_%-60s", $0 "_"); print l}' | sed -e 's/ /#/g' -e 's/_/ /g'}# Print a "name | value" line.name_val() {   printf "%12s | %s\n" "$1" "$(echo $2)"}# Converts a value to units of power of 2.Arg 1: the value.Arg 2: precision (defaults to 2).shorten() {   echo $@ | awk '{      unit = "k";      size = 1024;      val= $1;      prec = 2;      if ( $2 ~ /./ ) {         prec = $2;      }      if ( val >= 1099511627776 ) {         size = 1099511627776;         unit = "T";      }      else if ( val >= 1073741824 ) {         size = 1073741824;         unit = "G";      }      else if ( val >= 1048576 ) {         size = 1048576;         unit = "M";      }      printf "%." prec "f%s", val / size, unit;   }'}# ############################################################################### Function to take a file and collapse it into an aggregated list.This# function works on $1, which it expects to be created with 'sort |# uniq -c'.Leading whitespace is deleted.The result will look like# "4xabc, 1xdef"Copy any changes to 'mysql-summary' too.# ##############################################################################group_concat () {   sed -e '{H; $!d}' -e 'x' -e 's/\n[[:space:]]*\([[:digit:]]*\)[[:space:]]*/, \1x/g' -e 's/[[:space:]][[:space:]]*/ /g' -e 's/, //' ${1}   # In words: save the whole file into the hold space,   # {H; $!d}   # Swap it back into the pattern space,   # x   # Join lines with a comma, delete leading whitespace, and put an 'x' between   # the number and the text that follows,   # s/\n[[:space:]]*\([[:digit:]]*\)[[:space:]]*/, \1x/g   # Collapse whitespace,   # s/[[:space:]][[:space:]]*/ /g   # And delete the leading comma-space.   # s/, //}# ############################################################################### Functions for parsing specific files and getting desired info from them.# These are called from within main() and are separated so they can be tested# easily.The calling convention is that the data they need to run is prepared# first by putting it into /tmp/aspersa.Then code that's testing just needs to# put sample data into /tmp/aspersa and call it.# ##############################################################################   # ############################################################################### Parse Linux's /proc/cpuinfo, which should be stored in /tmp/aspersa.# ##############################################################################parse_proc_cpuinfo () {   # Physical processors are indicated by distinct 'physical id'.Virtual CPUs   # are indicated by paragraphs -- one per paragraph.We assume that all   # processors are identical, i.e. that there are not some processors with dual   # cores and some with quad cores.   virtual=$(grep -c ^processor /tmp/aspersa);   physical=$(grep 'physical id' /tmp/aspersa | sort -u | wc -l);   cores=$(grep 'cpu cores' /tmp/aspersa | head -n 1 | cut -d: -f2);   # Older kernel won't have 'physical id' or 'cpu cores'.   if [ "${physical}" = "0" ]; then physical=${virtual}; fi   if [ -z "${cores}" ]; then cores=0; fi   # Test for HTT; cannot trust the 'ht' flag.If physical * cores < virtual,   # then hyperthreading is in use.   cores=$((${cores} * ${physical}));   if [ ${cores} -gt 0 -a $cores -lt $virtual ]; then htt=yes; else htt=no; fi   name_val "Processors" "physical = ${physical}, cores = ${cores}, virtual = ${virtual}, hyperthreading = ${htt}"   awk -F: '/cpu MHz/{print $2}' /tmp/aspersa \      | sort | uniq -c > /tmp/aspersa2   name_val "Speeds" "$(group_concat /tmp/aspersa2)"   awk -F: '/model name/{print $2}' /tmp/aspersa \      | sort | uniq -c > /tmp/aspersa2   name_val "Models" "$(group_concat /tmp/aspersa2)"   awk -F: '/cache size/{print $2}' /tmp/aspersa \      | sort | uniq -c > /tmp/aspersa2   name_val "Caches" "$(group_concat /tmp/aspersa2)"}# ############################################################################### Parse sysctl -a output on FreeBSD, and format it as CPU info.The file is the# first argument.# ##############################################################################parse_sysctl_cpu_freebsd() {   virtual="$(awk '/hw.ncpu/{print $2}' "$1")"   name_val "Processors" "virtual = ${virtual}"   name_val "Speeds" "$(awk '/hw.clockrate/{print $2}' "$1")"   name_val "Models" "$(awk -F: '/hw.model/{print substr($2, 2)}' "$1")"}# ############################################################################### Parse CPU info from psrinfo -v# ##############################################################################parse_psrinfo_cpus() {   name_val Processors $(grep -c 'Status of .* processor' "$1")   awk '/operates at/ {      start = index($0, " at ") + 4;      end   = length($0) - start - 4      print substr($0, start, end);   }' "$1" | sort | uniq -c > /tmp/aspersa2   name_val "Speeds" "$(group_concat /tmp/aspersa2)"}# ############################################################################### Parse the output of 'free -b' plus the contents of /proc/meminfo# ##############################################################################parse_free_minus_b () {   physical=$(awk '/Mem:/{print $3}' "${1}")   swap=$(awk '/Swap:/{print $3}' "${1}")   virtual=$(shorten $(($physical + $swap)))   name_val Total   $(shorten $(awk '/Mem:/{print $2}' "${1}"))   name_val Free    $(shorten $(awk '/Mem:/{print $4}' "${1}"))   name_val Used    "physical = $(shorten ${physical}), swap = $(shorten ${swap}), virtual = ${virtual}"   name_val Buffers $(shorten $(awk '/Mem:/{print $6}' "${1}"))   name_val Caches$(shorten $(awk '/Mem:/{print $7}' "${1}"))   name_val Dirty"$(awk '/Dirty:/ {print $2, $3}' "${1}")"}# ############################################################################### Parse FreeBSD memory info from sysctl output.# ##############################################################################parse_memory_sysctl_freebsd() {   physical=$(awk '/hw.realmem:/{print $2}' "${1}")   mem_hw=$(awk '/hw.physmem:/{print $2}' "${1}")   mem_used=$(awk '      /hw.physmem/                   { mem_hw       = $2; }      /vm.stats.vm.v_inactive_count/ { mem_inactive = $2; }      /vm.stats.vm.v_cache_count/    { mem_cache    = $2; }      /vm.stats.vm.v_free_count/   { mem_free   = $2; }      /hw.pagesize/                  { pagesize   = $2; }      END {         mem_inactive *= pagesize;         mem_cache    *= pagesize;         mem_free   *= pagesize;         print mem_hw - mem_inactive - mem_cache - mem_free;      }   ' "$1");   name_val Total   $(shorten ${mem_hw} 1)   name_val Virtual $(shorten ${physical} 1)   name_val Used    $(shorten ${mem_used} 1)}# ############################################################################### Parse memory devices from the output of 'dmidecode', which should be stored in# /tmp/aspersa.# ##############################################################################parse_dmidecode_mem_devices () {   echo "Locator   Size   Speed             Form Factor   Type          Type Detail"   echo "========= ======== ================= ============= ============= ==========="   # Print paragraphs containing 'Memory Device\n', extract the desired bits,   # concatenate them into one long line, then format as a table.The data   # comes out in this order for each paragraph:   # $2Size         2048 MB   # $3Form Factor<OUT OF SPEC>   # $4Locator      DIMM1   # $5Type         <OUT OF SPEC>   # $6Type DetailSynchronous   # $7Speed      667 MHz (1.5 ns)   sed    -e '/./{H;$!d;}' \          -e 'x;/Memory Device\n/!d;' \          -e 's/: /:/g' \          -e 's/</{/g' \          -e 's/>/}/g' \          -e 's/[ \t]*\n/\n/g' \       /tmp/aspersa \       | awk -F: '/Size|Type|Form.Factor|Type.Detail|[^ ]Locator/{printf("|%s", $2)}/Speed/{print "|" $2}' \       | sed -e 's/No Module Installed/{EMPTY}/' \       | sort \       | awk -F'|' '{printf("%-9s %-8s %-17s %-13s %-13s %-8s\n", $4, $2, $7, $3, $5, $6);}'}# ############################################################################### Parse the output of 'netstat -antp'# ##############################################################################parse_ip_s_link () {   echo "interfacerx_bytes rx_packetsrx_errors   tx_bytes tx_packetstx_errors"   echo "========= ========= ========== ========== ========== ========== =========="   awk "/^*:/ {      save[\"iface\"] = substr(\$2, 0, index(\$2, \":\") - 1);      new = 1;   }   \$0 !~ /[^0-9 ]/ {      if ( new == 1 ) {         new = 0;         fuzzy_var = \$1; ${fuzzy_formula} save[\"bytes\"] = fuzzy_var;         fuzzy_var = \$2; ${fuzzy_formula} save[\"packs\"] = fuzzy_var;         fuzzy_var = \$3; ${fuzzy_formula} save[\"errs\"]= fuzzy_var;      }      else {         fuzzy_var = \$1; ${fuzzy_formula} tx_bytes   = fuzzy_var;         fuzzy_var = \$2; ${fuzzy_formula} tx_packets = fuzzy_var;         fuzzy_var = \$3; ${fuzzy_formula} tx_errors= fuzzy_var;         printf \"%-8s %10d %10d %10d %10d %10d %10d\\n\", save[\"iface\"], save[\"bytes\"], save[\"packs\"], save[\"errs\"], tx_bytes, tx_packets, tx_errors;      }   }" $@}# ############################################################################### Parse the output of 'netstat -antp' which should be in /tmp/aspersa.# ##############################################################################parse_netstat () {   echo "Connections from remote IP addresses"   awk '$1 ~ /^tcp/ && $5 ~ /^/ {      print substr($5, 0, index($5, ":") - 1);   }' /tmp/aspersa | sort | uniq -c \      | awk "{         fuzzy_var=\$1;         ${fuzzy_formula}         printf \"    %-15s %5d\\n\", \$2, fuzzy_var;         }" \      | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4   echo "Connections to local IP addresses"   awk '$1 ~ /^tcp/ && $5 ~ /^/ {      print substr($4, 0, index($4, ":") - 1);   }' /tmp/aspersa | sort | uniq -c \      | awk "{         fuzzy_var=\$1;         ${fuzzy_formula}         printf \"    %-15s %5d\\n\", \$2, fuzzy_var;         }" \      | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4   echo "Connections to top 10 local ports"   awk '$1 ~ /^tcp/ && $5 ~ /^/ {      print substr($4, index($4, ":") + 1);   }' /tmp/aspersa | sort | uniq -c | sort -rn | head -n10 \      | awk "{         fuzzy_var=\$1;         ${fuzzy_formula}         printf \"    %-15s %5d\\n\", \$2, fuzzy_var;         }" | sort   echo "States of connections"   awk '$1 ~ /^tcp/ {      print $6;   }' /tmp/aspersa | sort | uniq -c | sort -rn \      | awk "{         fuzzy_var=\$1;         ${fuzzy_formula}         printf \"    %-15s %5d\\n\", \$2, fuzzy_var;         }" | sort}# ############################################################################### Parse the joined output of 'mount' and 'df -hP'.$1 = file; $2 = ostype.# ##############################################################################parse_filesystems () {   # Filesystem names and mountpoints can be very long.We try to align things   # as nicely as possible by making columns only as wide as needed.This   # requires two passes through the file.The first pass finds the max size of   # these columns and prints out a printf spec, and the second prints out the   # file nicely aligned.   cat > /tmp/aspersa.awk <<-EOF      BEGIN {         device   = 10;         fstype   = 4;         options    = 4;      }      /./ {         f_device   = \$1;         f_fstype   = \$10;         f_options    = substr(\$11, 2, length(\$11) - 2);         if ( "$2" == "FreeBSD" ) {            f_fstype= substr(\$9, 2, length(\$9) - 2);            f_options = substr(\$0, index(\$0, ",") + 2);            f_options = substr(f_options, 1, length(f_options) - 1);         }         if ( length(f_device) > device ) {            device=length(f_device);         }         if ( length(f_fstype) > fstype ) {            fstype=length(f_fstype);         }         if ( length(f_options) > options ) {            options=length(f_options);         }      }      END{         print "%-" device "s %5s %4s %-" fstype "s %-" options "s %s";      }EOF   spec="$( awk -f /tmp/aspersa.awk "$1" )";   #awk -f /tmp/aspersa.awk "$1"   #return;   cat > /tmp/aspersa.awk <<-EOF      BEGIN {         spec="${spec}\\n";         printf spec, "Filesystem", "Size", "Used", "Type", "Opts", "Mountpoint";      }      {         f_fstype   = \$10;         f_options    = substr(\$11, 2, length(\$11) - 2);         if ( "$2" == "FreeBSD" ) {            f_fstype= substr(\$9, 2, length(\$9) - 2);            f_options = substr(\$0, index(\$0, ",") + 2);            f_options = substr(f_options, 1, length(f_options) - 1);         }         printf spec, \$1, \$2, \$5, f_fstype, f_options, \$6;      }EOF   awk -f /tmp/aspersa.awk "$1"}# ############################################################################### Parse the output of fdisk -l, which should be in /tmp/aspersa; there might be# multiple fdisk -l outputs in the file.# ##############################################################################parse_fdisk () {   awk '      BEGIN {         format="%-12s %4s %10s %10s %18s\n";         printf(format, "Device", "Type", "Start", "End", "Size");         printf(format, "============", "====", "==========", "==========", "==================");      }      /Disk.*bytes/ {         disk = substr($2, 1, length($2) - 1);         size = $5;         printf(format, disk, "Disk", "", "", size);      }      /Units/ {         units = $9;      }      /^\/dev/ {         if ( $2 == "*" ) {            start = $3;            end   = $4;         }         else {            start = $2;            end   = $3;         }         printf(format, $1, "Part", start, end, sprintf("%.0f", (end - start) * units));      }   ' /tmp/aspersa}# ############################################################################### Parse the output of dmesg, which should be in /tmp/aspersa, and detect# virtualization.# ##############################################################################parse_virtualization_dmesg () {   if grep -qi -e vmware -e vmxnet -e 'paravirtualized kernel on vmi' /tmp/aspersa; then      echo "VMWare";   elif grep -qi -e 'paravirtualized kernel on xen' -e 'Xen virtual console' /tmp/aspersa; then      echo "Xen";   elif grep -qi qemu /tmp/aspersa; then      echo "QEmu";   elif grep -qi 'paravirtualized kernel on KVM' /tmp/aspersa; then      echo "KVM";   elif grep -q VBOX /tmp/aspersa; then      echo "VirtualBox";   elif grep -qi 'hd.: Virtual .., ATA.*drive' /tmp/aspersa; then      echo "Microsoft VirtualPC";   fi}# ############################################################################### Try to figure out if a system is a guest by looking at prtdiag, smbios, etc.# ##############################################################################parse_virtualization_generic() {   if grep -i -e virtualbox "$1" >/dev/null; then      echo VirtualBox   elif grep -i -e vmware "$1" >/dev/null; then      echo VMWare   fi}# ############################################################################### Parse the output of lspci, which should be in /tmp/aspersa, and detect# Ethernet cards.# ##############################################################################parse_ethernet_controller_lspci () {   grep -i ethernet /tmp/aspersa | cut -d: -f3 | while read line; do      name_val Controller "${line}"   done}# ############################################################################### Parse the output of lspci, which should be in /tmp/aspersa, and detect RAID# controllers.# ##############################################################################parse_raid_controller_lspci () {   if grep -q "RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS" /tmp/aspersa; then      echo 'LSI Logic MegaRAID SAS'   elif grep -q "Fusion-MPT SAS" /tmp/aspersa; then      echo 'Fusion-MPT SAS'   elif grep -q "RAID bus controller: LSI Logic / Symbios Logic Unknown" /tmp/aspersa; then      echo 'LSI Logic Unknown'   elif grep -q "RAID bus controller: Adaptec AAC-RAID" /tmp/aspersa; then      echo 'AACRAID'   elif grep -q "3ware * Storage Controller" /tmp/aspersa; then      echo '3Ware'   elif grep -q "Hewlett-Packard Company Smart Array" /tmp/aspersa; then      echo 'HP Smart Array'   elif grep -q " RAID bus controller: " /tmp/aspersa; then      awk -F: '/RAID bus controller\:/ {print $3" "$5" "$6}' /tmp/aspersa   fi}# ############################################################################### Parse the output of dmesg, which should be in /tmp/aspersa, and detect RAID# controllers.# ##############################################################################parse_raid_controller_dmesg () {   pat='scsi.*: .*'   if grep -qi "${pat}megaraid" /tmp/aspersa; then      echo 'LSI Logic MegaRAID SAS'   elif grep -q "Fusion MPT SAS" /tmp/aspersa; then      echo 'Fusion-MPT SAS'   elif grep -q "${pat}aacraid" /tmp/aspersa; then      echo 'AACRAID'   elif grep -q "${pat}3ware * Storage Controller" /tmp/aspersa; then      echo '3Ware'   fi}# ############################################################################### Parse the output of "hpacucli ctrl all show config", which should be stored in# /tmp/aspersa# ##############################################################################parse_hpacucli () {   grep 'logicaldrive\|physicaldrive' /tmp/aspersa}# ############################################################################### Parse the output of arcconf, which should be stored in /tmp/aspersa# ##############################################################################parse_arcconf () {   model=$(awk -F: '/Controller Model/{print $2}' /tmp/aspersa)   chan="$(awk -F: '/Channel description/{print $2}' /tmp/aspersa)"   cache="$(awk -F: '/Installed memory/{print $2}' /tmp/aspersa)"   status="$(awk -F: '/Controller Status/{print $2}' /tmp/aspersa)"   name_val Specs "${model/ /},${chan},${cache} cache,${status}"   battery=$(grep -A5 'Controller Battery Info' /tmp/aspersa \      | awk '/Capacity remaining/ {c=$4}             /Status/             {s=$3}             /Time remaining/   {t=sprintf("%dd%dh%dm", $7, $9, $11)}             END                  {printf("%d%%, %s remaining, %s", c, t, s)}')   name_val Battery "${battery}"   # ###########################################################################   # Logical devices   # ###########################################################################   echo   echo "LogicalDev Size      RAID Disks Stripe StatusCache"   echo "========== ========= ==== ===== ====== ======= ======="   for dev in $(awk '/Logical device number/{print $4}' /tmp/aspersa); do      sed -n -e "/^Logical device .* ${dev}$/,/^$\|^Logical device number/p" \         /tmp/aspersa \      | awk '         /Logical device name/               {d=$5}         /Size/                              {z=$3 " " $4}         /RAID level/                        {r=$4}         /Group /                     {g++}         /Stripe-unit size/                  {p=$4 " " $5}         /Status of logical/               {s=$6}         /Write-cache mode.*Ena.*write-back/ {c="On (WB)"}         /Write-cache mode.*Ena.*write-thro/ {c="On (WT)"}         /Write-cache mode.*Disabled/      {c="Off"}         END {            printf("%-10s %-9s %4d %5d %-6s %-7s %-7s\n",               d, z, r, g, p, s, c);         }'   done   # ###########################################################################   # Physical devices   # ###########################################################################   echo   echo "PhysiclDev State   Speed         VendorModel      Size      Cache"   echo "========== ======= ============= ======= ============ =========== ======="   # Find the paragraph with physical devices, tabularize with assoc arrays.   tempresult=""   sed -n -e '/Physical Device information/,/^$/p' /tmp/aspersa \      | awk -F: '         /Device #/ {            device=substr($0, index($0, "#"));            devicenames=device;         }         /Device is a/ {            devices = substr($0, index($0, "is a") + 5);         }         /State/ {            devices = substr($2, 2);         }         /Transfer Speed/ {            devices = substr($2, 2);         }         /Vendor/ {            devices = substr($2, 2);         }         /Model/ {            devices = substr($2, 2);         }         /Size/ {            devices = substr($2, 2);         }         /Write Cache/ {            if ( $2 ~ /Enabled .write-back./ )               devices = "On (WB)";            else               if ( $2 ~ /Enabled .write-th/ )                  devices = "On (WT)";               else                  devices = "Off";         }         END {            for ( device in devicenames ) {               if ( devices ~ /Hard drive/ ) {                  printf("%-10s %-7s %-13s %-7s %-12s %-11s %-7s\n",                     devices,                     devices,                     devices,                     devices,                     devices,                     devices,                     devices);               }            }         }'}# ############################################################################### Parse the output of "lsiutil -i -s" from /tmp/aspersa# ##############################################################################parse_fusionmpt_lsiutil () {   echo   awk '/LSI.*Firmware/ { print " ", $0 }' /tmp/aspersa   grep . /tmp/aspersa | sed -n -e '/B___T___L/,$ {s/^//; p}'}# ############################################################################### Parse the output of MegaCli64 -AdpAllInfo -aALL from /tmp/aspersa.# ##############################################################################parse_lsi_megaraid_adapter_info () {   name=$(awk -F: '/Product Name/{print substr($2, 2)}' /tmp/aspersa);   int=$(awk '/Host Interface/{print $4}' /tmp/aspersa);   prt=$(awk '/Number of Backend Port/{print $5}' /tmp/aspersa);   bbu=$(awk '/^BBU             :/{print $3}' /tmp/aspersa);   mem=$(awk '/Memory Size/{print $4}' /tmp/aspersa);   vdr=$(awk '/Virtual Drives/{print $4}' /tmp/aspersa);   dvd=$(awk '/Degraded/{print $3}' /tmp/aspersa);   phy=$(awk '/^Disks/{print $3}' /tmp/aspersa);   crd=$(awk '/Critical Disks/{print $4}' /tmp/aspersa);   fad=$(awk '/Failed Disks/{print $4}' /tmp/aspersa);   name_val Model "${name}, ${int} interface, ${prt} ports"   name_val Cache "${mem} Memory, BBU ${bbu}"}# ############################################################################### Parse the output (saved in /tmp/aspersa) of# /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL# ##############################################################################parse_lsi_megaraid_bbu_status () {   charge=$(awk '/Relative State/{print $5}' /tmp/aspersa);   temp=$(awk '/^Temperature/{print $2}' /tmp/aspersa);   soh=$(awk '/isSOHGood:/{print $2}' /tmp/aspersa);   name_val BBU "${charge}% Charged, Temperature ${temp}C, isSOHGood=${soh}"}# ############################################################################### Parse physical devices from the output (saved in /tmp/aspersa) of# /opt/MegaRAID/MegaCli/MegaCli64 -LdPdInfo -aALL# OR, it will also work with the output of# /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL# ##############################################################################parse_lsi_megaraid_devices () {   echo   echo "PhysiclDev Type State   Errors VendorModel      Size"   echo "========== ==== ======= ====== ======= ============ ==========="   for dev in $(awk '/Device Id/{print $3}' /tmp/aspersa); do      sed -e '/./{H;$!d;}' -e "x;/Device Id: ${dev}/!d;" /tmp/aspersa \      | awk '         /Media Type/                        {d=substr($0, index($0, ":") + 2)}         /PD Type/                           {t=$3}         /Firmware state/                  {s=$3}         /Media Error Count/               {me=$4}         /Other Error Count/               {oe=$4}         /Predictive Failure Count/          {pe=$4}         /Inquiry Data/                      {v=$3; m=$4;}         /Raw Size/                        {z=$3}         END {            printf("%-10s %-4s %-7s %6s %-7s %-12s %-7s\n",               substr(d, 0, 10), t, s, me "/" oe "/" pe, v, m, z);         }'   done}# ############################################################################### Parse virtual devices from the output (saved in /tmp/aspersa) of# /opt/MegaRAID/MegaCli/MegaCli64 -LdPdInfo -aALL# OR, it will also work with the output of# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aAll# ##############################################################################parse_lsi_megaraid_virtual_devices () {   # Somewhere on the Internet, I found the following guide to understanding the   # RAID level, but I don't know the source anymore.   #    Primary-0, Secondary-0, RAID Level Qualifier-0 = 0   #    Primary-1, Secondary-0, RAID Level Qualifier-0 = 1   #    Primary-5, Secondary-0, RAID Level Qualifier-3 = 5   #    Primary-1, Secondary-3, RAID Level Qualifier-0 = 10   # I am not sure if this is always correct or not (it seems correct).The   # terminology MegaRAID uses is not clear to me, and isn't documented that I   # am aware of.Anyone who can clarify the above, please contact me.   echo   echo "VirtualDev Size      RAID Level Disks SpnDpth Stripe StatusCache"   echo "========== ========= ========== ===== ======= ====== ======= ========="   awk '      /^Virtual Disk:/ {         device            = $3;         devicenames = device;      }      /Number Of Drives/ {         devices = substr($0, index($0, ":") + 1);      }      /^Name:/ {         devices = $2 > "" ? $2 : "(no name)";      }      /RAID Level/ {         devices   = substr($3, index($3, "-") + 1, 1);         devices = substr($4, index($4, "-") + 1, 1);         devices = substr($NF, index($NF, "-") + 1, 1);      }      /Span Depth/ {         devices = substr($2, index($2, ":") + 1);      }      /Number of Spans/ {         devices = $4;      }      /^Size:/ {         devices = substr($0, index($0, ":") + 1);      }      /^State:/ {         devices = $2;      }      /^Stripe Size:/ {         devices = $3;      }      /^Current Cache Policy/ {         devices = $4 ~ /WriteBack/ ? "WB" : "WT";         devices = $5 ~ /ReadAheadNone/ ? "no RA" : "RA";      }      END {         for ( device in devicenames ) {            raid = 0;            if ( devices == 1 ) {               raid = 1;               if ( devices == 3 ) {                  raid = 10;               }            }            else {               if ( devices == 5 ) {                  raid = 5;               }            }            printf("%-10s %-9s %-10s %5d %7s %6s %-7s %s\n",               device devices,               devices,               raid " (" devices "-" devices "-" devices ")",               devices,               devices "-" devices,               devices, devices,               devices ", " devices);         }      }' /tmp/aspersa}# ############################################################################### Simplifies vmstat and aligns it nicely.We don't need the memory stats, the# system activity is enough.# ##############################################################################format_vmstat () {   cat > /tmp/aspersa.awk <<-EOF      BEGIN {         format = "%2s %2s%4s %4s %5s %5s %6s %6s %3s %3s %3s %3s %3s\n";      }      /procs/ {         print"procs---swap-- -----io---- ---system---- --------cpu--------";      }      /bo/ {         printf format, "r", "b", "si", "so", "bi", "bo", "ir", "cs", "us", "sy", "il", "wa", "st";      }      \$0 !~ /r/ {            fuzzy_var = \$1;   ${fuzzy_formula}r   = fuzzy_var;            fuzzy_var = \$2;   ${fuzzy_formula}b   = fuzzy_var;            fuzzy_var = \$7;   ${fuzzy_formula}si= fuzzy_var;            fuzzy_var = \$8;   ${fuzzy_formula}so= fuzzy_var;            fuzzy_var = \$9;   ${fuzzy_formula}bi= fuzzy_var;            fuzzy_var = \$10;${fuzzy_formula}bo= fuzzy_var;            fuzzy_var = \$11;${fuzzy_formula}ir= fuzzy_var;            fuzzy_var = \$12;${fuzzy_formula}cs= fuzzy_var;            fuzzy_var = \$13;                  us= fuzzy_var;            fuzzy_var = \$14;                  sy= fuzzy_var;            fuzzy_var = \$15;                  il= fuzzy_var;            fuzzy_var = \$16;                  wa= fuzzy_var;            fuzzy_var = \$17;                  st= fuzzy_var;            printf format, r, b, si, so, bi, bo, ir, cs, us, sy, il, wa, st;         }EOF      awk -f /tmp/aspersa.awk /tmp/aspersa   }# ############################################################################### The main() function is called at the end of the script.This makes it# testable.Major bits of parsing are separated into functions for testability.# As a general rule, we cannot 'cp' files from /proc, because they might be# empty afterwards.(I've seen 'cp /proc/cpuinfo' create an empty file.)But# 'cat' works okay.# ##############################################################################main () {   # Begin by setting the $PATH to include some common locations that are not   # always in the $PATH, including the "sbin" locations, and some common   # locations for proprietary management software, such as RAID controllers.   export PATH="${PATH}:/usr/local/bin:/usr/bin:/bin:/usr/libexec"   export PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"   export PATH="${PATH}:/usr/StorMan/:/opt/MegaRAID/MegaCli/";   # Set up temporary files.   temp_files "rm"   temp_files "touch"   section Aspersa_System_Summary_Report   # ########################################################################   # Grab a bunch of stuff and put it into temp files for later.   # ########################################################################   sysctl -a > /tmp/aspersa.sysctl 2>/dev/null   # ########################################################################   # General date, time, load, etc   # ########################################################################   platform="$(uname -s)"   name_val "Date" "`date -u +'%F %T UTC'` (local TZ: `date +'%Z %z'`)"   name_val "Hostname" "$(uname -n)"   name_val "Uptime" "$(uptime | awk '{print substr($0, index($0, "up") + 3)}')"   if which dmidecode > /dev/null 2>&1; then      vendor="$(dmidecode -s system-manufacturer 2>/dev/null | sed 's/ *$//g')"      if [ "${vendor}" ]; then         product="$(dmidecode -s system-product-name 2>/dev/null | sed 's/ *$//g')"         version="$(dmidecode -s system-version 2>/dev/null | sed 's/ *$//g')"         chassis="$(dmidecode -s chassis-type 2>/dev/null | sed 's/ *$//g')"         system="${vendor}; ${product}; v${version} (${chassis})"         name_val "System" "${system}";         servicetag="$(dmidecode -s system-serial-number 2>/dev/null | sed 's/ *$//g')"         name_val "Service Tag" "${servicetag:-Not found}";      fi   fi   name_val "Platform" "${platform}"   if [ "${platform}" = "SunOS" ]; then      if which zonename >/dev/null 2>&1 ; then         name_val "Zonename" "$(zonename)"      fi   fi   # Try to find all sorts of different files that say what the release is.   if [ "${platform}" = "Linux" ]; then      kernel="$(uname -r)"      if [ -e /etc/fedora-release ]; then         release=$(cat /etc/fedora-release);      elif [ -e /etc/redhat-release ]; then         release=$(cat /etc/redhat-release);      elif [ -e /etc/system-release ]; then         release=$(cat /etc/system-release);      elif which lsb_release >/dev/null 2>&1; then         release="$(lsb_release -ds) ($(lsb_release -cs))"      elif [ -e /etc/lsb-release ]; then         release=$(grep DISTRIB_DESCRIPTION /etc/lsb-release |awk -F'=' '{print $2}' |sed 's#"##g');      elif [ -e /etc/debian_version ]; then         release="Debian-based version $(cat /etc/debian_version)";         if [ -e /etc/apt/sources.list ]; then             code=`cat /etc/apt/sources.list |awk'/^deb/ {print $3}' |awk -F/ '{print $1}'| awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -rn |head -n1 |awk '{print $2}'`             release="${release} (${code})"      fi      elif ls /etc/*release >/dev/null 2>&1; then         if grep -q DISTRIB_DESCRIPTION /etc/*release; then            release=$(grep DISTRIB_DESCRIPTION /etc/*release | head -n1);         else            release=$(cat /etc/*release | head -n1);         fi      fi   elif [ "${platform}" = "FreeBSD" ]; then      release="$(uname -r)"      kernel="$(sysctl -n kern.osrevision)"   elif [ "${platform}" = "SunOS" ]; then      release="$(head -n1 /etc/release)"      if [ -z "${release}" ]; then         release="$(uname -r)"      fi      kernel="$(uname -v)"   fi   name_val Release "${release}"   name_val Kernel "${kernel}"   CPU_ARCH='32-bit'   OS_ARCH='32-bit'   if [ "${platform}" = "Linux" ]; then      if grep -q ' lm ' /proc/cpuinfo; then         CPU_ARCH='64-bit'      fi   elif [ "${platform}" = "FreeBSD" ]; then      if sysctl hw.machine_arch | grep -v 'i86' >/dev/null; then         CPU_ARCH='64-bit'      fi   elif [ "${platform}" = "SunOS" ]; then      if isainfo -b | grep 64 >/dev/null ; then         CPU_ARCH="64-bit"      fi   fi   if file /bin/sh | grep '64-bit' >/dev/null; then      OS_ARCH='64-bit'   fi   name_val "Architecture" "CPU = $CPU_ARCH, OS = $OS_ARCH"   # Threading library   if [ "${platform}" = "Linux" ]; then      name_val Threading "$(getconf GNU_LIBPTHREAD_VERSION)"   fi   if [ -x /lib/libc.so.6 ]; then      name_val "Compiler" "$(/lib/libc.so.6 | grep 'Compiled by' | cut -c13-)"   fi   if [ "${platform}" = "Linux" ]; then      if getenforce >/dev/null 2>&1; then         getenforce="$(getenforce 2>&1)";      fi      name_val "SELinux" "${getenforce:-No SELinux detected}";   fi   # We look in dmesg for virtualization information first, because it's often   # available to non-root users and usually has telltale signs.It's most   # reliable to look at /var/log/dmesg if possible.There are a number of   # other ways to find out if a system is virtualized.   cat /var/log/dmesg > /tmp/aspersa 2>/dev/null   if [ ! -s /tmp/aspersa ]; then      dmesg > /tmp/aspersa 2>/dev/null   fi   if [ -s /tmp/aspersa ]; then      virt="$(parse_virtualization_dmesg)"   fi   if [ -z "${virt}" ]; then      if which lspci >/dev/null 2>&1; then         lspci > /tmp/aspersa 2>/dev/null         if grep -qi virtualbox /tmp/aspersa; then            virt=VirtualBox         elif grep -qi vmware /tmp/aspersa; then            virt=VMWare         elif [ -e /proc/user_beancounters ]; then            virt="OpenVZ/Virtuozzo"         fi      fi   elif [ "${platform}" = "FreeBSD" ]; then      if ps -o stat | grep J ; then         virt="FreeBSD Jail"      fi   elif [ "${platform}" = "SunOS" ]; then      if which prtdiag >/dev/null 2>&1 && prtdiag > /tmp/aspersa.prtdiag 2>/dev/null; then         virt="$(parse_virtualization_generic /tmp/aspersa.prtdiag)"      elif which smbios >/dev/null 2>&1 && smbios > /tmp/aspersa.smbios 2>/dev/null; then         virt="$(parse_virtualization_generic /tmp/aspersa.smbios)"      fi   fi   name_val Virtualized "${virt:-No virtualization detected}"   # ########################################################################   # Processor/CPU, Memory, Swappiness, dmidecode   # ########################################################################   section Processor   if [ -f /proc/cpuinfo ]; then      cat /proc/cpuinfo > /tmp/aspersa 2>/dev/null      parse_proc_cpuinfo   elif [ "${platform}" = "FreeBSD" ]; then      parse_sysctl_cpu_freebsd /tmp/aspersa.sysctl   elif [ "${platform}" = "SunOS" ]; then      psrinfo -v > /tmp/aspersa      parse_psrinfo_cpus /tmp/aspersa      # TODO: prtconf -v actually prints the CPU model name etc.   fi   section Memory   if [ "${platform}" = "Linux" ]; then      free -b > /tmp/aspersa      cat /proc/meminfo >> /tmp/aspersa      parse_free_minus_b /tmp/aspersa   elif [ "${platform}" = "FreeBSD" ]; then      parse_memory_sysctl_freebsd /tmp/aspersa.sysctl   elif [ "${platform}" = "SunOS" ]; then      name_val Memory "$(prtconf | awk -F: '/Memory/{print $2}')"   fi   rss=$(ps -eo rss 2>/dev/null | awk '//{total += $1 * 1024} END {print total}')   name_val UsedRSS "$(shorten ${rss} 1)"   if [ "${platform}" = "Linux" ]; then      name_val Swappiness "$(sysctl vm.swappiness 2>&1)"      name_val DirtyPolicy "$(sysctl vm.dirty_ratio 2>&1), $(sysctl vm.dirty_background_ratio 2>&1)"      if sysctl vm.dirty_bytes > /dev/null 2>&1; then         name_val DirtyStatus "$(sysctl vm.dirty_bytes 2>&1), $(sysctl vm.dirty_background_bytes 2>&1)"      fi   fi   if which dmidecode >/dev/null 2>&1 && dmidecode > /tmp/aspersa 2>/dev/null; then      parse_dmidecode_mem_devices   fi   # ########################################################################   # Disks, RAID, Filesystems   # ########################################################################   # TODO: Add info about software RAID   if echo "${ASPERSA_SKIP}" | grep -v MOUNT >/dev/null; then      if [ "${platform}" != "SunOS" ]; then         section "Mounted_Filesystems"         cmd="df -h"         if [ "${platform}" = "Linux" ]; then            cmd="df -h -P"         fi         $cmd | sort > /tmp/aspersa2         mount | sort | join /tmp/aspersa2 - > /tmp/aspersa         parse_filesystems /tmp/aspersa "${platform}"      fi   fi   if [ "${platform}" = "Linux" ]; then      section "Disk_Schedulers_And_Queue_Size"      echo "" > /tmp/aspersa      for disk in $(ls /sys/block/ | grep -v -e ram -e loop -e 'fd'); do         if [ -e "/sys/block/${disk}/queue/scheduler" ]; then            name_val "${disk}" "$(cat /sys/block/${disk}/queue/scheduler | grep -o '\[.*\]') $(cat /sys/block/${disk}/queue/nr_requests)"            fdisk -l "/dev/${disk}" >> /tmp/aspersa 2>/dev/null         fi      done      # Relies on /tmp/aspersa having data from the Disk Schedulers loop.      section "Disk_Partioning"      parse_fdisk      section "Kernel_Inode_State"      for file in dentry-state file-nr inode-nr; do         name_val "${file}" "$(cat /proc/sys/fs/${file} 2>&1)"      done      section "LVM_Volumes"      if which lvs >/dev/null 2>&1 && test -x "$(which lvs)"; then         lvs 2>&1      else         echo "Cannot execute 'lvs'";      fi   fi   section "RAID_Controller"   # ########################################################################   # We look in lspci first because it's more reliable, then dmesg, because it's   # often available to non-root users.It's most reliable to look at   # /var/log/dmesg if possible.   # ########################################################################   if which lspci >/dev/null 2>&1 && lspci > /tmp/aspersa 2>/dev/null; then      controller="$(parse_raid_controller_lspci)"   fi   if [ -z "${controller}" ]; then      cat /var/log/dmesg > /tmp/aspersa 2>/dev/null      if [ ! -s /tmp/aspersa ]; then         dmesg > /tmp/aspersa 2>/dev/null      fi      controller="$(parse_raid_controller_dmesg)"   fi   name_val Controller "${controller:-No RAID controller detected}"   # ########################################################################   # Attempt to get, parse, and print RAID controller status from possibly   # proprietary management software.Any executables that are normally stored   # in a weird location, such as /usr/StorMan/arcconf, should have their   # location added to $PATH at the beginning of main().   # ########################################################################   notfound=""   if [ "${controller}" = "AACRAID" ]; then      if arcconf getconfig 1 > /tmp/aspersa 2>/dev/null; then         parse_arcconf      elif ! which arcconf >/dev/null 2>&1; then         notfound="e.g. http://www.adaptec.com/en-US/support/raid/scsi_raid/ASR-2120S/"      fi   elif [ "${controller}" = "HP Smart Array" ]; then      if hpacucli ctrl all show config > /tmp/aspersa 2>/dev/null; then         parse_hpacucli      elif ! which hpacucli >/dev/null 2>&1; then         notfound="your package repository or the manufacturer's website"      fi   elif [ "${controller}" = "LSI Logic MegaRAID SAS" ]; then      if MegaCli64 -AdpAllInfo -aALL -NoLog > /tmp/aspersa 2>/dev/null; then         parse_lsi_megaraid_adapter_info      elif ! which MegaCli64 >/dev/null 2>&1; then         notfound="your package repository or the manufacturer's website"      fi      if MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL -NoLog > /tmp/aspersa 2>/dev/null; then         parse_lsi_megaraid_bbu_status      fi      if MegaCli64 -LdPdInfo -aALL -NoLog > /tmp/aspersa 2>/dev/null; then         parse_lsi_megaraid_virtual_devices         parse_lsi_megaraid_devices      fi   fi   if [ "${notfound}" ]; then      echo "   RAID controller software not found; try getting it from"      echo "   ${notfound}"   fi   if echo "${ASPERSA_SKIP}" | grep -v NETWORK >/dev/null; then      # #####################################################################      # Network stuff      # #####################################################################      if [ "${platform}" = "Linux" ]; then         section Network_Config         if which lspci > /dev/null 2>&1 && lspci > /tmp/aspersa 2>/dev/null; then            parse_ethernet_controller_lspci         fi         if sysctl net.ipv4.tcp_fin_timeout > /dev/null 2>&1; then            name_val "FIN Timeout" "$(sysctl net.ipv4.tcp_fin_timeout)"            name_val "Port Range" "$(sysctl net.ipv4.ip_local_port_range)"         fi      fi      # TODO cat /proc/sys/net/ipv4/ip_conntrack_max ; it might be      # /proc/sys/net/netfilter/nf_conntrack_max or /proc/sys/net/nf_conntrack_max      # in new kernels like Fedora 12?      if which ip >/dev/null 2>&1 && ip -s link > /tmp/aspersa 2>/dev/null; then         section Interface_Statistics         parse_ip_s_link /tmp/aspersa      fi      if [ "${platform}" = "Linux" ]; then         section Network_Connections         if netstat -antp > /tmp/aspersa 2>/dev/null; then            parse_netstat         fi      fi   fi   # ########################################################################   # Processes, load, etc   # ########################################################################   if echo "${ASPERSA_SKIP}" | grep -v PROCESS >/dev/null; then      section Top_Processes      if which prstat > /dev/null 2>&1; then         prstat | head      elif which top > /dev/null 2>&1 ; then         cmd="top -bn 1"         if [ "${platform}" = "FreeBSD" ]; then            cmd="top -b -d 1"         fi         $cmd | sed -e 's# *$##g' -e '/./{H;$!d;}' -e 'x;/PID/!d;' | grep . | head      fi      if which vmstat > /dev/null 2>&1 ; then         section "Simplified_and_fuzzy_rounded_vmstat_(wait_please)"         vmstat 1 5 > /tmp/aspersa         if [ "${platform}" = "Linux" ]; then            format_vmstat         else            # TODO: simplify/format for other platforms            cat /tmp/aspersa         fi      fi   fi   # ########################################################################   # All done.Signal the end so it's explicit.   # ########################################################################   temp_files "rm"   temp_files "check"   section The_End}# Execute the program if it was not included from another file.This makes it# possible to include without executing, and thus test.if [ "$(basename "$0")" = "summary" ] || [ "$(basename "$0")" = "bash" -a "$_" = "$0" ]; then    main $@fi

这是我开发机器上的信息
# Aspersa System Summary Report ##############################      Date | 2011-06-12 08:56:30 UTC (local TZ: CST +0800)    Hostname | ubuntu1104-dev01      Uptime | 2 days, 6:37, 2 users, load average: 0.00, 0.01, 0.05      System | Dell Inc.; OptiPlex 990; v01 (Mini Tower) Service Tag | XXXXXXX    Platform | Linux   Release | Ubuntu 11.04 (natty)      Kernel | 2.6.38-8-genericArchitecture | CPU = 64-bit, OS = 64-bit   Threading | NPTL 2.13   SELinux | No SELinux detected Virtualized | No virtualization detected# Processor ##################################################Processors | physical = 1, cores = 4, virtual = 8, hyperthreading = yes      Speeds | 7x1600.000, 1x2600.000      Models | 8xIntel(R) Core(TM) i7-2600 CPU @ 3.40GHz      Caches | 8x8192 KB# Memory #####################################################       Total | 15.66G      Free | 13.08G      Used | physical = 2.59G, swap = 0.00k, virtual = 2.59G   Buffers | 175.48M      Caches | 1.55G       Dirty | 40 kB   UsedRSS | 746.0MSwappiness | vm.swappiness = 60 DirtyPolicy | vm.dirty_ratio = 10, vm.dirty_background_ratio = 5 DirtyStatus | vm.dirty_bytes = 0, vm.dirty_background_bytes = 0Locator   Size   Speed             Form Factor   Type          Type Detail========= ======== ================= ============= ============= ===========ChannelA-DIMM0 4096 MB1333 MHz (0.8 ns) DIMM          {OUT OF SPEC} SynchronousChannelA-DIMM1 4096 MB1333 MHz (0.8 ns) DIMM          {OUT OF SPEC} SynchronousChannelB-DIMM0 4096 MB1333 MHz (0.8 ns) DIMM          {OUT OF SPEC} SynchronousChannelB-DIMM1 4096 MB1333 MHz (0.8 ns) DIMM          {OUT OF SPEC} Synchronous# Mounted Filesystems ########################################FilesystemSize Used Type       Opts                           Mountpoint/dev/sda1   902G   2% ext4       rw,errors=remount-ro,commit=0    /none      7.9G   0% devpts   rw,noexec,nosuid,gid=5,mode=0620 /var/locknone      7.9G   0% tmpfs      rw,nosuid,nodev                  /var/locknone      7.9G   0% devtmpfs   rw,mode=0755                     /var/locknone      7.9G   0% debugfs    rw                               /var/locknone      7.9G   0% securityfs rw                               /var/locknone      7.9G   0% sysfs      rw,noexec,nosuid,nodev         /var/locknone      7.9G   0% tmpfs      rw,noexec,nosuid,nodev         /var/locknone      7.9G   0% tmpfs      rw,nosuid,mode=0755            /var/locknone      7.9G   1% devpts   rw,noexec,nosuid,gid=5,mode=0620 /dev/shmnone      7.9G   1% tmpfs      rw,nosuid,nodev                  /dev/shmnone      7.9G   1% devtmpfs   rw,mode=0755                     /dev/shmnone      7.9G   1% debugfs    rw                               /dev/shmnone      7.9G   1% securityfs rw                               /dev/shmnone      7.9G   1% sysfs      rw,noexec,nosuid,nodev         /dev/shmnone      7.9G   1% tmpfs      rw,noexec,nosuid,nodev         /dev/shmnone      7.9G   1% tmpfs      rw,nosuid,mode=0755            /dev/shmnone      7.9G   1% devpts   rw,noexec,nosuid,gid=5,mode=0620 /devnone      7.9G   1% tmpfs      rw,nosuid,nodev                  /devnone      7.9G   1% devtmpfs   rw,mode=0755                     /devnone      7.9G   1% debugfs    rw                               /devnone      7.9G   1% securityfs rw                               /devnone      7.9G   1% sysfs      rw,noexec,nosuid,nodev         /devnone      7.9G   1% tmpfs      rw,noexec,nosuid,nodev         /devnone      7.9G   1% tmpfs      rw,nosuid,mode=0755            /devnone      7.9G   1% devpts   rw,noexec,nosuid,gid=5,mode=0620 /var/runnone      7.9G   1% tmpfs      rw,nosuid,nodev                  /var/runnone      7.9G   1% devtmpfs   rw,mode=0755                     /var/runnone      7.9G   1% debugfs    rw                               /var/runnone      7.9G   1% securityfs rw                               /var/runnone      7.9G   1% sysfs      rw,noexec,nosuid,nodev         /var/runnone      7.9G   1% tmpfs      rw,noexec,nosuid,nodev         /var/runnone      7.9G   1% tmpfs      rw,nosuid,mode=0755            /var/run# Disk Schedulers And Queue Size #############################         sda | 128         sr0 | 128# Disk Partioning ############################################Device       Type      Start      End               Size============ ==== ========== ========== ==================/dev/sda   Disk                            1000204886016/dev/sda1    Part          1   119519       983069015040/dev/sda2    Part   119519   121602      17133258240/dev/sda5    Part   119519   121602      17133258240# Kernel Inode State #########################################dentry-state | 153236 143621 45 0 0 0   file-nr | 5664 0 1601386    inode-nr | 76942 2365# LVM Volumes ################################################Cannot execute 'lvs'# RAID Controller ############################################Controller | Intel Corporation 82801 SATA RAID Controller (rev 04)# Network Config #############################################Controller | Intel Corporation 82579LM Gigabit Network Connection (rev 04) FIN Timeout | net.ipv4.tcp_fin_timeout = 60Port Range | net.ipv4.ip_local_port_range = 32768 61000# Interface Statistics #######################################interfacerx_bytes rx_packetsrx_errors   tx_bytes tx_packetstx_errors========= ========= ========== ========== ========== ========== ==========l      2000000000   12500000          0 2000000000   12500000          0eth       100000000   350000          0   12500000      80000          0vboxnet         0          0          0          0          0          0# Network Connections ########################################Connections from remote IP addresses    127.0.0.            2    192.168.0.23      1Connections to local IP addresses    127.0.0.            2    192.168.0.24      1Connections to top 10 local ports    22                  1    4369                1    45022               1States of connections    ESTABLISHED         3    LISTEN            8# Top Processes ##############################################PID USER      PRNIVIRTRESSHR S %CPU %MEM    TIME+COMMAND    1 root      20   0 24008 2212 1356 S    00.0   0:01.78 init    2 root      20   0   0    0    0 S    00.0   0:00.00 kthreadd    3 root      20   0   0    0    0 S    00.0   0:01.98 ksoftirqd/0    5 root      20   0   0    0    0 S    00.0   0:00.25 kworker/u:0    6 root      RT   0   0    0    0 S    00.0   0:00.00 migration/0    7 root      RT   0   0    0    0 S    00.0   0:00.00 migration/1    8 root      20   0   0    0    0 S    00.0   0:03.52 kworker/1:0    9 root      20   0   0    0    0 S    00.0   0:00.77 ksoftirqd/1   11 root      RT   0   0    0    0 S    00.0   0:00.00 migration/2# Simplified and fuzzy rounded vmstat (wait please) ##########procs---swap-- -----io---- ---system---- --------cpu--------   rb    si   so    bi    bo   ir   csussyilwast   00   0    0   1   1   25      1   0   099   0       00   0    0   0   0    250    450   0   0 100   0       00   0    0   0   125    150    250   0   099   1       00   0    0   0   0    100    150   0   0 100   0       00   0    0   0   0    100    225   0   0 100   0    # The End ####################################################
页: [1]
查看完整版本: linux系统获取基础硬件信息的shell