linux_hardware_list
Linux 系统硬件设备列表工具
一键脚本
bash <(curl -sL gitee.com/meimolihan/linux-command_sh/raw/master/linux_hardware_list.sh)
效果预览
补充说明
该脚本用于查看 Linux 系统硬件设备信息,基于 lshw -short 命令实现,将硬件类别和描述智能翻译为中文,适合快速了解宿主机硬件配置和 PCI/USB 设备清单的场景。
功能特点
- 硬件设备总览:通过
lshw -short展示所有硬件设备的完整列表 - 中文翻译:自动将硬件类别(system/processor/memory/disk/network 等)和设备描述翻译为中文
- 颜色分类标识:处理器(绿色)、内存(黄色)、存储/磁盘(红色)、网络(青色)、显卡(紫色)等
- 智能长度截断:过长描述自动截断并添加省略号,保持表格对齐
- 自动安装依赖:未安装
lshw时自动尝试通过包管理器安装 - 设备统计:列表末尾显示硬件设备总数
输出说明
脚本输出包含以下字段:
| 字段 | 说明 |
|---|---|
| 总线地址 | 设备总线地址(如 pci@0000:00:02.0) |
| 类型 | 硬件类别中文名(系统/处理器/内存/网络/显卡等) |
| 名称 | 设备名称或型号 |
| 描述 | 设备详细描述信息(已中文翻译) |
参数示例
# 直接运行,查看所有硬件设备
bash linux_hardware_list.sh
关联工具
| 工具 | 说明 |
|---|---|
linux_sysinfo.sh |
查看系统基本信息 |
linux_lscpu.sh |
查看 CPU 详细信息 |
linux_lspci.sh |
查看 PCI 设备列表 |
linux_disk.sh |
查看磁盘信息 |
linux_mounts.sh |
查看挂载信息 |
注意事项
- 需要 root 权限执行(否则部分设备信息不可见)
- 依赖
lshw命令,脚本会尝试自动安装 - 输出结果截取前 70 行,设备过多时可能不完整
- 翻译覆盖常见硬件描述,非常见设备可能保持英文
- 非 PVE 通用 Linux 系统也可使用
脚本源码
#!/bin/bash
set -uo pipefail
list_color_init() {
export gl_hui=$'\033[38;5;59m'
export gl_hong=$'\033[38;5;9m'
export gl_lv=$'\033[38;5;10m'
export gl_huang=$'\033[38;5;11m'
export gl_lan=$'\033[38;5;32m'
export gl_bai=$'\033[38;5;15m'
export gl_zi=$'\033[38;5;13m'
export gl_bufan=$'\033[38;5;14m'
export gl_reset=$'\033[0m'
}
list_color_init
break_end() {
echo -e "${gl_lv}操作完成${gl_reset}"
echo -e "${gl_reset}按任意键继续 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_reset}\c"
read -r -n 1 -s -r -p ""
echo ""
clear
}
root_use() {
clear
if [ "$EUID" -ne 0 ]; then
echo -e "\n${gl_zi}>>> ROOT登录检查 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
echo -e "${gl_huang}提示: ${gl_bai}该功能需要root用户才能运行!"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
mobufan
return 1
fi
return 0
}
install() {
[[ $# -eq 0 ]] && return 1
local need_install=()
for pkg in "$@"; do
if command -v "$pkg" &>/dev/null; then
echo -e "${gl_lv}✓ $pkg 已安装${gl_reset}"
else
need_install+=("$pkg")
fi
done
if [ ${#need_install[@]} -eq 0 ]; then
return 0
fi
echo -e "\n${gl_huang}需要安装以下依赖: ${gl_bai}${need_install[*]}${gl_reset}"
for pkg in "${need_install[@]}"; do
echo -e "\n${gl_huang}正在安装: ${gl_bai}$pkg${gl_reset}"
if command -v apt &>/dev/null; then
apt update -y >/dev/null 2>&1 && apt install -y "$pkg" >/dev/null 2>&1
elif command -v dnf &>/dev/null; then
dnf install -y "$pkg" >/dev/null 2>&1
elif command -v yum &>/dev/null; then
yum install -y "$pkg" >/dev/null 2>&1
elif command -v pacman &>/dev/null; then
pacman -S --noconfirm "$pkg" >/dev/null 2>&1
elif command -v zypper &>/dev/null; then
zypper install -y "$pkg" >/dev/null 2>&1
elif command -v apk &>/dev/null; then
apk add "$pkg" >/dev/null 2>&1
else
echo -e "${gl_hong}错误:无法检测到包管理器,请手动安装 $pkg${gl_reset}"
return 1
fi
if command -v "$pkg" &>/dev/null; then
echo -e "${gl_lv}✓ $pkg 安装成功${gl_reset}"
else
echo -e "${gl_hong}✗ $pkg 安装失败,请手动安装${gl_reset}"
return 1
fi
done
}
translate_hw_class() {
case "$1" in
"system") echo "系统" ;;
"processor") echo "处理器" ;;
"cpu") echo "CPU" ;;
"memory") echo "内存" ;;
"storage") echo "存储" ;;
"disk") echo "磁盘" ;;
"volume") echo "卷" ;;
"bridge") echo "桥接器" ;;
"display") echo "显示" ;;
"graphics") echo "显卡" ;;
"network") echo "网络" ;;
"bus") echo "总线" ;;
"usb") echo "USB" ;;
"input") echo "输入" ;;
"generic") echo "通用" ;;
"scsi") echo "SCSI" ;;
"communication") echo "通信" ;;
"multimedia") echo "多媒体" ;;
*) echo "$1" ;;
esac
}
translate_device_info() {
local info="$1"
if [[ "$info" =~ ^Project-Id-Version ]] || [[ "$info" =~ ^PO-Revision-Date ]]; then
echo "内存信息异常"
return
fi
info=${info//"OptiPlex"/"OptiPlex"}
info=${info//"Core(TM)"/"酷睿"}
info=${info//"CPU"/"处理器"}
info=${info//"@"/"@"}
info=${info//"GHz"/"GHz"}
info=${info//"Gen Core Processor"/"代酷睿处理器"}
info=${info//"Host Bridge/DRAM Registers"/"主机桥接器/内存寄存器"}
info=${info//"UHD Graphics"/"超高清显卡"}
info=${info//"Xeon"/"至强"}
info=${info//"PCH"/"平台控制中心"}
info=${info//"USB 3.1 xHCI Host Controller"/"USB 3.1 xHCI主机控制器"}
info=${info//"xHCI Host Controller"/"xHCI主机控制器"}
info=${info//"Serial IO I2C Controller"/"串行IO I2C控制器"}
info=${info//"HECI Controller"/"HECI控制器"}
info=${info//"SATA AHCI Controller"/"SATA AHCI控制器"}
info=${info//"PCI Express Root Port"/"PCI Express根端口"}
info=${info//"PCI Express-to-PCI Bridge"/"PCI Express转PCI桥接器"}
info=${info//"Ethernet Controller"/"以太网控制器"}
info=${info//"Ethernet Connection"/"以太网连接"}
info=${info//"Chipset LPC/eSPI Controller"/"芯片组 LPC/eSPI控制器"}
info=${info//"SMBus Controller"/"SMBus控制器"}
info=${info//"SPI Controller"/"SPI控制器"}
info=${info//"Sleep Button"/"睡眠按钮"}
info=${info//"Power Button"/"电源按钮"}
info=${info//"Video Bus"/"视频总线"}
info=${info//"DIMM DDR4 Synchronous"/"DDR4同步内存"}
info=${info//"MHz"/"MHz"}
info=${info//"ns"/"纳秒"}
info=${info//"L1 cache"/"L1缓存"}
info=${info//"L2 cache"/"L2缓存"}
info=${info//"L3 cache"/"L3缓存"}
info=${info//"System Memory"/"系统内存"}
info=${info//"BIOS"/"BIOS"}
info=${info//"NTFS volume"/"NTFS卷"}
info=${info//"FAT volume"/"FAT卷"}
info=${info//"EXT4 volume"/"EXT4卷"}
info=${info//"NVMe disk"/"NVMe磁盘"}
info=${info//"USB Receiver"/"USB接收器"}
info=${info//"Logitech"/"罗技"}
info=${info//"Gaming Mouse"/"游戏鼠标"}
info=${info//"Keyboard"/"键盘"}
info=${info//"TOSHIBA"/"东芝"}
info=${info//"WDC"/"西部数据"}
info=${info//"HDMI Audio"/"HDMI音频"}
info=${info//"Headphone Mic"/"耳机麦克风"}
info=${info//"Line Out"/"线路输出"}
info=${info//"Dell"/"戴尔"}
info=${info//"AIO WMI hotkeys"/"一体机WMI热键"}
info=${info//"WMI hotkeys"/"WMI热键"}
echo "$info"
}
get_class_color() {
case "$1" in
"系统") echo "$gl_zi" ;;
"处理器"|"CPU") echo "$gl_lv" ;;
"内存") echo "$gl_huang" ;;
"存储"|"磁盘"|"SCSI") echo "$gl_hong" ;;
"网络") echo "$gl_bufan" ;;
"显示"|"显卡") echo "$gl_zi" ;;
"总线"|"桥接器") echo "$gl_hui" ;;
"输入") echo "$gl_bai" ;;
"卷") echo "$gl_bufan" ;;
"通用") echo "$gl_hui" ;;
"USB") echo "$gl_huang" ;;
"通信") echo "$gl_bufan" ;;
"多媒体") echo "$gl_bufan" ;;
*) echo "$gl_bai" ;;
esac
}
list_beautify_lshw() {
if ! command -v lshw &> /dev/null; then
echo -e "${gl_hong}[错误] 未检测到 lshw 命令${gl_reset}"
echo -e "${gl_huang}正在尝试自动安装...${gl_reset}"
install lshw
if ! command -v lshw &> /dev/null; then
echo -e "${gl_hong}[错误] 安装失败,请手动安装 lshw${gl_reset}"
return 1
fi
fi
echo -e "${gl_zi}>>> 系统硬件设备列表${gl_reset}"
echo -e "${gl_bufan}————————————————————————————————————————————————————————————————————————————${gl_reset}"
{
printf "${gl_hui}%-25s\t%-12s\t%-18s\t%s${gl_reset}\n" "总线地址" "类型" "名称" "描述"
printf "${gl_hui}%-25s\t%-12s\t%-18s\t%s${gl_reset}\n" "--------" "----" "----" "----"
local total=0
while IFS= read -r line; do
[[ -z "$line" || "$line" =~ ^H/W ]] && continue
if [[ "$line" =~ Project-Id-Version ]] || [[ "$line" =~ PO-Revision-Date ]]; then
continue
fi
local bus_addr=$(echo "$line" | awk '{print $1}')
local hw_class=$(echo "$line" | awk '{print $2}')
local name_desc=$(echo "$line" | awk '{for(i=3;i<=NF;i++) printf "%s%s", $i, (i<NF?" ":"")}')
local device_name=""
local device_desc=""
if [[ "$name_desc" =~ ^([^[:space:]]+)[[:space:]]+(.*)$ ]]; then
device_name="${BASH_REMATCH[1]}"
device_desc="${BASH_REMATCH[2]}"
else
device_name="-"
device_desc="$name_desc"
fi
[ -z "$bus_addr" ] && continue
local class_cn=$(translate_hw_class "$hw_class")
local class_color=$(get_class_color "$class_cn")
local device_desc_cn=$(translate_device_info "$device_desc")
if [ ${#device_desc_cn} -gt 55 ]; then
device_desc_cn="${device_desc_cn:0:52}..."
fi
if [ -z "$device_name" ] || [ "$device_name" = "-" ] || [[ "$device_name" =~ ^(Project-Id-Version|PO-Revision-Date) ]]; then
device_name="-"
fi
printf "${gl_lan}%-25s${gl_reset}\t${class_color}%-12s${gl_reset}\t${gl_huang}%-18s${gl_reset}\t${gl_bufan}%s${gl_reset}\n" \
"$bus_addr" "$class_cn" "$device_name" "$device_desc_cn"
total=$((total + 1))
done < <(lshw -short 2>/dev/null | tail -n +3 | head -n 70)
echo ""
echo -e "${gl_hui}硬件设备 ${gl_lv}${total}${gl_hui} 个${gl_reset}"
} | column -t -s $'\t'
echo -e "${gl_bufan}————————————————————————————————————————————————————————————————————————————${gl_reset}"
break_end
}
list_beautify_all() {
root_use || return 1
list_beautify_lshw
}
list_beautify_all
创建本地脚本
new_script="linux_hardware_list.sh"
cat > "$new_script" << 'EOF'
#!/bin/bash
# 粘贴脚本源码
EOF
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"