linux下udev设备文件管理介绍
udev文件的写法 -回复

udev文件的写法-回复[udev文件的写法]udev是Linux操作系统中的一种设备管理机制,它用于动态管理设备,实现设备自动挂载和卸载。
udev文件提供了一种灵活的方法,可以定义规则来管理设备的各种属性和行为。
在本文中,我们将一步一步地回答关于udev文件的写法的问题,并解释如何编写一个基本的udev规则。
第一步:确定设备属性要编写一个udev规则,首先需要确定您希望基于哪些设备属性来触发该规则。
这些属性可以是设备的ID、制造商、型号等。
您可以使用udevadm 命令来获取设备的属性信息。
例如,如果您想基于设备的制造商和型号触发规则,可以运行以下命令:udevadm info attribute-walk name=/dev/sdb上述命令将显示与设备/dev/sdb相关的所有属性信息,并帮助您确定要使用的属性。
第二步:创建udev规则文件接下来,您需要创建一个udev规则文件。
该文件的后缀通常是.rules。
您可以使用任何文本编辑器来创建该文件。
在终端中,可以运行以下命令来创建名为my_rule.rules的udev规则文件:sudo touch /etc/udev/rules.d/my_rule.rulessudo nano /etc/udev/rules.d/my_rule.rules请注意,您可能需要使用管理员权限运行上述命令。
第三步:编写udev规则在打开的文本编辑器中,您可以开始编写udev规则。
规则的基本结构如下:SUBSYSTEM=="subsystem_name", ATTR{attribute}=="value", ACTION=="action"其中:- subsystem_name是设备的子系统名称,您可以在第一步中获得设备的信息。
- attribute是设备的属性,您可以根据第一步的属性信息选择。
- value是属性的值,您可以根据设备的属性选择相应的值。
(转载)linux中设备文件配置程序udev详解

(转载)linux中设备⽂件配置程序udev详解如果你使⽤Linux⽐较长时间了,那你就知道,在对待设备⽂件这块,Linux改变了⼏次策略。
在Linux早期,设备⽂件仅仅是是⼀些带有适当的属性集的普通⽂件,它由mknod命令创建,⽂件存放在/dev⽬录下。
后来,采⽤了devfs, ⼀个基于内核的动态设备⽂件系统,他⾸次出现在2.3.46内核中。
Mandrake,Gentoo等Linux分发版本采⽤了这种⽅式。
devfs创建的设备⽂件是动态的。
但是devfs有⼀些严重的限制,从2.6.13版本后移⾛了。
⽬前取代他的便是⽂本要提到的udev--⼀个⽤户空间程序。
⽬前很多的Linux分发版本采纳了udev的⽅式,因为它在Linux设备访问,特别是那些对设备有极端需求的站点(⽐如需要控制上千个硬盘)和热插拔设备(⽐如USB摄像头和MP3播放器)上解决了⼏个问题。
下⾯我我们来看看如何管理udev设备。
实际上,对于那些为磁盘,终端设备等准备的标准配置⽂件⽽⾔,你不需要修改什么。
但是,你需要了解udev配置来使⽤新的或者外来设备,如果不修改配置,这些设备可能⽆法访问,或者说Linux可能会采⽤不恰当的名字,属组或权限来创建这些设备⽂件。
你可能也想知道如何修改RS-232串⼝,⾳频设备等⽂件的属组或者权限。
这点在实际的Linux实施中是会遇到的。
为什么使⽤udev在此之前的设备⽂件管理⽅法(静态⽂件和devfs)有⼏个缺点:*不确定的设备映射。
特别是那些动态设备,⽐如USB设备,设备⽂件到实际设备的映射并不可靠和确定。
举⼀个例⼦:如果你有两个USB 打印机。
⼀个可能称为/dev/usb/lp0,另外⼀个便是/dev/usb/lp1。
但是到底哪个是哪个并不清楚,lp0,lp1和实际的设备没有⼀⼀对应的关系,因为他可能因为发现设备的顺序,打印机本⾝关闭等原因⽽导致这种映射并不确定。
理想的⽅式应该是:两个打印机应该采⽤基于他们的序列号或者其他标识信息的唯⼀设备⽂件来映射。
Udev介绍

