Bash에서 USB 플래시 드라이브의 일련 번호를 얻는 방법

Bash에서 USB 플래시 드라이브의 일련 번호를 얻는 방법
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

펜 드라이브를 연결할 때마다 호스트csi 번호가 계속 변경되기 때문입니다.

답변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

관련 정보