如何检查 udev 规则是否被触发?

pou*_*ler 24 linux udev ubuntu

我正在尝试在 Ubuntu 13.10 下熟悉 udev。

这是我的第一个简单的 95.usbbackup.rules 规则:

ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
Run Code Online (Sandbox Code Playgroud)

这是脚本(已被 chmodded +x) my_backup.sh :

#!/bin/bash
touch /tmp/test
Run Code Online (Sandbox Code Playgroud)

当我插入外部驱动器时,什么也没有发生。如果规则被触发,我如何检查(日志、命令、任何东西)?

非常感谢

Mar*_*rcH 8

使用 udev / systemd 版本 241 和类似版本,以 root 身份:

udevadm control --log-priority=debug
journalctl -f
Run Code Online (Sandbox Code Playgroud)

或者让它永久,再次作为根:

vi /etc/udev/udevd.conf
systemctl restart systemd-udevd
journalctl -f
Run Code Online (Sandbox Code Playgroud)

PS:最常见但恕我直言的错误答案如下:

udevadm -d test /devices/where/is/my/device |& 更少

……但这有很多问题。主要的:

  • where/is/my/device? 繁琐、复杂且容易出错。

  • 将旧答案与最近的 udev 版本 241 输出进行比较,udevadm test似乎显示的信息比过去少了。

  • udevadm -d test 只是模拟!每次它警告:

    该程序仅用于调试,它不运行任何由 RUN 键指定的程序。它可能会显示不正确的结果,因为某些值可能不同,或者在模拟运行时不可用。

udevadm test 用于开发新规则,而不是用于解决损坏、丢失或覆盖的规则。


Red*_*dro 7

我很确定这应该有效。编辑规则后是否重新加载了 udev 规则?

udevadm control --reload-rules && udevadm trigger 作为根。

  • 这并没有真正回答这个问题。你怎么知道规则是否触发? (10认同)

Dmi*_*yev 7

udevadm test $(udevadm info --query=path --name=device_name)应该告诉您哪些命令在设备插件上执行,并引用所udev涉及的规则。例如:

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
Run Code Online (Sandbox Code Playgroud)


小智 5

我正在运行内核 3.0.35,但以下内容对我有用。

要获取设备的路径,您可以执行以下操作:

udevadm info --name /dev/sda1 --query all
Run Code Online (Sandbox Code Playgroud)

您将获得比您需要的更多的信息,但您对 DEVPATH 感兴趣。

然后要查看执行了哪些 udev 规则,请运行以下命令:

udevadm test DEVPATH
Run Code Online (Sandbox Code Playgroud)

我认为这实际上并没有执行规则。文档称这“模拟”给定设备的事件。要获取更多信息,请查看udevadm 的手册页