sysfs树:
sysfs实际上是一个非常简单的结构,逻辑上以目录形式区分. 每一个目录包含一定量的文件(属性),这些文件往往都仅仅包 含一个值. 也会有一些符号链接,它们把设备链到双亲那里 查看sysfs树的一个好办法就是使用udevinfo udevinfo -a -p /sys/block/sda
特定事件发生时运行外部程序:
设备连接或者断开时运行一个特定程序,此时使用的赋值键 RUN,它的使用比较频繁。
KERNEL=="sdb", RUN+="/usr/bin/my_program" 当设备链接、断开时运行my_program脚本 udev并不在任何激活终端中运行这些程序,也不再shell上下文 中执行.
写规则时注意: 设备属性和单个双亲设备属性并在一起是合法的, 但不能混合 匹配多个双亲设备属性,这样你的规则不能工作.
使用udevinfo的唯一复杂之处在于要求你知道顶级设备路 径,因为你通常是为已经存在的设备节点写规则, 你可 以自己使用udevinfo查找设备路径: udevinfo -a -p $(udevinfo -q path -n /dev/sda)
网络:
udevinfo -a -p /sys/class/net/eth0 looking at class device '/sys/class/net/eth0': KERNEL=="eth0" ATTR{address}=="00:52:8b:d5:04:48" 这是我的规则: KERNEL=="eth*", \ ATTR{address}=="00:52:8b:d5:04:48", NAME="lan"
欧拉系统 udev 规则

欧拉系统 udev 规则欧拉系统 udev 规则是一个用于管理 Linux 设备的工具。
它的主要功能是根据设备的属性在系统内核中创建设备节点,从而实现设备的自动识别和配置。
udev 规则是根据设备的属性匹配来执行相应操作的规则集合。
当设备插入或移除时,udev 监听设备事件,根据预定义的规则来执行相应的动作。
这些规则可以用于为设备设置特定的权限,创建符号链接,以及执行其他自定义操作。
在欧拉系统中,我们可以通过编辑 udev 规则文件来定制设备的行为。
udev 规则文件通常位于 `/etc/udev/rules.d/` 目录中,并使用 `.rules` 扩展名。
我们可以创建新的规则文件或编辑现有的规则文件以满足特定需求。
每个 udev 规则文件通常包含一条或多条规则。
每条规则由以下几个部分组成:1. 规则的顺序号:用于确定规则的执行顺序。
2. 规则的匹配条件:通常基于设备的属性来匹配,可以使用属性的名称和值进行匹配,也可以使用通配符。
3. 规则的操作:一旦匹配条件满足,udev 将执行指定的操作,如设置设备权限、创建符号链接、运行脚本等。
为了编写有效的 udev 规则,我们需要了解设备的属性。
可以使用`udevadm` 命令来获取设备的属性信息。
例如,`udevadm info -a -p/sys/class/tty/ttyUSB0` 命令可以显示与 ttyUSB0 设备相关的属性信息。
根据这些属性信息,我们可以编写规则来匹配特定设备。
以下是一个示例的 udev 规则文件,用于设置 USB 设备的权限和创建符号链接:```# 设置 USB 设备权限SUBSYSTEM=="usb", MODE="0666"# 创建 USB 设备的符号链接KERNEL=="sd*", SUBSYSTEM=="block",ENV{ID_SERIAL_SHORT}=="ABC123", SYMLINK+="my_usb_device"```以上规则中,第一条规则匹配所有的 USB 设备,并设置权限为 0666,这样任何用户都可以访问该设备。
linux udev规则

