能通配一部份的设备,实际应用中可根据实际情况进行完善
- #!/bin/bash
- >mtmp1.txt.txt >mtmp2.txt.txt >cputmp1.txt.txt >cputmp2.txt.txt >disktmp1.txt.txt >disktmp2.txt.txt >bdtmp1.txt.txt >bdtmp2.txt.txt >Powertmp1.txt.txt >Powertmp2.txt.txt >results.txt.txt
-
- echo "内存信息" >> results.txt.txt
- dmidecode -t memory > mtmp1.txt.txt
- awk 'BEGIN { RS="Memory Device" } NR>1 { gsub(/\n\s*/, " "); print $0 }' mtmp1.txt.txt | grep -v "Serial Number: NO DIMM" > mtmp2.txt.txt
-
- while read line; do
- Size=$(echo $line | awk -F "Size:" '{print $2}' | awk '{print $1$2}')
- SN=$(echo $line | awk -F "Serial Number:" '{print $2}' | awk '{print $1}')
- Locator=$(echo $line | awk -F "Locator:" '{print $2}' | awk '{print $1}')
- Type=$(echo $line | awk -F "Type:" '{print $2}' | awk '{print $1}')
- Speed=$(echo $line | awk -F "Speed:" '{print $2}' | awk '{print $1$2}')
- Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk '{print $1}')
- PN=$(echo $line | awk -F "Part Number:" '{print $2}' | awk '{print $1}')
- echo "Size:$Size##SN:$SN##Locator:$Locator##Type:$Type##Speed:$Speed##Manufacturer:$Manufacturer##PN:$PN" >> results.txt.txt
- done < mtmp2.txt.txt
- echo "--------" >> results.txt.txt
-
-
- echo "CPU信息" >> results.txt.txt
- dmidecode -t processor > cputmp1.txt.txt
- awk 'BEGIN { RS="Processor Information" } NR>1 { gsub(/\n\s*/, " "); print $0 }' cputmp1.txt.txt > cputmp2.txt.txt
- while read line; do
- SocketDes=$(echo $line | awk -F "Socket Designation:" '{print $2}' | awk '{print $1}') #插槽
- Version=$(echo $line |awk -F "Version:" '{print $2}' | awk -F "Voltage" '{print $1}')
- CoreCount=$(echo $line | awk -F "Core Count:" '{print $2}' | awk '{print $1}')
- Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk '{print $1$2}')
- echo "SocketDes:$SocketDes##Version:$Version##CoreCount:$CoreCount##Manufacturer:$Manufacturer" >> results.txt.txt
- done < cputmp2.txt.txt
- echo "--------" >> results.txt.txt
-
- echo "硬盘信息" >> results.txt.txt
- fun_lsblkgetinfos() {
- sdlists=( $(lsblk | grep disk | awk '{print $1}') )
- for sds in "${sdlists[@]}"
- do
- Vendor=$(lsblk -o NAME,VENDOR | grep -w $sds | awk '{print $2}')
- Sn=$(lsblk -o NAME,SERIAL | grep -w $sds | awk '{print $2}')
- UserCapacity=$(lsblk -o NAME,SIZE | grep -w $sds | awk '{print $2}')
- echo "Vendor:$Vendor##Sn:$Sn##UserCapacity:$UserCapacity" >> results.txt.txt
- done
- }
-
- fun_smartctlget() {
- lsblk | grep disk | awk '{print "/dev/"$1}' | xargs -I {} smartctl -i {} > disktmp1.txt.txt
- awk 'BEGIN { RS="START OF INFORMATION SECTION" } NR>1 { gsub(/\n\s*/, " "); print $0 }' disktmp1.txt.txt > disktmp2.txt.txt
-
- while read line; do
- Vendor=$(echo $line | awk -F "Vendor:" '{print $2}' | awk '{print $1}')
- Sn=$(echo $line | awk -F "Serial number:" '{print $2}' | awk '{print $1}')
- UserCapacity=$(echo $line | awk -F "User Capacity:" '{print $2}' | awk '{print $1$2$3$4}')
- echo "Vendor:$Vendor##Sn:$Sn##UserCapacity:$UserCapacity" >> results.txt.txt
- done < disktmp2.txt.txt
- }
-
- lsblk | grep disk | awk '{print "/dev/"$1}' | xargs -I {} smartctl -i {} > disktmp1.txt.txt >/dev/null 2>&1 && fun_smartctlget
- lsblk | grep disk | awk '{print "/dev/"$1}' | xargs -I {} smartctl -i {} > disktmp1.txt.txt >/dev/null 2>&1 || fun_lsblkgetinfos
- echo "--------" >> results.txt.txt
-
- echo "网卡信息" >> results.txt.txt
- OLD_IFS=$IFS
- IFS=$'\n'
- strlists=( $(ls /sys/class/net/ | grep -E 'ens|enp' | xargs -I {} ethtool {} | awk 'BEGIN { RS="Settings for " } NR>1 { gsub(/\n\s*/, " "); print $0 }') )
- for strs in "${strlists[@]}"
- do
- eths=$(echo $strs | awk '{print $1}' | awk -F ":" '{print $1}')
- spd=$(echo $strs | awk -F "Supported link modes:" '{print $2}' | awk -F "Supported pause frame use" '{print $1}'| sed 's/^[[:space:]]*//g')
- spauto=$(echo $strs | awk -F "Supports auto-negotiation:" '{print $2}' | awk '{print $1}')
- auto=$(echo $strs | awk -F "Auto-negotiation:" '{print $2}' | awk '{print $1}')
- mac=$(cat /sys/class/net/$eths/address)
- state=$(cat /sys/class/net/$eths/operstate)
- echo "网卡:$eths##支持的链路模式:$spd##是否支持自动协商:$spauto##自动协商模式:$auto##MAC地址:$mac##状态:$state" >> results.txt.txt
-
- done
- IFS=$OLD_IFS
- echo "--------" >> results.txt.txt
-
- echo "主板信息" >> results.txt.txt
- dmidecode -t baseboard > bdtmp1.txt.txt
- awk 'BEGIN { RS="Handle 0x" } NR>1 { gsub(/\n\s*/, " "); print $0 }' bdtmp1.txt.txt > bdtmp2.txt.txt
-
- FIRST_LINE=true
- while read line; do
- if $FIRST_LINE; then
- Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk '{print $1}')
- ProductName=$(echo $line | awk -F "Product Name:" '{print $2}' | awk '{print $1}')
- Version=$(echo $line | awk -F "Version:" '{print $2}' | awk '{print $1}')
- SerialNumber=$(echo $line | awk -F "Serial Number:" '{print $2}' | awk '{print $1}')
- AssetTag=$(echo $line | awk -F "Asset Tag:" '{print $2}' | awk '{print $1}')
- echo "主板: Manufacturer:$Manufacturer##ProductName:$ProductName##Version:$Version##SerialNumber:$SerialNumber##资产标签:$AssetTag" >> results.txt.txt
- FIRST_LINE=false
- else
- ReDesign=$(echo $line | awk -F "Reference Designation:" '{print $2}' | awk -F "Type:" '{print $1}' | sed 's/^[[:space:]]*//g')
- Type=$(echo $line | awk -F "Type:" '{print $2}' | awk '{print $1}')
- Status=$(echo $line | awk -F "Status:" '{print $2}' | awk '{print $1}')
- BusAddress=$(echo $line | awk -F "Bus Address:" '{print $2}' | awk '{print $1}')
- echo "主板部件: 名称:$ReDesign##Type:$Type##Status:$Status##总线地址:$BusAddress" >> results.txt.txt
- fi
- done < bdtmp2.txt.txt
- echo "--------" >> results.txt.txt
-
- echo "电源信息" >> results.txt.txt
- dmidecode -t 39 > Powertmp1.txt.txt
- awk 'BEGIN { RS="DMI type 39" } NR>1 { gsub(/\n\s*/, " "); print $0 }' Powertmp1.txt.txt > Powertmp2.txt.txt
-
- while read line; do
- UnitGroup=$(echo $line | awk -F "Power Unit Group:" '{print $2}' | awk '{print $1}') #插槽
- Location=$(echo $line | awk -F "Location:" '{print $2}' | awk '{print $1}')
- Names=$(echo $line | awk -F "Name:" '{print $2}' | awk '{print $1}')
- Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk -F "Serial Number:" '{print $1}'| sed 's/^[[:space:]]*//g')
- SNumber=$(echo $line | awk -F "Serial Number:" '{print $2}' | awk '{print $1}')
- ModelPN=$(echo $line | awk -F "Model Part Number:" '{print $2}' | awk -F "Revision:" '{print $1}'| sed 's/^[[:space:]]*//g')
- Rev=$(echo $line | awk -F "Revision:" '{print $2}' | awk '{print $1}')
- MPC=$(echo $line | awk -F "Max Power Capacity:" '{print $2}' | awk -F "Status:" '{print $1}'| sed 's/^[[:space:]]*//g')
- Status=$(echo $line | awk -F "Status:" '{print $2}' | awk -F "Type:" '{print $1}'| sed 's/^[[:space:]]*//g')
- Hable=$(echo $line | awk -F "Hot Replaceable:" '{print $2}' | awk '{print $1}')
- echo "Group:$UnitGroup##位置:$Location##Names:$Names##Manufacturer:$Manufacturer##SN:$SNumber##ModelPN:$ModelPN##Revision:$Rev##最大功耗:$MPC##Status:$Status##热拔插:$Hable">> results.txt.txt
- done < Powertmp2.txt.txt
- echo "--------" >> results.txt.txt
-
- #GPU
- echo "GPU信息" >> results.txt.txt
- #lspci -vnn | grep VGA -A 12
-
- fun_nvidiasmiget() {
- gnums=$(nvidia-smi -q | grep "Attached GPUs" | awk -F ": " '{print $2}')
- DERV=$(nvidia-smi -q | grep "Driver Version" | awk -F ": " '{print $2}')
- echo "GPU数量:$gnums##驱动程序版本:$DERV" >> results.txt.txt
- OLD_IFS=$IFS
- IFS=$'\n'
- gpuinfolists=( $(nvidia-smi -q | awk 'BEGIN { RS="GPU 00000000:" } NR>1 { gsub(/\n\s*/, " "); print $0 }') )
- for gpuinfostrs in "${gpuinfolists[@]}"
- do
- GPUID=$(echo $gpuinfostrs | awk '{print $1}')
- pname=$(echo $gpuinfostrs | awk -F "Product Name :" '{print $2}' | awk -F "Product Brand" '{print $1}' | sed 's/^[[:space:]]*//g')
- pbrand=$(echo $gpuinfostrs | awk -F "Product Brand :" '{print $2}' | awk -F "Display Mode" '{print $1}' | sed 's/^[[:space:]]*//g')
- tmem=$(echo $gpuinfostrs | awk -F "FB Memory Usage" '{print $2}' | awk -F "BAR1 Memory Usage" '{print $1}' | sed 's/^[[:space:]]*//g' | awk -F ":" '{print $2}' | sed 's/^[[:space:]]*//g' | awk '{print $1,$2}')
- umem=$(echo $gpuinfostrs | awk -F "FB Memory Usage" '{print $2}' | awk -F "BAR1 Memory Usage" '{print $1}' | sed 's/^[[:space:]]*//g' | awk -F ":" '{print $3}' | sed 's/^[[:space:]]*//g' | awk '{print $1,$2}')
- freemem=$(echo $gpuinfostrs | awk -F "FB Memory Usage" '{print $2}' | awk -F "BAR1 Memory Usage" '{print $1}' | sed 's/^[[:space:]]*//g' | awk -F ":" '{print $4}' | sed 's/^[[:space:]]*//g' | awk '{print $1,$2}')
- gpup=$(echo $gpuinfostrs | awk -F "Utilization" '{print $2}' | awk -F "Encoder Stats" '{print $1}' | sed 's/^[[:space:]]*//g' | awk -F ":" '{print $2}' | sed 's/^[[:space:]]*//g' | awk -F "%" '{print $1}')
- memp=$(echo $gpuinfostrs | awk -F "Utilization" '{print $2}' | awk -F "Encoder Stats" '{print $1}' | sed 's/^[[:space:]]*//g' | awk -F ":" '{print $3}' | sed 's/^[[:space:]]*//g' | awk -F "%" '{print $1}')
- echo "ID:$GPUID##产品名称:$pname##产品品牌:$pbrand##总内存:$tmem##使用的内存:$umem##空闲的内存:$freemem##GPU使用百分率:$gpup##内存使用百分率:$memp">> results.txt.txt
- done
- IFS=$OLD_IFS
- }
-
- fun_ttspotehrgpu() {
- gnums=$(lspci -vnn | grep VGA -A 12 | grep "VGA compatible controller" | wc -l)
- DERV=$(lspci -vnn | grep VGA -A 12 | grep "Kernel driver in use" | awk -F ":" '{print $2}')
- gpuname=$(lspci -vnn | grep VGA -A 12 | grep "DeviceName" | awk -F ":" '{print $2}' | sed 's/^[[:space:]]*//g')
- echo "GPU数量:$gnums##驱动程序版本:$DERV##GPU名称:$gpuname" >> results.txt.txt
- }
-
-
- nvidia-smi >/dev/null 2>&1 && fun_nvidiasmiget
- nvidia-smi >/dev/null 2>&1 || fun_ttspotehrgpu
- echo "--------" >> results.txt.txt
-
-
- rm -rf mtmp1.txt.txt mtmp2.txt.txt cputmp1.txt.txt cputmp2.txt.txt disktmp1.txt.txt disktmp2.txt.txt bdtmp1.txt.txt bdtmp2.txt.txt Powertmp1.txt.txt Powertmp2.txt.txt