apiv1

udev 速查

是否支持

command -v udevadm

网卡常用最小模板

/etc/udev/rules.d/99-netif.rules

ACTION=="add|remove", SUBSYSTEM=="net", KERNEL=="en*|eth*|wl*", RUN+="/usr/local/bin/netif_callback.sh %k %E{ACTION} %E{SUBSYSTEM}"

通用规则模板(可删减)

同上路径。

ACTION=="add|remove|change|move|bind|unbind|online|offline", SUBSYSTEM=="net|usb|block|tty|input|sound|drm", KERNEL=="eth*|en*|wl*|wwan*|usb*", RUN+="/usr/local/bin/netif_callback.sh %k %E{ACTION} %s{SUBSYSTEM}"

netif_callback.sh 模板

#!/bin/sh
set -eu

# $1: IFACE (如 enp3s0)
# $2: ACTION (add/remove/change...)
# $3: SUBSYSTEM (可选,如 net)
IFACE="${1:-unknown}"
ACTION="${2:-unknown}"
SUBSYSTEM="${3:-unknown}"

LOG_FILE="/var/log/netif_callback.log"

log() {
  printf '%s iface=%s action=%s subsystem=%s msg=%s\n' \
    "$(date '+%F %T')" "$IFACE" "$ACTION" "$SUBSYSTEM" "$1" >> "$LOG_FILE"
}

on_add() {
  log "device added"
  # TODO: 写你的逻辑
}

on_remove() {
  log "device removed"
  # TODO: 写你的逻辑
}

on_change() {
  log "device changed"
  # TODO: 写你的逻辑
}

case "$ACTION" in
  add) on_add ;;
  remove) on_remove ;;
  change) on_change ;;
  *) log "ignored action" ;;
esac

脚本需 chmod +x

生效与调试

udevadm control --reload-rules && udevadm trigger

实时打印事件与环境变量,确认规则是否命中、ACTION/SUBSYSTEM/KERNEL 实际值:

udevadm monitor --env

过滤示例:udevadm monitor --udev --subsystem-match=net

规则语法错、RUN 失败等看 udev 日志:

journalctl -u systemd-udevd -e

实时跟:journalctl -u systemd-udevd -f

匹配键含义 + 写法

RUN 里常用传参变量

常用赋值/动作键

名称说明