linux udev规则Linux中的udev是一种设备管理器,用于动态管理设备节点和设备驱动程序的加载。
udev规则是在udev管理器中定义的规则集,用于自定义设备的命名、权限设置和其他操作。
下面是关于linux udev规则的详细介绍:规则文件位置:udev规则文件通常存储在/etc/udev/rules.d/目录下,以.rules为后缀。
您可以在该目录中创建新的规则文件或编辑已有的文件。
规则语法:udev规则采用简单的文本配置语法。
每个规则由一行表示,并包含以下几个部分:规则名称:规则名称是一个描述性的字符串,以SUBSYSTEM、KERNEL或ATTR开头,后跟一个可选的匹配条件。
匹配条件:匹配条件用于在设备和属性之间进行匹配。
您可以使用设备的子系统(subsystem)、内核属性(kernel attribute)和设备属性(device attribute)进行匹配。
动作:规则的最后部分是要执行的动作。
动作可以是设置设备权限、创建符号链接、运行脚本等。
规则示例:命名设备节点:您可以使用udev规则为设备节点定义自定义名称。
例如,您可以为一个特定的USB设备设置自定义名称,以便更容易识别。
示例规则为一个USB设备节点命名:SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="XXXX", NAME="my_device"设置设备权限:您可以使用udev规则设置设备节点的权限。
例如,您可以设置特定设备节点的所有者和访问权限。
示例规则设置设备权限:SUBSYSTEM=="input", MODE="0666"创建符号链接:您可以使用udev规则在/dev目录下创建符号链接,以便使用更友好的设备名称。
示例规则创建一个名为my_link 的符号链接:KERNEL=="sda1", SYMLINK+="my_link"规则的加载和生效:当系统启动时,udev会读取/etc/udev/rules.d/目录中的规则文件,并将规则加载到内核中。
利用Udev在linux设备装载时实现易于识别的设备文件名

利用Udev在linux设备装载时实现易于识别的设备文件名随着计算机技术和的发展应用的推广,计算机挂载的设备越来越多,虽然linux依据设备类型分配了设备文件名,比如eth0,eth1,sda,sdb,但是人们不查看具体的设备信息,无法从这类名字上判断那是哪一个硬件设备。
在计算机维护中,如果有设备需要临时装载移除或者热插拔,往往系统同类设备的编号就会混乱,比如人们插拔硬盘,往往sdb,sdc这些设备序号就会混乱。
人们在实际工作中往往希望,linux能将连接的设备设定易于识别的设备文件,这样不但区分识别,而且方便人们实习自动备份等一系列自动功能,在面向用户的设备中提升用户体验。
文章简要介绍udev在linux系统的使用,在ubuntu 12.04 LTS 中使用的实例。
标签:udev;linux;ubuntu通过向内核中添加代码也可以实现修改设备文件名称的功能,但是很少人会这样,一是内核升级维护不方便,每次升级内核都要插入代码;二是容易干扰内核运行,每次都要仔细审查加入的代码,同时也容易引入漏洞。
udev,简单,方便,成熟。
udev是多个linux发行版默认的设备管理器,udev规则易于在不同的发行版之间移植。
1 Ubuntu 12.04.04 LTS中的udevudev 是Linux kernel 2.6的默认设备管理器,它的目标是接替devfs和hotplug 的功能。
udev的守护进程通过侦听内核发出来的uevent 来管理/dev 目录下的设备文件。
它在用户模式下管理/dev目录底下的设备节点,不会对内核的运行产生影响。
因此,内核依然会产生设备文件如sda,sdb等,人们利用udev建立设备的软连接一般不会干扰其他软件的运行。
通过编写udev规则,人们就可以根据设备的不同属性区分设备,用人们习惯的命名方式设置设备文件名。
文章介绍ubuntu 12.04 LFS中udev的使用。
2012年4月Udev已经和systemd项目合并,集成成为一体化的启动及设备管理软件。
linux udev原理分析

