• LINUX和UBUNTU收集物理机设备信息的脚本


    能通配一部份的设备,实际应用中可根据实际情况进行完善

    1. #!/bin/bash
    2. >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
    3. echo "内存信息" >> results.txt.txt
    4. dmidecode -t memory > mtmp1.txt.txt
    5. awk 'BEGIN { RS="Memory Device" } NR>1 { gsub(/\n\s*/, " "); print $0 }' mtmp1.txt.txt | grep -v "Serial Number: NO DIMM" > mtmp2.txt.txt
    6. while read line; do
    7. Size=$(echo $line | awk -F "Size:" '{print $2}' | awk '{print $1$2}')
    8. SN=$(echo $line | awk -F "Serial Number:" '{print $2}' | awk '{print $1}')
    9. Locator=$(echo $line | awk -F "Locator:" '{print $2}' | awk '{print $1}')
    10. Type=$(echo $line | awk -F "Type:" '{print $2}' | awk '{print $1}')
    11. Speed=$(echo $line | awk -F "Speed:" '{print $2}' | awk '{print $1$2}')
    12. Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk '{print $1}')
    13. PN=$(echo $line | awk -F "Part Number:" '{print $2}' | awk '{print $1}')
    14. echo "Size:$Size##SN:$SN##Locator:$Locator##Type:$Type##Speed:$Speed##Manufacturer:$Manufacturer##PN:$PN" >> results.txt.txt
    15. done < mtmp2.txt.txt
    16. echo "--------" >> results.txt.txt
    17. echo "CPU信息" >> results.txt.txt
    18. dmidecode -t processor > cputmp1.txt.txt
    19. awk 'BEGIN { RS="Processor Information" } NR>1 { gsub(/\n\s*/, " "); print $0 }' cputmp1.txt.txt > cputmp2.txt.txt
    20. while read line; do
    21. SocketDes=$(echo $line | awk -F "Socket Designation:" '{print $2}' | awk '{print $1}') #插槽
    22. Version=$(echo $line |awk -F "Version:" '{print $2}' | awk -F "Voltage" '{print $1}')
    23. CoreCount=$(echo $line | awk -F "Core Count:" '{print $2}' | awk '{print $1}')
    24. Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk '{print $1$2}')
    25. echo "SocketDes:$SocketDes##Version:$Version##CoreCount:$CoreCount##Manufacturer:$Manufacturer" >> results.txt.txt
    26. done < cputmp2.txt.txt
    27. echo "--------" >> results.txt.txt
    28. echo "硬盘信息" >> results.txt.txt
    29. fun_lsblkgetinfos() {
    30. sdlists=( $(lsblk | grep disk | awk '{print $1}') )
    31. for sds in "${sdlists[@]}"
    32. do
    33. Vendor=$(lsblk -o NAME,VENDOR | grep -w $sds | awk '{print $2}')
    34. Sn=$(lsblk -o NAME,SERIAL | grep -w $sds | awk '{print $2}')
    35. UserCapacity=$(lsblk -o NAME,SIZE | grep -w $sds | awk '{print $2}')
    36. echo "Vendor:$Vendor##Sn:$Sn##UserCapacity:$UserCapacity" >> results.txt.txt
    37. done
    38. }
    39. fun_smartctlget() {
    40. lsblk | grep disk | awk '{print "/dev/"$1}' | xargs -I {} smartctl -i {} > disktmp1.txt.txt
    41. awk 'BEGIN { RS="START OF INFORMATION SECTION" } NR>1 { gsub(/\n\s*/, " "); print $0 }' disktmp1.txt.txt > disktmp2.txt.txt
    42. while read line; do
    43. Vendor=$(echo $line | awk -F "Vendor:" '{print $2}' | awk '{print $1}')
    44. Sn=$(echo $line | awk -F "Serial number:" '{print $2}' | awk '{print $1}')
    45. UserCapacity=$(echo $line | awk -F "User Capacity:" '{print $2}' | awk '{print $1$2$3$4}')
    46. echo "Vendor:$Vendor##Sn:$Sn##UserCapacity:$UserCapacity" >> results.txt.txt
    47. done < disktmp2.txt.txt
    48. }
    49. lsblk | grep disk | awk '{print "/dev/"$1}' | xargs -I {} smartctl -i {} > disktmp1.txt.txt >/dev/null 2>&1 && fun_smartctlget
    50. lsblk | grep disk | awk '{print "/dev/"$1}' | xargs -I {} smartctl -i {} > disktmp1.txt.txt >/dev/null 2>&1 || fun_lsblkgetinfos
    51. echo "--------" >> results.txt.txt
    52. echo "网卡信息" >> results.txt.txt
    53. OLD_IFS=$IFS
    54. IFS=$'\n'
    55. strlists=( $(ls /sys/class/net/ | grep -E 'ens|enp' | xargs -I {} ethtool {} | awk 'BEGIN { RS="Settings for " } NR>1 { gsub(/\n\s*/, " "); print $0 }') )
    56. for strs in "${strlists[@]}"
    57. do
    58. eths=$(echo $strs | awk '{print $1}' | awk -F ":" '{print $1}')
    59. spd=$(echo $strs | awk -F "Supported link modes:" '{print $2}' | awk -F "Supported pause frame use" '{print $1}'| sed 's/^[[:space:]]*//g')
    60. spauto=$(echo $strs | awk -F "Supports auto-negotiation:" '{print $2}' | awk '{print $1}')
    61. auto=$(echo $strs | awk -F "Auto-negotiation:" '{print $2}' | awk '{print $1}')
    62. mac=$(cat /sys/class/net/$eths/address)
    63. state=$(cat /sys/class/net/$eths/operstate)
    64. echo "网卡:$eths##支持的链路模式:$spd##是否支持自动协商:$spauto##自动协商模式:$auto##MAC地址:$mac##状态:$state" >> results.txt.txt
    65. done
    66. IFS=$OLD_IFS
    67. echo "--------" >> results.txt.txt
    68. echo "主板信息" >> results.txt.txt
    69. dmidecode -t baseboard > bdtmp1.txt.txt
    70. awk 'BEGIN { RS="Handle 0x" } NR>1 { gsub(/\n\s*/, " "); print $0 }' bdtmp1.txt.txt > bdtmp2.txt.txt
    71. FIRST_LINE=true
    72. while read line; do
    73. if $FIRST_LINE; then
    74. Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk '{print $1}')
    75. ProductName=$(echo $line | awk -F "Product Name:" '{print $2}' | awk '{print $1}')
    76. Version=$(echo $line | awk -F "Version:" '{print $2}' | awk '{print $1}')
    77. SerialNumber=$(echo $line | awk -F "Serial Number:" '{print $2}' | awk '{print $1}')
    78. AssetTag=$(echo $line | awk -F "Asset Tag:" '{print $2}' | awk '{print $1}')
    79. echo "主板: Manufacturer:$Manufacturer##ProductName:$ProductName##Version:$Version##SerialNumber:$SerialNumber##资产标签:$AssetTag" >> results.txt.txt
    80. FIRST_LINE=false
    81. else
    82. ReDesign=$(echo $line | awk -F "Reference Designation:" '{print $2}' | awk -F "Type:" '{print $1}' | sed 's/^[[:space:]]*//g')
    83. Type=$(echo $line | awk -F "Type:" '{print $2}' | awk '{print $1}')
    84. Status=$(echo $line | awk -F "Status:" '{print $2}' | awk '{print $1}')
    85. BusAddress=$(echo $line | awk -F "Bus Address:" '{print $2}' | awk '{print $1}')
    86. echo "主板部件: 名称:$ReDesign##Type:$Type##Status:$Status##总线地址:$BusAddress" >> results.txt.txt
    87. fi
    88. done < bdtmp2.txt.txt
    89. echo "--------" >> results.txt.txt
    90. echo "电源信息" >> results.txt.txt
    91. dmidecode -t 39 > Powertmp1.txt.txt
    92. awk 'BEGIN { RS="DMI type 39" } NR>1 { gsub(/\n\s*/, " "); print $0 }' Powertmp1.txt.txt > Powertmp2.txt.txt
    93. while read line; do
    94. UnitGroup=$(echo $line | awk -F "Power Unit Group:" '{print $2}' | awk '{print $1}') #插槽
    95. Location=$(echo $line | awk -F "Location:" '{print $2}' | awk '{print $1}')
    96. Names=$(echo $line | awk -F "Name:" '{print $2}' | awk '{print $1}')
    97. Manufacturer=$(echo $line | awk -F "Manufacturer:" '{print $2}' | awk -F "Serial Number:" '{print $1}'| sed 's/^[[:space:]]*//g')
    98. SNumber=$(echo $line | awk -F "Serial Number:" '{print $2}' | awk '{print $1}')
    99. ModelPN=$(echo $line | awk -F "Model Part Number:" '{print $2}' | awk -F "Revision:" '{print $1}'| sed 's/^[[:space:]]*//g')
    100. Rev=$(echo $line | awk -F "Revision:" '{print $2}' | awk '{print $1}')
    101. MPC=$(echo $line | awk -F "Max Power Capacity:" '{print $2}' | awk -F "Status:" '{print $1}'| sed 's/^[[:space:]]*//g')
    102. Status=$(echo $line | awk -F "Status:" '{print $2}' | awk -F "Type:" '{print $1}'| sed 's/^[[:space:]]*//g')
    103. Hable=$(echo $line | awk -F "Hot Replaceable:" '{print $2}' | awk '{print $1}')
    104. echo "Group:$UnitGroup##位置:$Location##Names:$Names##Manufacturer:$Manufacturer##SN:$SNumber##ModelPN:$ModelPN##Revision:$Rev##最大功耗:$MPC##Status:$Status##热拔插:$Hable">> results.txt.txt
    105. done < Powertmp2.txt.txt
    106. echo "--------" >> results.txt.txt
    107. #GPU
    108. echo "GPU信息" >> results.txt.txt
    109. #lspci -vnn | grep VGA -A 12
    110. fun_nvidiasmiget() {
    111. gnums=$(nvidia-smi -q | grep "Attached GPUs" | awk -F ": " '{print $2}')
    112. DERV=$(nvidia-smi -q | grep "Driver Version" | awk -F ": " '{print $2}')
    113. echo "GPU数量:$gnums##驱动程序版本:$DERV" >> results.txt.txt
    114. OLD_IFS=$IFS
    115. IFS=$'\n'
    116. gpuinfolists=( $(nvidia-smi -q | awk 'BEGIN { RS="GPU 00000000:" } NR>1 { gsub(/\n\s*/, " "); print $0 }') )
    117. for gpuinfostrs in "${gpuinfolists[@]}"
    118. do
    119. GPUID=$(echo $gpuinfostrs | awk '{print $1}')
    120. pname=$(echo $gpuinfostrs | awk -F "Product Name :" '{print $2}' | awk -F "Product Brand" '{print $1}' | sed 's/^[[:space:]]*//g')
    121. pbrand=$(echo $gpuinfostrs | awk -F "Product Brand :" '{print $2}' | awk -F "Display Mode" '{print $1}' | sed 's/^[[:space:]]*//g')
    122. 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}')
    123. 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}')
    124. 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}')
    125. 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}')
    126. 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}')
    127. echo "ID:$GPUID##产品名称:$pname##产品品牌:$pbrand##总内存:$tmem##使用的内存:$umem##空闲的内存:$freemem##GPU使用百分率:$gpup##内存使用百分率:$memp">> results.txt.txt
    128. done
    129. IFS=$OLD_IFS
    130. }
    131. fun_ttspotehrgpu() {
    132. gnums=$(lspci -vnn | grep VGA -A 12 | grep "VGA compatible controller" | wc -l)
    133. DERV=$(lspci -vnn | grep VGA -A 12 | grep "Kernel driver in use" | awk -F ":" '{print $2}')
    134. gpuname=$(lspci -vnn | grep VGA -A 12 | grep "DeviceName" | awk -F ":" '{print $2}' | sed 's/^[[:space:]]*//g')
    135. echo "GPU数量:$gnums##驱动程序版本:$DERV##GPU名称:$gpuname" >> results.txt.txt
    136. }
    137. nvidia-smi >/dev/null 2>&1 && fun_nvidiasmiget
    138. nvidia-smi >/dev/null 2>&1 || fun_ttspotehrgpu
    139. echo "--------" >> results.txt.txt
    140. 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

  • 相关阅读:
    Python文件操作及光标移动介绍
    Typescript 学习笔记(二)高级类型二
    WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量
    XCode汇编调试
    【电力系统】含电热联合系统的微电网运行优化附matlab代码和复现论文
    看了我的mybatis-plus用法,同事也开始悄悄模仿了
    HDFS中DataNode的工作机制
    经纬恒润预期功能安全(SOTIF)解决方案为自动驾驶安全保驾护航
    (02)Cartographer源码无死角解析-(33) LocalTrajectoryBuilder2D: 点云数据流向、处理、消息发布等→流程复盘
    【2594. 修车的最少时间】
  • 原文地址:https://blog.csdn.net/lsysafe/article/details/133719651