Якщо я підключаю фізичний пристрій, як я можу дізнатися, який файл пристрою належить до нього?


13

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

Я працюю на Mac OS X, але мені більше подобається відповідь, яка працює у всіх (або принаймні найпопулярніших) системах Unix. У мене були проблеми з Linux раніше.


У Linux відповідь, як правило, передбачає udev. Отже, ви намагаєтеся оглянути еквіваленти udev на OSX ; це, зокрема, призводить до функціональності альтернативи udev в OSX та OSX USB Device Guide .
Жиль "ТАК - перестань бути злим"

На MacOSX найпростіше - визначити обсяги за їх мітками. Але Жиль має право на ідеальне рішення.
peterh

Відповіді:


14

Використання 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" == "xv"]] && shift && local VERBOSE = -v
    для dsk в $ {@ - / dev / sd?}
    робити
        / sbin / udevadm info --query = path --name = "$ dsk" | grep --colour = auto -q usb || продовжувати
        echo "===== пристрою $ dsk є:"
        (eval $ (/ sbin / udevadm info --query = властивість --name = "$ dsk" | grep "\ (МОДЕЛЬ | | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && відлуння "Невідомо" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "----- ПРИСТРОЙ МОГУЄТЬСЯ ----"
        відлуння
    зроблено
}

Використовуйте його так:

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

[Редагувати]: Додано певну функціональність, наприклад запити багатьох пристроїв, перевірку кріплень та багатослівність керування lsusb.


Правда, наскільки це йде, але не всі системи використовують udev.
Калеб

@Caleb True ... Насправді, lsusbце також додаткова програма. Але обидва вкрай поширені.
rozcietrzewiacz

@rozcietrzewiacz Питання в першу чергу стосується OSX, але udev властиво специфічно для Linux.
Жил 'SO- перестань бути злим'

@Gil Ну, правда. У мене немає досвіду роботи з OSX, тому я просто оновив свою відповідь, щоб не вводити в оману.
rozcietrzewiacz

Що я зазвичай роблю в такому випадку, це підключити пристрій і негайно запустити dmesg. Але це не буде корисним, якщо пристрій уже підключено до мережі та якщо після першого пристрою є більше підключених пристроїв. :)
Абхішек A

3

Універсальної відповіді немає. В Linux найпростіший спосіб - це, мабуть, просто запустити утиліту диска gnome, і він покаже всі виявлені диски, незалежно від того, встановлені вони чи ні. З командного рядка ви можете ознайомитись з результатами blkidабо udevadm info --export-db.


3

У Mac OS X можна спробувати використовувати diskutil list.


1

Що стосується всіх Unix, я не думаю, що це можливо.

Звичайні зовнішні автобуси сьогодні не використовують фіксовану схему нумерації своїх портів, як це робив IDE. Отже, єдиними джерелами даних для картографування, які вам потрібні, є назви виробників дисків, їх серійні номери або UID-адреси розділів.

Назви виробників необов’язково унікальні на даній машині (припустимо, ви підключите два зовнішніх накопичувачі з тієї ж серії - вони будуть ідентифіковані однаково). Серійні номери не "видимі ззовні", як і UID розділів.

Отже, про єдине універсальне рішення, про яке я можу подумати - це позначити фізичні накопичувачі серійним номером та використовувати команду udevadm, задану у відповіді rozcietrzewiacz, якщо UDEV доступний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.