一.udev简介在linux系统中,/dev目录用来保存设备文件的.每个文件指向一个系统设备.用户的程序可以通过使用这些设备文件,对真实的硬件的设备进行操作.如: hda是第1个IDE硬盘,sda是第1个SCSI硬盘.在2.4内核时代,在/dev下保存了所有kernel可以支持的硬件设备的设备文件,将近有1万个.而这些设备中,大多数是没有连接的设备.这样就大大的浪费了系统资源,而且/dev目录也显得非常混乱.udev就是用了解决这些问题的.在2.6内核中,采用udev方式来管理/dev目录.它可以动态的建立/删除设备文件(设备连接到系统时,它会自动建立相应的设备文件,设备断开连接后,它会自动删除相应的设备文件).这样使/dev目录简化了许多.而且,udev还可以允许用户编写命名规则,为不同设备指定设备文件名.这样,对设备的管理也方便了许多.例如:你有2个U盘,1个容量是1G的,1个容量是2G的.一般情况下,你先接上的U盘会是sdb,后接上的U盘会是sdc.这样对使用很不方便.每次U盘的设备名可能不一样.但通过udev命名规则,你可以自己指定的设备命名,可以将1G的U盘命名为1g,将2G的U盘命名为2g.设备名不会再变化.使用和管理都会很方便.二.udev安装1.Turbolinux发行版在Turbolinux 10,10.5和11等版本中,都已集成了udev包.你也可以手动安装udev的rpm包.# rpm -ivh udev-<版本号>.rpm2.从源码包安装你可以从官方网站下载源码包:/pub/linux/utils/kernel/hotplug/udev.html 我们下载0.39版的udev.然后进行安装:#tar jxf udev-039.tar.bz2# cd udev-039# make# make install三.udev命名规则1.查看硬件信息当你将一个硬件连接到系统时,会在/sys下生成这个设备的相应信息.U盘信息会保存在/sys/block下,USB打印机则会保存在/sys/class/usb下.使用udevinf o命令可以查看硬件的相关信息.# udevinfo -a -p /sys/block/sda/sda1looking at class device '/sys/block/sda/sda1':SYSFS{dev}="8:1"SYSFS{size}="2045147"SYSFS{start}="61"SYSFS{stat}=" 0 0 0 0"follow the class device's "device"looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host2/target2: 0:0/2:0:0:0':BUS="scsi"ID="2:0:0:0"SYSFS{detach_state}="0"SYSFS{device_blocked}="0"SYSFS{max_sectors}="240"SYSFS{model}="Flash Disk "SYSFS{queue_depth}="1"SYSFS{rev}="4.00"SYSFS{scsi_level}="3"SYSFS{state}="running"SYSFS{timeout}="30"SYSFS{type}="0"SYSFS{vendor}=" "输出信息包括硬件的产品类型,厂商信息,序列号等,依据这些信息,你就可以编写命名规则了.2.命名规则udev的命名规则保存在/etc/udev/rules.d中,脚本按照文件的编号顺序,由小到大执行.当规则匹配时,将不再继续向下执行.下面以Turbolinux 10为例,编写一个U盘命名规则.# vi /etc/udev/rules.d/05-users.rules根据硬件的序列号(serial)编写规则.在文件中添加下面内容:BUS="usb", SYSFS{serial}="033446747503", KERNEL="sd?1", NAME="bruce-%k", SYMLINK="bruce3-%n"BUS 表示设备使用的总线.SYSFS 表示指定硬件信息中,我们需要使用的哪一项值,这里我们使用U盘的序列号作为识别.KERNEL 表示内核对这个设备进行的命名.内核对U盘的命名为sd a1,sdb1…,所以这里我们使用”sd?1”.NAME 设备名,即我们要改变的设备名称.我们使用bruce-%k.%k代表内核对这个设备的命名.SYMLINK 表示建立一个连接,连接到这个设备上.这个连接的名称是”bruce3-%n”.%n代表kernel号,即设备名后面的数字.现在将U盘拔出,然后再重新连接到计算机上.# ls /dev/sd* -hlbrw-rw---- 1 root disk 8, 0 Aug 17 20:11 /dev/sda# ls /dev/bruce* -hllrwxrwxrwx 1 root root 10 Aug 17 20:11 /dev/bruce3-1 -> bruce-sda1 brw------- 1 root root 8, 1 Aug 17 20:11 /dev/bruce-sda1可以看到,U盘设备名变成了bruce-sda1,并且有一个bruce3-1的连接指向它.四.udev工作原理当系统添加设备时,/sys目录下会生成设备的相应信息.udev就是通过读取/sys下的信息来识别硬件设备的.udev有3部分组成: namedev,libsysfs,udevnamedev 负责解析/etc/udev/rules.d中的命名规则,遇到匹配规则后,会返回一个设备名.libsysfs 负责读取/sys下的硬件信息.udev程序负责协调namedev和libsysfs,来完成指定的命名策略.当有设备添加或移出时,/sbin/hotplug由内核调用.提供相应设备的特征信息.如:设备类型,sysfs中的哪个设备等.udev获得这些信息,然后调用namedev,为设备指定一个名称.如果这是一个已经增加的新设备,则udev使用libsysfs来获得设备的主从设备号,然后在/dev下建立设备文件.如果这个设备已经移出,则将从/dev下删除理解和认识udev【转】2011-07-15 15:48:22| 分类:linux 基础Basic | 标签:|字号大中小订阅本文来自:/u/6541/showart_396425.html因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。
udev env 规则

