我想使用bash获取硬盘的各种型号名称。
如果只有一个,我可以这样做,使用像这样的hwinfo:
hwinfo --ide|grep Model|sed -ne '/Model/s/.*Model: "\([^"]*\)".*/\1/p'
但是当这不止一个时,这显然会失败。当有多个硬盘驱动器时,一个常规的hwinfo输出是:
[faidoc@Delorean ~]$ hwinfo --ide
11: IDE 200.0: 10600 Disk
[Created at block.245]
Unique ID: 3OOL.XFCtBh10jZ2
Parent ID: qnJ_.3_X41NtKT36
SysFS ID: /class/block/sda
SysFS BusID: 2:0:0:0
SysFS Device Link: /devices/pci0000:00/0000:00:0d.0/ata3/host2/target2:0:0/2:0:0:0
Hardware Class: disk
Model: "VBOX HARDDISK"
Vendor: "VBOX"
Device: "HARDDISK"
Revision: "1.0"
Serial ID: "VBfa9b1456-03d78f51"
Driver: "ahci", "sd"
Driver Modules: "ahci"
Device File: /dev/sda
Device Files: /dev/sda, /dev/disk/by-id/ata-VBOX_HARDDISK_VBfa9b1456-03d78f51
Device Number: block 8:0-8:15
BIOS id: 0x80
Geometry (Logical): CHS 1305/255/63
Size: 20971520 sectors a 512 bytes
Capacity: 10 GB (10737418240 bytes)
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #10 (SATA controller)
12: IDE 300.0: 10600 Disk
[Created at block.245]
Unique ID: WZeP.0xN7VsONW+D
Parent ID: qnJ_.3_X41NtKT36
SysFS ID: /class/block/sdb
SysFS BusID: 3:0:0:0
SysFS Device Link: /devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0
Hardware Class: disk
Model: "VBOX HARDDISK"
Vendor: "VBOX"
Device: "HARDDISK"
Revision: "1.0"
Serial ID: "VB350f9911-48221ae2"
Driver: "ahci", "sd"
Driver Modules: "ahci"
Device File: /dev/sdb
Device Files: /dev/sdb, /dev/disk/by-id/ata-VBOX_HARDDISK_VB350f9911-48221ae2
Device Number: block 8:16-8:31
BIOS id: 0x81
Geometry (Logical): CHS 2349/255/63
Size: 37748736 sectors a 512 bytes
Capacity: 18 GB (19327352832 bytes)
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #10 (SATA controller)
每个驱动器都会使用例如“11:”或“12:”,所以如果我能一次得到一个将成为解决方案。
有什么想法吗?
由于
答案 0 :(得分:3)
您可以通过以下方式获取信息:
hdparm -i /dev/sda | grep -i model
或者,如果您只想要型号名称:
hdparm -i /dev/sda | perl -n -e 'print "$1\n" if (m/model=(.+?),/i);'
答案 1 :(得分:0)
如果你知道哪一个你想要一个非常简单的方法是grep -A8 -E '^11:'
hwinfo --ide|grep -A8 -E '^11:'|grep Model|sed -ne '/Model/s/.*Model: "\([^"]*\)".*/\1/p'
grep
上的-A标志抓住了许多行“匹配”以及匹配的行。
还有-B表示“之前”,-C表示“上下文”
答案 2 :(得分:0)
这是一个快速而肮脏的awk
声明可能会有所帮助:
hwinfo --ide | awk '{ if($2=="IDE"){ide=$3} if($1=="Model:"){print "IDE " ide $0} }'
基本上搜索模式" IDE"在每一行的第二个字。 如果它发现,它将该行的第三个字存储在名为" ide"的变量中。
然后它搜索每行的第一个单词" Model:"。 如果找到,它会打印先前存储的IDE以及包含模型名称的整行。
所以你最终得到输出中的名称和IDE位置:
IDE 200.0: Model: "VBOX HARDDISK"
IDE 300.0: Model: "VBOX HARDDISK"
无论连接了多少磁盘,它都应该有效。