Если я подключаю физическое устройство, как я могу когда-либо знать, какой файл устройств принадлежит ему?

Я думаю, что Вы действительно хотите знать, "что является пакетами, которые требуют sqlite-3.3.6, но не будут довольны sqlite-3.4.z"... и единственным хорошим способом узнать это, должен попробовать его. Как:

echo | yum upgrade sqlite
13
19.04.2014, 12:29
4 ответа

Используя udev:

Можно получить запросы полезной информации udev (в системах, которые используют его - почти весь настольный тип Linux наверняка). Например, если Вы хотите знать, который присоединил диск, связан с /dev/sdb, можно использовать:

udevadm info --query=property --name=sdb

Это покажет Вам список свойств того устройства, включая сериал (ID_SERIAL_SHORT). Имея ту информацию, можно посмотреть на вывод lsusb -v и узнайте вещи как производитель и название продукта.

Более короткий путь, чтобы сделать это было бы

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

и посмотрите строку с соответствием $ID_VENDOR_ID:$ID_MODEL_ID в намного более коротком выводе lsusb.

Другая полезная опция udevadm monitor. Используйте его, если Вы хотели бы, знают, какой узел устройства создается при присоединении устройства. Так первый показ

 udevadm monitor --udev --subsystem-match=block

И затем подключите устройство. Вы будете видеть имена устройств обнаруженных блочных устройств (диски/разделы), распечатанные в конце каждой выходной строки.

Практический пример окружает функцию:

Вот функция, можно вставить Ваш .bashrc (или .zshrc) :

listusbdisks () 
{
    [[ "x$1" == "x-v" ]] && shift && local VERBOSE=-v
    for dsk in ${@-/dev/sd?}
    do
        /sbin/udevadm info --query=path --name="$dsk" | grep --colour=auto -q usb || continue
        echo "===== device $dsk is:"
        ( eval $(/sbin/udevadm info --query=property --name="$dsk" | grep "\(MODEL\|VENDOR\)_ID")
          [ "$ID_VENDOR_ID:$ID_MODEL_ID" == ":" ] && echo "Unknown" || \
            lsusb $VERBOSE -d "$ID_VENDOR_ID:$ID_MODEL_ID"
        )
        grep -q "$dsk" /proc/mounts && echo "----- DEVICE IS MOUNTED ----"
        echo
    done
}

Используйте его как это:

  • listusbdisks - распознать все /dev/sdx устройства;
  • listusbdisks sdb или listusbdisks /dev/sdb или listusbdisks sdb sdc - получить информацию об определенных устройствах только;
  • listusbdisks -v [optional devices as above] - показать подробные выводы lsusb

[Править]: Добавленный некоторая функциональность как запросы многих устройств, проверка монтируется и многословие управления lsusb.

14
27.01.2020, 19:53
  • 1
    Достаточно верный насколько это идет, но не все системное использование udev. верный –  Caleb 04.08.2011, 23:22
  • 2
    @Caleb... На самом деле, lsusb также дополнительная программа. Но оба чрезвычайно распространены. –  rozcietrzewiacz 04.08.2011, 23:27
  • 3
    @rozcietrzewiacz, который вопрос, прежде всего, о OSX, но udev внутренне характерен для Linux. –  Gilles 'SO- stop being evil' 05.08.2011, 00:39
  • 4
    @Gil, ну, верный. У меня нет опыта с OSX, таким образом, я просто обновил свой ответ для не введения в заблуждение. –  rozcietrzewiacz 05.08.2011, 00:52
  • 5
    То, что я обычно делаю в таком случае, я включаю устройство и сразу работаю dmesg. Но это не будет полезно, если устройство будет уже включено и если существует больше устройств, включенных после первого. :) –  Abhishek A 02.09.2011, 16:08

Нет никакого универсального ответа. На Linux самый простой путь состоит в том, чтобы, вероятно, просто разжечь дисковую утилиту гнома, и это покажет все обнаруженные диски, смонтированы ли они или нет. Из командной строки можно консультироваться с выводом blkid или udevadm info --export-db.

3
27.01.2020, 19:53

Относительно всего Unixes я не думаю, что это выполнимо.

Обычные внешние шины сегодня не используют фиксированную нумерацию для своих портов, как IDE сделал. Так, для единственных остающихся источников данных для отображения Вас нужно, названия производителя дисков, их порядковые номера или UIDs разделов.

Имена производителя не обязательно уникальны на данной машине (предположите подключение двух внешних дисков от того же ряда - они определят тождественно). Порядковые номера не "видимы с внешней стороны", как раздел UIDs.

Так, о единственном универсальном решении я могу думать, должен маркировать физические диски порядковым номером и использовать команду udevadm, данную в ответе rozcietrzewiacz, если UDEV доступен.

1
27.01.2020, 19:53

В Mac OS X можно попытаться использовать diskutil list.

3
27.01.2020, 19:53

Теги

Похожие вопросы