2019-06-04 遇到的一点小问题
需要获取在Arch Linux设备上的USB存储设备的信息,并按格式展示在web端。
.
同事让先了解几个命令,试了试:
fdisk命令:
在ArchWiki上有专门的fdisk介绍。
fdisk -l
获取的设备型号被截断了,而且信息有点乱,筛选麻烦。
lsscsi命令:
lsscsi应用,这篇说明挺详细的。
lsscsi -s
以表格信息获取设备型名、大小,可惜型号会被截断。
[root@archlinux ~]# lsscsi -s
[0:0:0:0] disk ATA Crucial_CT275MX3 R040 /dev/sda 275GB
[1:0:0:0] disk ATA SanDisk SD9SN8W2 7000 /dev/sdb 256GB
[2:0:0:0] disk JMicron Generic 0425 /dev/sdc 1.00TB
lsusb命令和usb-devices命令:
usbutils应用,这篇List USB Devices Linux有提到一些。
lsusb
、lsusb -v
、usb-devices
、、、列出了不少ID,不过没打算用这个,先不管。
[root@archlinux ~]# lsusb
Bus 002 Device 002: ID 152d:0567 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 007: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
.
hdparm命令:
hdparm应用,随便搜索时,刚好看到的。
hdparm -i /dev/sdb
这个主要是获取或设置硬盘参数的,获取的信息挺全的,也符合预期,可惜不支持读取USB上的设备信息。
.
同事推荐的这篇文章,16 commands to check hardware information on Linux,列出了很多检查Linux上的硬件信息的命令。试了试:
lshw命令:
lshw应用;lshw介绍。
lshw
默认输出太多了。
lshw -class disk -json
还好这个可以筛选需要的,而且还能以json格式输出。可惜输出的多条信息中间需要自己加逗号,
,两头加方括号[]
。
hwinfo命令:
hwinfo应用;没有在Arch manual pages搜索到命令说明书,链接是别的网站的。
hwinfo
默认输出太多了,还好可以加上--short
。
hwinfo --short --usb
可以只输出缩略信息,同时支持筛选,比如只显示usb相关,具体可以看说明令。
[root@archlinux ~]# hwinfo --short --disk
disk:
/dev/sdd SMI USB DISK
/dev/sdb SanDisk SD9SN8W2
/dev/sdc JMicron Generic
/dev/sda Crucial_CT275MX3
[root@archlinux ~]# hwinfo --short --usb
disk:
/dev/sdd SMI USB DISK
/dev/sdc JMicron Generic
hub:
Genesys Logic Hub
Linux Foundation 2.0 root hub
Linux Foundation 3.0 root hub
Genesys Logic Hub
lsblk命令:
lsblk
默认输出可以获取完整大小、分区大小,也有一项MOUNTPOINT可以看到挂载的位置,也可惜显示的大小数据不是想要的。
lsblk -b
可以按bytes格式获取大小后再计算。
lsblk -p
可以完整显示路径名称。
lsblk -S
可以获取完整的品牌型号名,没有被截断;而且名字中间的分割符也不是空格,是下划线
_
,能很方便地使用awk获取。
翻了翻说明文件,发现lsblk功能还是很多的,可以使用-n
去表头;可以使用-o +SIZE
来增加输出的信息列;可以使用-o NAME,MODEL,SIZE
限定只输出哪些信息列;可以使用-d /dev /sda
来限定只输出某个设备的信息行;可以使用-J
以json格式输出信息。
[root@archlinux ~]# lsblk -S
NAME HCTL TYPE VENDOR MODEL REV TRAN
sda 0:0:0:0 disk ATA Crucial_CT275MX30***** R040 sata
sdb 1:0:0:0 disk ATA SanDisk_SD9SN8W256***** 7000 sata
sdc 2:0:0:0 disk JMicron Generic 0425 usb
.
dmesg命令:
介绍是dmesg - print or control the kernel ring buffer,检查和控制内核的环形缓冲区。在搜索的时候也有看到用这个命令来查看刚插入的usb信息,当然dmesg
主要不是做这个的。记录一下。
.
还试了些其他命令,懒得整理了。
目前先不安装其他应用,先使用lsblk -p -S -b -o NAME,MODEL,SIZE -n
去掉表头,然后只显示完整的路径,完整的型号名称,以及按照bytes格式获取存储设备的大小;已使用的容量大小就等mount
U盘后使用df
来获取。
[root@archlinux ~]# lsblk -p -S -b -o NAME,MODEL,SIZE -n
/dev/sda Crucial_CT275MX30***** 275064201216
/dev/sdb SanDisk_SD9SN8W256***** 256060514304
/dev/sdc HGST_HTS541010B***** 1000204886016
/dev/sdd USB_DISK 8166703104