物理デバイスを接続している場合、どのデバイスファイルがそのデバイスに属しているかをどうやって知ることができますか?

物理デバイスを接続している場合、どのデバイスファイルがそのデバイスに属しているかをどうやって知ることができますか?

自動的にマウントされない複数のUSBドライブを接続したとしましょう。マウントできるように、どのデバイスファイルがどの物理デバイスに属しているかをどのように確認しますか?

私はMac OS Xを使用していますが、すべて(または少なくとも最も広く使用されている)Unixシステムに適用される答えを好みます。 Linuxを使用する前にこの問題が発生しました。

ベストアンサー1

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)に入れることができる関数は次のとおりです。

USBディスクリスト()
{
    [[ "x$1" == "xv" ]] && Shift&& local VERBOSE=-v
    ${@-/dev/sd?}のdsk用
    する
        /sbin/udevadm info --query=path --name="$dsk" | grep --color=auto -q USB ||
        echo "====== $dsk デバイスは次のとおりです。"
        ( eval $(/sbin/udevadm info --query=property --name="$dsk" | grep "\(MODEL\|VENDOR\)_ID")
          [ "$ID_VENDOR_ID:$ID_MODEL_ID" == ":" ] && echo "不明" ||
            lsusb $VERBOSE -d “$ID_VENDOR_ID:$ID_MODEL_ID”
        )
        grep -q "$dsk" /proc/mounts && echo "------デバイスがインストールされました----"
        エコ
    完璧
}

次のように使用してください。

  • listusbdisks- すべての/dev/sdxデバイスを識別します。
  • listusbdisks sdbまたは - 特定のデバイスに関する情報のみを取得しますlistusbdisks /dev/sdblistusbdisks sdb sdc
  • listusbdisks -v [optional devices as above]- 詳細出力表示lsusb

[編集する]:複数のデバイスクエリ、インストール、および制御チェックなどの機能が追加されましたlsusb

おすすめ記事