![如何在 bash 中获取 U 盘的序列号](https://linux22.com/image/164024/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E4%B8%AD%E8%8E%B7%E5%8F%96%20U%20%E7%9B%98%E7%9A%84%E5%BA%8F%E5%88%97%E5%8F%B7.png)
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