配置文件:
udev的配置文件位於 /etc/udev/ 和 /lib/udev/ ( # 開頭的是註釋)
udev 的主配置文件是 /etc/udev/udev.conf。 它包含一套變量,允許用戶修改 udev 默認值。可以設置的變量如下:
udev_root 設備目錄,默認是 /dev
udev_log 日誌等級(表示嚴重程度),跟 syslog 一致,例如: err, info, debug。
規則文件:
udev的規則文件一般位於 /lib/udev/rules.d/ ,也可以位於 /etc/udev/rules.d/。
臨時存放規則文件的目錄是 /dev/.udev/rules.d/
規則文件是按照字母順序處理的,不管放在哪個目錄。對於相同名字的規則文件, /etc/udev/rules.d 比 /lib/udev/rules.d 優先。
規則文件必須以 .rules 作爲擴展名,否則不被當作規則文件。
規則文件的每一行都是 key=value 格式。 key 有兩個類型:1)匹配型 key 2)賦值型 key
當所有匹配型 key 都匹配時,該規則即被採用,賦值型 key 就會獲得相應的值。
當規則匹配時,可以重命名網絡接口, 創建到設備節點的符號鏈或運行一個指定程序來處理該事件。
一條規則由多個key=value 組成,以英文逗號隔開。 每個 key 有一個操作,取決於操作符,有效的操作符如下:
== 比較是否相等
!= 比較是否不相等
= 給一個key 賦值。 表示一個列表的key會被重置,並且把這個唯一的值傳給它
+= 將一個值增加到key中
:= 將一個值傳給一個key,並且不允許再修改這個key。
下面的 key 可以匹配設備屬性,部分 key 也可用於匹配 sysfs 中的父設備屬性,不僅僅是產生事件的那個設備。
如果在一個規則中,有多個key匹配了一個父設備,則這些 key 必須匹配同一個父設備:
ACTION 匹配事件的動作名
DEVPATH 匹配事件的設備devpath
KERNEL 匹配事件的設備名
NAME 匹配網絡接口或者設備節點的名字。NAME 只有在前面的規則賦值之後纔可以使用。
SYMLINK 匹配設備節點符號鏈的名字。SYMLINK 只有在前面的規則賦值之後纔可以使用。可以有多個 symlinks,只需要匹配一個。
SUBSYSTEM 匹配設備子系統
DRIVER 匹配設備的驅動名。只對綁定到一個驅動的設備有用。
ATTR { filename } 匹配事件設備的 sysfs 屬性。
KERNELS 向上搜索devpath,直到找到一個匹配的設備名
SUBSYSTEMS 向上搜索devpath,直到找到一個匹配的子系統名
DRIVERS 向上搜索devpath,直到找到一個匹配的驅動名
ATTRS{ filename } 向上搜索devpath,直到找到一個含匹配 sysfs 屬性的設備
ENV{ key }
TAG 設備的 tag
TEST{octal mode mask} 測試一個文件是否存在,可以指定一個8進制的模式掩碼。
PROGRAM 執行一個程序。如果程序成功返回, key 爲 true。設備的屬性被放在被執行進程的環境變量中,該程序
的輸出爲 stdout, 可以從 RESULT 這個 key 讀取。
RESULT 匹配最近一次 PROGRAM 調用的返回字符串。它應該在 PROGRAM 之後使用。
支持一些shell的通配符: * ? [ ]
下面的key 是賦值型 key:
NAME
SYMLINK
OWNER, GROUP, MODE
ATTR { key }
ENV { key }
TAG
RUN
LABEL GOTO 可以跳到的地方
GOTO 跳到下一個帶有匹配名字的 LABEL 處。
IMPORT { type }
WAIT_FOR
OPTIONS
NAME, SYMLINK, PROGRAM, OWNER, GROUP、MODE 和 RUN 這些 field 支持一個簡單的、類似於 printf 函數的格式字符串替換。
在所有規則被處理之後,在程序執行之前,RUN 格式字符被應用,從而能讓程序訪問前面已匹配的規則設置的屬性。
對於所有其他的 field,當單個規則被處理時,發生字符替換。可用的字符替換如下:
$kernel, %k 該設備的內核名字
$number, %n 該設備的內核號碼。例如 sda3 的內核號碼是 3。
$devpath, %p 該設備的 devpath
$id, %b 當向上搜索devpath,尋找 SUBSYSTEMS, KERNELS, DRIVERS 和 ATTRS 時,被匹配的設備名字
$driver 當向上搜索devpath,尋找 SUBSYSTEMS, KERNELS, DRIVERS 和 ATTRS 時,被匹配的驅動名字
$attr { file }, %s { file } 一個被發現的設備的 sysfs 屬性的值。如果該設備沒有該屬性,且前面的 KERNELS, SUBSYSTEMS, DRIVERS
或 ATTRS 測試選擇的是一個父設備,那麼就用父設備的屬性。如果屬性是一個符號鏈,符號鏈的最後一個元素作爲返回值。
$env { key }, %E { key } 一個設備屬性值
$major, %M 該設備的內核主號碼
$minor, %m 該設備的內核次號碼
$result, %c 由 PROGRAM 調用的外部程序返回的字符串。如果這個字符串包含空格,可以用 %c{N} 選中第N個字段。
如果這個數字N,後面有一個 + 字符, 則表示選中從這個字段開始的所有後面的字符串 %c { N + }
$parent, %p 父設備的節點名字
$name 設備節點的名字,用一個空格作爲分隔符。該值只有在前面的規則賦值之後才存在,或者是remove事件。
$links 當前符號鏈的列表,用空格隔開。該值只有在前面的規則賦值之後才存在,或者是remove事件。
$root, %r udev_root 的值
$sys, %S sysfs 掛載點
$tempnode, %N 在真正的設備節點創建之前,創建的一個臨時的設備節點的名字,這個臨時設備節點供外部程序使用。
%% '%' 字符自己
$$ '$' 字符自己