Linux
如果我連接一個物理設備,我怎麼知道哪個設備文件屬於它?
假設我插入了幾個不會自動掛載的 USB 驅動器。如何找出哪個設備文件屬於哪個物理設備,以便我可以掛載它?
我正在執行 Mac OS X,但我更喜歡適用於所有(或至少最流行的)Unix 系統的答案。我過去在 Linux 上遇到過這個問題。
使用 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
然後連接設備。您將在每個輸出行的末尾看到檢測到的塊設備(磁碟/分區)的設備名稱。
一個實際的範例 shell 函式:
這是您可以放入
.bashrc
(or.zshrc
) 的函式:listusbdisks () { [[ "x$1" == "xv" ]] && shift && local VERBOSE=-v 對於 ${@-/dev/sd?} 中的 dsk 做 /sbin/udevadm 資訊 --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 "----- DEVICE IS MOUNTED ----" 迴聲 完畢 }
像這樣使用它:
listusbdisks
- 辨識所有/dev/sdx
設備;listusbdisks sdb
或listusbdisks /dev/sdb
或listusbdisks sdb sdc
- 僅獲取有關某些設備的資訊;listusbdisks -v [optional devices as above]
- 顯示詳細輸出lsusb
*$$ Edit $$:*添加了一些功能,例如查詢許多設備、檢查掛載和控制
lsusb
.