私のコンピュータに接続されている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行にあり、必要なものは何でも使用できますgrep
。cut
awk
他のデバイスではそうではありません。何らかの理由で、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
属性に一致するベンダーまたはモデルのみを選択することです。ただし、元の質問の範囲を考慮すると、この答えで十分です。