我一直在测试插入USB时的udev规则。
我想我的问题可能与这篇文章有关:无法使用 udev 规则运行脚本
我有以下 udev 规则,它成功触发并运行脚本:
ACTION=="add", SUBSYSTEM=="block", DRIVERS=="usb", ATTRS{idProduct}=="3244", ATTRS{idVendor}=="hghh", ATTR{size}=="7685844", RUN="/home/user/trigger"
脚本本身:
#!/bin/bash
date >> /home/user/udev_test.log
date >> /tmp/udev_test.log
手动触发时,脚本会写入这两个文件(具有用户权限)。当 触发时udev
,只有用户目录中的文件获取日期。
/tmp/udev_test.log
我也可以通过类似的方式直接写信echo "blah" >> /tmp/udev_test.log
我尝试使用存档的 644、664 和 777 /tmp/udev_test.log
,但没有任何效果。
为什么我可以用用户权限手动写入,但是udev
即使权限设置为777也不起作用?
答案1
该/tmp
目录有一种特殊模式,称为粘滞位模式。只有文件所有者的用户才能写入该文件。根据我的教程:
3.4.2.5。特殊模式
为了使系统管理员不必一直烦恼解决权限问题,可以为整个目录或单独的程序授予特殊访问权限。共有三种特殊模式:
粘滞位模式:作业执行后,命令保存在系统内存中。最初,这是一个经常用于节省内存的功能:大型作业仅加载到内存中一次。但如今内存很便宜,并且有更好的技术来管理它,因此它不再因其对单个文件的优化功能而被使用。然而,当应用于整个目录时,粘滞位具有不同的含义。在这种情况下,只有当用户是文件的用户所有者或文件具有适当的权限时,才能更改此目录中的文件。此功能用于诸如 之类的目录
/var/tmp
,这些目录必须可供所有人访问,但不适合用户更改或删除彼此的数据。粘滞位由t
文件权限字段末尾的 表示:mark:~> ls -ld /var/tmp drwxrwxrwt 19 root root 8192 Jan 16 10:37 /var/tmp/
︙
这有帮助吗?