我正在运行Arch Linux,并且这里没有
udevstart
命令。也检查了
/etc/rc.d
,那里没有udev服务。#1 楼
# udevadm control --reload-rules && udevadm trigger
评论
之后需要udevtrigger吗?
–指甲
2012年5月26日在20:28
@Nils实际上,您可能需要用udevtrigger(或者在大多数发行版中是udevadm触发器)代替(即,将设备拔出再装回)。 --reload-rules几乎总是无用的,因为它会自动发生。
–吉尔斯'所以-不再是邪恶的'
13年5月5日在10:28
udevadm trigger在CentOS 6上帮了我大忙。
–astrostl
13年8月7日在18:19
udevtrigger或udevadm触发器对我不起作用。我发现某些设备在卸载和加载相同模块后会工作(假设它是可加载模块)。我发现的是不必重启系统。对于网络设备的示例,根据网络驱动程序的类型,我先执行rmmod ixgbe,rmmod tg3,rmmod e1000,然后执行modprobe ixgbe,modprobe tg3,modprobe e1000。
–热情的极客
15年1月22日在20:25
在此之后,我确实必须对sudo udevadm触发器进行了操作,尽管删除sudo并没有显示任何错误,但直到运行w / sudo时,我才真正看到任何更改。
–雅各布·明斯霍尔(Jacob Minshall)
2015年11月10日17:43
#2 楼
Udev使用inotify机制来监视规则目录,库和本地配置树(通常位于/lib/udev/rules.d
和/etc/udev/rules.d
)中的更改。因此,大多数情况下,更改规则文件时无需执行任何操作。如果您要执行异常操作,例如,如果您做了一些异常操作,则只需显式通知udev守护程序。包含另一个目录中文件的规则。然后,您可以使用通常的约定来要求守护程序重新加载其配置:发送SIGHUP(
pkill -HUP udevd
)。或者,您也可以使用udevadm
命令:udevadm control --reload-rules
。但是,请注意,不同版本的udev历来都有不同的触发器来自动重新加载规则。因此,如果有疑问,请致电udevadm control --reload-rules
:仍然不会造成任何损害。udev规则仅在添加设备时适用。如果要将规则重新应用到已连接的设备,则需要通过使用正确的选项调用
udevadm trigger
来显式地执行此操作,以匹配配置已更改的设备,例如udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
。评论
systemd udev是否使用inotify监视规则更改?
–克雷格·麦昆(Craig McQueen)
16年5月19日在2:28
inotify机制并不总是能捕获udev规则文件的更改。例如,当我使用cat> 10-name.rules通过粘贴内容来更改规则文件时,我必须使用udevadm手动重新加载规则。经过Raspbian Stretch测试。
–丹尼尔·K。
19年7月25日在8:55
@DanielK。最近有改变吗? IIRC发布此答案时,我同时检查了systemd udev和非systemd udev,并且都使用了inotify,因此--reload-rules仅在罕见情况下才需要。
–吉尔斯'所以-不再是邪恶的'
19年7月25日在11:17
@Gilles:也许我上面的示例(使用Shell重定向覆盖现有规则文件)可以被视为“不常见的情况”。当我通过编辑器(例如vi)修改此文件时,inotify机制起作用。
–丹尼尔·K。
19年7月25日在12:43
@DanielK。啊,很高兴知道。这种情况并不罕见:有些编辑器会通过重写来保存文件(使用Vim和Emacs,这取决于它们的配置方式)。奇怪的是,udev只处理其中一种情况-对我来说似乎是个错误,因为我想不出将它们区别对待的理由。
–吉尔斯'所以-不再是邪恶的'
19年7月25日在12:51
#3 楼
我添加这个是因为有一天我会再次使用它。有时您会错误地匹配以太网设备号和MAC地址。有时,这确实很重要,例如在VM中运行并将每个设备分配给不同的VLAN时。
断开网络接口,然后
修改
/etc/udev/rules.d/70-persistent-net.rules
(或其等效项)用
udevadm control --reload-rules
重新加载用
udevadm trigger --attr-match=subsystem=net
重新触发/>启用网络接口。
我很惊讶它的工作效果。
评论
在Red Hat上:服务网络停止&& udevadm控制--reload-rules; udevadm trigger --attr-match = subsystem = net;服务网络启动
–亚历山大·托斯汀
15年2月19日在12:40
在Debian测试中,“ udevadm触发器--attr-match = subsystem = net”不起作用。我只需要拔出并插入USB以太网卡,然后udev触发新规则。
–三角龙
17年6月6日在12:55
Trismegistos,我愿意打赌,按照Clayton Dukes的回答,即插即用类似于删除并重新加载网络驱动程序。
– Mike S
17年11月28日在23:58
#4 楼
我不确定这是否适用,这绝对是较旧的文章,但是在我的网络上搜索udev信息的信息很高,因此我想我可能会分享一些知识。您可以手动触发udev规则适用于特定设备。这仅适用于与Redhat相关的发行版(centos fedora等,等等)
一旦您在规则文件(
/etc/udev/rules.d/whateveryoucalledyourrules
)中进行了相关更改,就可以将change
回显到设备的uevent中。 > echo change > /sys/block/devname/partname1/uevent
这将强制仅此设备读取udev规则。我认为更好,更有针对性。
#5 楼
对我而言,以下命令序列已按需工作。我对
/etc/udev/rules.d/70-persistent-net.rules
进行了修改,以更改eth
编号并重新加载它们而无需重新启动。/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
通过此操作,它已在运行时成功加载,而无需重新启动计算机。
欢迎对此提出任何建议或建议,因为我是通过阅读以下内容自行发现的手册页。
#6 楼
我在这里添加了正确的答案,因为花了我一段时间才在@enthusiasticgeek的评论中注意到它。如果您是ssh'd!):获取正在使用的接口模块的列表:
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*//g'| uniq
在我的情况下,它是
igb
,所以它只是打印出来。键入
sudo rmmod igb
(用从步骤1获得的卡驱动程序替换igb
。下一个,根据需要编辑
/etc/udev/rules.d/70-persistent-net.rules
,然后再次使用modprobe igb
加载模块,再次用您的igb
替换。评论
这与Otheus的答案相结合,是使我无需重新启动计算机即可修复Mellanox网卡配置的秘密武器。我相信驱动程序的加载和persistent-net.rules文件的udevadm读取大致类似于系统在引导时所做的工作。
– Mike S
17年11月29日在0:00
#7 楼
这与主要答案略有不同:在两个命令中我似乎都需要sudo
。 传闻:
sudo udevadm trigger
花费了大约2秒,而没有sudo花费了大约0.2秒。很明显,他们没有为我做同样的事情。改为执行以下操作:sudo udevadm control --reload-rules
sudo udevadm trigger
,最后(通过下面的第二个链接),拔下设备的插头,然后将其重新插回。
参考:
如何在不重新启动的情况下重新加载udev规则?
https://askubuntu.com/questions/1048870/permission-denied-to-non-root-user-for -usb-device / 1187646#1187646
也请参见上述两个答案下的注释。
评论
Igancio答案中的命令以#作为提示符,表示它们需要以root用户身份执行。然后根据您的喜好,您可以使用sudo或仅在root shell中执行它们(您可以通过例如su-或sudo -s输入或仅以root用户身份登录另一个控制台)。
–maxschlepzig
20 May 24 '11:43
啊真微妙。我不知道。谢谢。
–加百利·斯台普斯
20-05-24在16:18
#8 楼
如果有多个网络cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet
评论
请注意,udev的最新版本已放弃对inotify的支持,因此这些天更经常需要重新加载更改规则。什么是udev?是/ dev的经理吗?
@Sandburg是的,它可以在Linux系统上处理即插即用功能。