如何在 bash 中获取 U 盘的序列号

如何在 bash 中获取 U 盘的序列号
cat /proc/scsi/usb-storage/27 
------------------
   Host scsi27: usb-storage
       Vendor: SanDisk
      Product: Cruzer Blade
Serial Number: 4C530000230331109030
     Protocol: Transparent SCSI
    Transport: Bulk
       Quirks: SANE_SENSE

因为每当插入随身碟时它都会不断更改hostscsi编号

答案1

使用lsblk

$ lsblk --output KNAME,SERIAL /dev/sdb
KNAME SERIAL
sdb   4CEDFB6D543AF360199308B2

我用同一台设备测试了两次,总是得到相同的序列号。

答案2

我使用的smartctl工具:

# smartctl /dev/sda -i | grep Serial
Serial Number:    S1D3LYBG290266

我更喜欢它,lsblk因为前者更易于人类阅读,但如果你在 bash 脚本中需要它,那么这是毫无价值的;

答案3

经过大量搜索,我得到了一个更好的脚本,它可能对其他人也有用。这将仅显示可移动设备,如笔驱动器等。此脚本适用于我的 centos7 中的所有用户

#!/bin/bash
for C in `ls /sys/block/`; do 
    RE=`cat /sys/block/$C/removable`
        if [ $RE == "1" ] ;then 
            #VENDOR=`/bin/udevadm info --name=/dev/$C | grep ID_VENDOR=|awk -F"=" ' { print $2}'`
            #MODEL=`/bin/udevadm info --name=/dev/$C | grep ID_MODEL=|awk -F"=" ' { print $2}'`
            #SERIAL=`/bin/udevadm info --name=/dev/$C | grep SERIAL_SHORT|awk -F"=" ' { print $2}'`
            #echo $VENDOR-$MODEL"-"$SERIAL #print as per your taste
            USB_SERIAL=`/bin/udevadm info --name=/dev/$C | grep ID_SERIAL=|awk -F"=" ' { print $2}'|awk -F"-" ' { print $1}'`
            echo  $USB_SERIAL #or just the default one
        fi 
done

JetFlash_Transcend_4GB_08XHIHH4

相关内容