Centos7实现U盘插拔事件

有需求要在Centos7中实现U盘插入和拔出后做相应的服务启动和停止功能,本篇文章来介绍如何实现U盘插入和拔出事件。

udev介绍

在 Linux 系统中,udev 是一个设备管理系统,用于动态管理设备节点和设备文件在 /dev 目录下的创建和删除。它是一个基于用户空间的设备管理守护进程,负责监视系统中的硬件变化,并根据预定义的规则来创建、删除、重命名设备节点以及执行其他相关操作。 udev 的主要功能包括:

  1. 设备发现和管理udev 可以监视系统中的设备变化,包括设备的插入、拔出、更改等情况,并根据事先定义好的规则来自动进行设备节点的创建、删除和管理。
  2. 设备命名udev 可以为新检测到的设备分配唯一的设备名称,这有助于用户在系统中更容易地识别和操作设备。
  3. 热插拔支持udev 能够支持热插拔设备,即在系统运行过程中动态地插入和拔出设备。
  4. 事件驱动udev 是基于事件驱动的,它会在系统中的设备状态发生变化时生成相应的事件,然后根据设定的规则来处理这些事件。
  5. 用户自定义规则 :用户可以通过编写自定义的 udev 规则来定义设备的命名、权限、挂载点等属性,从而灵活地管理系统中的设备。

udev 的配置文件通常存储在 /etc/udev/ 目录下,包括主要的配置文件 udev.conf 和规则文件 rules.d/ 目录下的规则文件。

实现U盘事件

我们可以使用udev 来监控和响应 U 盘的插入和拔出事件。

  1. 创建 udev 规则文件: 在 /etc/udev/rules.d/ 目录下创建一个新的规则文件,比如 10-usb.rules
bash 复制代码
sudo vi /etc/udev/rules.d/10-usb.rules
  1. 编辑规则文件: 在新创建的规则文件中,添加规则来定义 U 盘插入和拔出时的操作。我们可以根据自己的需求来定义这些操作。例如,我们可以调用一个脚本来处理插入和拔出事件。下面是一个示例规则,它将调用一个脚本 /path/to/your/udevScript.sh 来处理 U 盘插入和拔出事件:
ini 复制代码
ACTION=="add", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", RUN+="/path/to/your/udevScript.sh add %k"
ACTION=="remove", KERNEL=="sd[a-z]*", SUBSYSTEMS=="usb", RUN+="/path/to/your/udevScript.sh remove %k"
  • ACTION=="add" 表示当设备插入时触发事件。
  • ACTION=="remove" 表示当设备拔出时触发事件。
  • KERNEL=="sd[a-z]*"表示设备的内核名必须匹配 sda-z*, 也就是说,设备名必须以 sd 开头,后面跟着一个或多个小写字母
  • SUBSYSTEMS=="usb"表示设备必须属于 USB subsystem
  • RUN+="/path/to/your/script.sh add/remove %k"表示当设备插入或移除时,会调用对应路径下的script.sh脚本,并且传入两个参数,第一个参数为add或remove,第二个参数为插入的设备名称
  • %k 表示内核设备名称,比如 sda、sdb 等。
  1. 编写处理脚本: 根据上面规则文件中指定的路径,创建一个处理 U 盘插入和拔出事件的脚本。这个脚本可以是 Bash 脚本、Python 脚本等,你可以根据自己的偏好来选择。下面是一个简单的 Bash 脚本示例 (/path/to/your/udevScript.sh),它将插入和拔出事件记录到日志中:
bash 复制代码
#!/bin/bash
​
ACTION=$1
DEVICE=$2
​
echo "USB device $DEVICE was $ACTION" >> /temp/udevScript.log

请确保给脚本执行权限:

bash 复制代码
sudo chmod +x /path/to/your/udevScript.sh
  1. 重新加载 udev 规则以使更改生效:
css 复制代码
sudo udevadm control --reload-rules

现在,当我们插入或拔出 U 盘时,udev 将触发指定的动作,并调用相应的脚本来处理事件。

效果演示

将U盘插入到Centos7中,当文件管理器中显示对应的U盘目录时,我们通过tail -f /tmp/udevScript.log持续监控对应的日志文件,通过几次U盘的插拔后,我们可以看到以下日志输出。

相关推荐
拦路雨g1 天前
VMware centos磁盘容量扩容
linux·运维·centos
keyipatience1 天前
27,28,29进程通信和匿名管道详解
linux·ubuntu·centos
bjzhang753 天前
CentOS下安装MySQL详解
linux·mysql·centos
My is 李豆3 天前
CentOS 7 安装 Docker 完整教程(含 docker-compose 插件)
docker·eureka·centos
上天_去_做颗惺星 EVE_BLUE3 天前
【新 Linux 服务器上手全攻略】系统巡检、存储规划与开发环境初始化
linux·运维·服务器·ubuntu·macos·centos
2601_961194023 天前
考研专业课在哪里参加考试|考点|流程|资料已整理
linux·考研·ubuntu·缓存·centos·负载均衡
我叫张小白。4 天前
CentOS 7 安装 Docker并配置镜像加速(完整指南)
linux·docker·centos
paul_chen215 天前
CentOS 8 LVM 在线扩容根分区:从 home 安全割让空间(XFS 文件系统)
linux·安全·centos
流烟默6 天前
腾讯云Centos7.6使用yum安装MySQL8
mysql·centos·腾讯云
穿条秋裤到处跑7 天前
Centos7环境升级openssh7.4p1至openssh9.8p1版本
centos·openssh