Udev

列出所有 udev 規則(例如設備)?

  • February 1, 2015

我想知道如何列出所有 udev 規則。

*.rules我知道它們可以在這些目錄中的文件中潛在地儲存為行(一行 = 一條規則)

/etc/udev/rules.d
/lib/udev/rules.d
/run/udev/rules.d
/var/run/udev/rules.d

因此,儘管我可以通過簡單地連接*.rules這些目錄中的所有文件來找到所有規則。這似乎不起作用(因為執行了一些規則,我在這些目錄中找不到任何作為規則的規則)。

充其量我認為 udevadm 界面有一個命令可以讓我列印出 udev 目前擁有的所有規則。

可以肯定的是,我對man udevadm尤其是關於的部分進行了審查,udevadm info [parameters]似乎沒有產生任何結果。

鑑於 udev 允許所有針對同一設備的大量文件和規則,不知道為設備編寫所有規則的有效/可行方法令人沮喪。

如果您使用:

udevadm monitor

您將獲得 KERNEL 和 UDEV 採取的每個操作的條目。通常添加、更改、刪除。如果您包括該--property選項:

udevadm monitor --property

您將獲得使用哪些屬性的列表。


因為可以使用 udevadm 測試 udev 規則:

udevadm test $(udevadm info -q path -n <device>)

可以測試出這樣的東西:

udevadm test $(udevadm info -q path -n <device>) 2>&1 | \
sed -n 's/.* \(\/[^ ]*\)\.rules:\([0-9]\+\)/\1.rules \2/p' | \
while read -r f n; do printf "%03d:%-50s " $n "$f"; sed -n ${n}p $f; done

但不確定這有多可靠。無論如何,使案例如video1可能<device>會產生類似的東西:

031:/lib/udev/rules.d/50-udev-default.rules            SUBSYSTEM=="video4linux", GROUP="video"
007:/lib/udev/rules.d/60-persistent-v4l.rules          IMPORT{program}="v4l_id $devnode"
009:/lib/udev/rules.d/60-persistent-v4l.rules          SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
010:/lib/udev/rules.d/60-persistent-v4l.rules          KERNEL=="video*", ENV{ID_SERIAL}=="?*", SYMLINK+="v4l/by-id/$env{ID_BUS}-$env{ID_SERIAL}-video-index$attr{index}"
016:/lib/udev/rules.d/60-persistent-v4l.rules          IMPORT{builtin}="path_id"
017:/lib/udev/rules.d/60-persistent-v4l.rules          ENV{ID_PATH}=="?*", KERNEL=="video*|vbi*", SYMLINK+="v4l/by-path/$env{ID_PATH}-video-index$attr{index}"
015:/lib/udev/rules.d/73-seat-late.rules               TAG=="uaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess"
006:/etc/udev/rules.d/83-webcam.rules                  KERNEL=="video[0-9]", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0c45", SYMLINK+="video-webcam1"

但是,從整體上看*測試會更好。*另請注意以下消息:

該程序僅用於調試,它不執行由 RUN 鍵指定的任何程序。它可能會顯示不正確的結果,因為某些值可能不同,或者在模擬執行時不可用。


您還可以設置

udev_log="debug"

inudev.conf並重新啟動 udev ( reload udev) 以獲得更詳細的輸出。

引用自:https://unix.stackexchange.com/questions/182309