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)
当我插入外部驱动器时,什么也没有发生。如果规则被触发,我如何检查(日志、命令、任何东西)?
非常感谢
使用 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
用于开发新规则,而不是用于解决损坏、丢失或覆盖的规则。
我很确定这应该有效。编辑规则后是否重新加载了 udev 规则?
udevadm control --reload-rules && udevadm trigger
作为根。
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 的手册页。