Usb-Drive
如何將 USB 設備 UUID 與 MODEL 和 VENDOR 匹配?
我正在開發一種用於管理連接到我的機器的 USB 設備的工具。
有一次我需要將 UUID 與供應商和型號相匹配,所以我使用了以下命令:
# lsblk -o UUID,MODEL,VENDOR,TRAN 5A26-0601 USB3.0 CRW -SD Generic- usb Voyager 3.0 Corsair usb 7936-E126
最終它必須雙向工作:有時我只有一個 UUID,我需要找到 MODEL/VENDOR,有時我有 MODEL 或 VENDOR,我需要找到所有匹配的 UUID。
對於設備,
5A26-0601
一切都在訂購 - 數據欄位都在一行中,我可以隨心所欲地使用grep
,cut
等awk
。另一台設備則不然——出於某種原因,UUID 位於其餘資訊下方的一行。如果
7936-E126
是唯一連接的設備,這仍然是正確的。UUID 的長度不能是原因,因為它們都包含 9 個字元。如果我嘗試添加帶有設備位置的參數,我只能獲得有關以下內容的有用資訊
5A26-0601
:# lsblk -o UUID,MODEL,VENDOR,TRAN /dev/disk/by-uuid/5A26-0601 UUID MODEL VENDOR TRAN 5A26-0601 USB3.0 CRW -SD Generic- usb # lsblk -o UUID,MODEL,VENDOR,TRAN /dev/disk/by-uuid/7936-E126 UUID MODEL VENDOR TRAN 7936-E126
如何獲取所有設備所需的所有數據?是
lsblk
適合這項工作的正確工具,而我只是用錯了,我應該使用其他東西,還是這是我能得到的最好的工具,我必須提高我的腳本技能並嘗試解析我現在得到的結果?它必須在嵌入式環境中工作,所以我更喜歡使用盡可能簡單的工具。
我已經設法解決了我的問題
udevadm
。MODEL和VENDOR可以通過查詢屬性和grep相關資訊得到:
# udevadm info --query property /dev/disk/by-uuid/7936-E126 | grep "ID_VENDOR=\|ID_MODEL=" ID_MODEL=Voyager_3.0 ID_VENDOR=Corsair # udevadm info --query property /dev/disk/by-uuid/5A26-0601 | grep "ID_VENDOR=\|ID_MODEL=" ID_MODEL=USB3.0_CRW_-SD ID_VENDOR=Generic-
所以現在我可以輕鬆且明確地訪問給定 UUID 的 MODEL 和 VENDOR。
目前,扭轉此過程的唯一方法是遍歷所有設備,並僅選擇具有屬性
ID_BUS=usb
和匹配 VENDOR 或 MODEL 的設備,但鑑於原始問題的範圍,這個答案就足夠了。