USBデバイスUUIDをMODELとVENDORと一致させるには?

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                                                      

最終的には2つの方法で動作する必要があります。時には UUID が 1 つだけで MODEL/VENDOR を検索し、時には MODEL または VENDOR があり、一致するすべての UUID を見つける必要があります。

デバイスの場合、5A26-0601すべてが整えられています。データフィールドはすべて1行にあり、必要なものは何でも使用できますgrepcutawk

他のデバイスではそうではありません。何らかの理由で、UUIDは残りの情報の下に1行です。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、誤って使用しているのか、他のものを使用するのか、これが私が得られる最善なのか、スクリプト技術を向上させ、結果を分析する必要があるのか​​を確認する必要があります。今受けていますか?

組み込み環境で動作する必要があるため、できるだけ簡単なツールを使用することをお勧めします。

答え1

私の問題を正常に解決しました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属性に一致するベンダーまたはモデルのみを選択することです。ただし、元の質問の範囲を考慮すると、この答えで十分です。

関連情報