내 컴퓨터에 연결된 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
, 잘못 사용하고 있는 것인지, 다른 것을 사용해야 하는지, 아니면 이것이 내가 얻을 수 있는 최선인지, 스크립팅 기술을 향상시키고 결과를 분석해야 하는지를 확인해야 합니다. 지금 받고 있어?
임베디드 환경에서 작동해야 하므로 가능한 가장 간단한 도구를 사용하는 것을 선호합니다.
답변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
속성과 일치하는 공급업체 또는 모델만 선택하는 것입니다. 그러나 원래 질문의 범위를 고려하면 이 답변으로 충분합니다.