udev env 规则udev 是Linux 下的设备管理器,它通过监测内核的事件,实现对设备的动态管理。
udev env 规则是 udev 所使用的一种规则语言,用于定义设备的环境变量。
本文将介绍udev env 规则的相关内容。
一、udev env 规则的基本结构udev env 规则由一系列的key-value 对组成,每个key-value 对占据一行。
其中key 是环境变量的名称,value 是环境变量的值。
一个基本的 udev env 规则如下所示:ENV{ENV_NAME}="ENV_VALUE"其中ENV_NAME 是环境变量的名称,ENV_VALUE 是环境变量的值。
二、udev env 规则的使用场景udev env 规则可以用于设备的自动配置和管理。
通过定义设备的环境变量,可以实现对设备的特定操作或配置。
下面是一些常见的使用场景:1. 自动挂载设备通过udev env 规则,可以在设备插入时自动挂载设备。
例如,可以定义一个名为 ACTION 的环境变量,当 ACTION 等于 "add" 时,执行挂载操作。
ENV{ACTION}=="add", RUN+="/bin/mount %E{DEVNAME} /mnt"上述规则中,当设备插入时,udev 会将设备的名称(%E{DEVNAME})作为参数,执行"/bin/mount" 命令来挂载设备到 "/mnt" 目录。
2. 设置设备权限通过udev env 规则,可以设置设备文件的权限。
例如,可以定义一个名为 MODE 的环境变量,指定设备文件的权限。
ENV{ACTION}=="add", MODE="0666"上述规则中,当设备插入时,udev 会将设备文件的权限设置为"0666"。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在对待设备文件这块,Linux改变了几次策略。
在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev 目录下。
后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。
Mandrake,Gentoo等Linux分发版本采用了这种方式。
devfs 创建的设备文件是动态的。
但是devfs有一些严重的限制,从 2.6.13版本后移走了。
目前取代他的便是文本要提到的udev--一个用户空间程序。
目前很多的Linux分发版本采纳了udev的方式,因为它在Linux设备访问,特别是那些对设备有极端需求的站点(比如需要控制上千个硬盘)和热插拔设备(比如USB摄像头和MP3播放器)上解决了几个问题。
下面我我们来看看如何管理udev设备。
实际上,对于那些为磁盘,终端设备等准备的标准配置文件而言,你不需要修改什么。
但是,你需要了解udev配置来使用新的或者外来设备,如果不修改配置,这些设备可能无法访问,或者说Linux可能会采用不恰当的名字,属组或权限来创建这些设备文件。
你可能也想知道如何修改RS-232串口,音频设备等文件的属组或者权限。
这点在实际的Linux实施中是会遇到的。
为什么使用udev在此之前的设备文件管理方法(静态文件和devfs)有几个缺点:* 不确定的设备映射。
特别是那些动态设备,比如USB设备,设备文件到实际设备的映射并不可靠和确定。
举一个例子:如果你有两个USB打印机。
一个可能称为 /dev/usb/lp0,另外一个便是/dev/usb/lp1。
但是到底哪个是哪个并不清楚,lp0,lp1和实际的设备没有一一对应的关系,因为他可能因为发现设备的顺序,打印机本身关闭等原因而导致这种映射并不确定。
理想的方式应该是:两个打印机应该采用基于他们的序列号或者其他标识信息的唯一设备文件来映射。
但是静态文件和devfs都无法做到这点。
*没有足够的主/辅设备号。
我们知道,每一个设备文件是有两个8位的数字:一个是主设备号,另外一个是辅设备号来分配的。
这两个8位的数字加上设备类型(块设备或者字符设备)来唯一标识一个设备。
不幸的是,关联这些身边的的数字并不足够。
*/dev目录下文件太多。
一个系统采用静态设备文件关联的方式,那么这个目录下的文件必然是足够多。
而同时你又不知道在你的系统上到底有那些设备文件是激活的。
*命名不够灵活。
尽管devfs解决了以前的一些问题,但是它自身又带来了一些问题。
其中一个就是命名不够灵活;你别想非常简单的就能修改设备文件的名字。
缺省的devfs命令机制本身也很奇怪,他需要修改大量的配置文件和程序。
*内核内存使用,devfs特有的另外一个问题是,作为内核驱动模块,devfs需要消耗大量的内存,特别当系统上有大量的设备时(比如上面我们提到的系统一个上有好几千磁盘时)udev的目标是想解决上面提到的这些问题,他通采用用户空间(user-space)工具来管理/dev/目录树,他和文件系统分开。
知道如何改变缺省配置能让你之大如何定制自己的系统,比如创建设备字符连接,改变设备文件属组,权限等。
udev配置文件主要的udev配置文件是/etc/udev/udev.conf。
这个文件通常很短,他可能只是包含几行#开头的注释,然后有几行选项:udev_root="/dev/"udev_rules="/etc/udev/rules.d/"udev_log="err"上面的第二行非常重要,因为他表示udev规则存储的目录,这个目录存储的是以.rules结束的文件。
每一个文件处理一系列规则来帮助udev分配名字给设备文件以保证能被内核识别。
你的/etc/udev/rules.d下面可能有好几个udev规则文件,这些文件一部分是udev包安装的,另外一部分则是可能是别的硬件或者软件包生成的。
比如在Fedora Core 5系统上,sane-backends包就会安装60-libsane.rules文件,另外initscripts包会安装60-net.rules文件。
这些规则文件的文件名通常是两个数字开头,它表示系统应用该规则的顺序。
规则文件里的规则有一系列的键/值对组成,键/值对之间用逗号(,)分割。
每一个键或者是用户匹配键,或者是一个赋值键。
匹配键确定规则是否被应用,而赋值键表示分配某值给该键。
这些值将影响udev创建的设备文件。
赋值键可以处理一个多值列表。
匹配键和赋值键操作符解释见下表:udev 键/值对操作符操作符匹配或赋值t 解释----------------------------------------== 匹配相等比较!= 匹配不等比较= 赋值分配一个特定的值给该键,他可以覆盖之前的赋值。
+= 赋值追加特定的值给已经存在的键:= 赋值分配一个特定的值给该键,后面的规则不可能覆盖它。
这有点类似我们常见的编程语言,比如C语言。
只是这里的键一次可以处理多个值。
有一些键在udev规则文件里经常出现,这些键的值可以使用通配符(*,?,甚至范围,比如[0-9]),这些常用键列举如下:常用udev键键含义ACTION 一个时间活动的名字,比如add,当设备增加的时候KERNEL 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备DEVPATH 内核设备录进,比如/devices/*SUBSYSTEM 子系统名字,比如sound,netBUS 总线的名字,比如IDE,USBDRIVER 设备驱动的名字,比如ide-cdromID 独立于内核名字的设备名字SYSFS{ value} sysfs属性值,他可以表示任意ENV{ key} 环境变量,可以表示任意PROGRAM 可执行的外部程序,如果程序返回0值,该键则认为为真(true) RESULT 上一个PROGRAM调用返回的标准输出。
NAME 根据这个规则创建的设备文件的文件名。
注意:仅仅第一行的NAME描述是有效的,后面的均忽略。
如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。
SYMLINK 根据规则创建的字符连接名OWNER 设备文件的属组GROUP 设备文件所在的组。
MODE 设备文件的权限,采用8进制RUN 为设备而执行的程序列表LABEL 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务)GOTO 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTOIMPORT{ type} 导入一个文件或者一个程序执行后而生成的规则集到当前文件WAIT_FOR_SYSFS 等待一个特定的设备文件的创建。
主要是用作时序和依赖问题。
PTIONS 特定的选项: last_rule 对这类设备终端规则执行;ignore_device 忽略当前规则; ignore_remove 忽略接下来的并移走请求。
all_partitions 为所有的磁盘分区创建设备文件。
我们给出一个列子来解释如何使用这些键。
下面的例子来自Fedora Core 5系统的标准配置文件。
KERNEL=="*", OWNER="root" GROUP="root", MODE="0600"KERNEL=="tty", NAME="%k", GROUP="tty", MODE="0666", OPTIONS="last_rule" KERNEL=="scd[0-9]*", SYMLINK+="cdrom cdrom-%k"KERNEL=="hd[a-z]", BUS=="ide", SYSFS{removable}=="1",SYSFS{device/media}=="cdrom", SYMLINK+="cdrom cdrom-%k"ACTION=="add", SUBSYSTEM=="scsi_device", RUN+="/sbin/modprobe sg"上面的例子给出了5个规则,每一个都是KERNEL或者ACTION键开头:*第一个规则是缺省的,他匹配任意被内核识别到的设备,然后设定这些设备的属组是root,组是root,访问权限模式是0600(-rw-------)。
这也是一个安全的缺省设置保证所有的设备在默认情况下只有root可以读写。
*第二个规则也是比较典型的规则了。
它匹配终端设备(tty),然后设置新的权限为0600,所在的组是tty。
它也设置了一个特别的设备文件名:%K。
在这里例子里,%k代表设备的内核名字。
那也就意味着内核识别出这些设备是什么名字,就创建什么样的设备文件名。
*第三行开始的KERNEL=="scd[0-9]*",表示 SCSI CD-ROM 驱动. 它创建一对设备符号连接:cdrom和cdrom-%k。
*第四行,开始的 KERNEL=="hd[a-z]", 表示ATA CDROM驱动器。
这个规则创建和上面的规则相同的符号连接。
ATA CDROM驱动器需要sysfs值以来区别别的ATA 设备,因为SCSI CDROM可以被内核唯一识别。
.*第五行以 ACTION=="add"开始,它告诉udev增加 /sbin/modprobe sg 到命令列表,当任意SCSI设备增加到系统后,这些命令将执行。
其效果就是计算机应该会增加sg内核模块来侦测新的SCSI设备。
当然,上面仅仅是一小部分例子,如果你的系统采用了udev方式,那你应该可以看到更多的规则。
如果你想修改设备的权限或者创建信的符号连接,那么你需要熟读这些规则,特别是要仔细注意你修改的那些与之相关的设备。
修改你的udev配置在修改udev配置之前,我们一定要仔细,通常的考虑是:你最好不要修改系统预置的那些规则,特别不要指定影响非常广泛的配置,比如上面例子中的第一行。
不正确的配置可能会导致严重的系统问题或者系统根本就无法这个正确的访问设备。
而我们正确的做法应该是在/etc/udev/rules.d/下创建一个信的规则文件。
确定你给出的文件的后缀是rules文件名给出的数字序列应该比标准配置文件高。
比如,你可以创建一个名为99-my-udev.rules的规则文件。