linux使用udev配置U盘自动挂载
作者:三十三重天
通过学习和分享的过程,将自己工作中的问题和技术总结输出,希望菜鸟和老鸟都能通过自己的文章收获新的知识,并付诸实施。
udev介绍
来源:https://linux.cn/article-10329-1.html
创建这样一个脚本,当指定的设备插入时触发你的计算机去做一个指定动作。
udev 是一个为你的计算机提供设备事件的 Linux 子系统。通俗来讲就是,当你的计算机上插入了像网卡、外置硬盘(包括 U 盘)、鼠标、键盘、游戏操纵杆和手柄、DVD-ROM 驱动器等等设备时,代码能够检测到它们。这样就能写出很多可能非常有用的实用程序,而它已经很好了,普通用户就可以写出脚本去做一些事情,比如当某个硬盘驱动器插入时,执行某个任务。
使用udev进行一个简单的配置
使用udev进行一个简单配置,配置后的实际表现为:当U盘插入机器时,向系统/tmp目录生成一个写入当前系统时间的文本文件
执行脚本
cd /tmp
打开你喜欢的文本编辑器,然后输入下面的简单脚本:
echo `date` >> /tmp/trigger.log
向临时目录写入当前时间,脚本名称保存为trigger.sh.并执行并运行 chmod +x
授予可运行权限
接下来就是通过udev的方式去触发此脚本
udev脚本
使用 udevadm monitor
命令你可以实时利用 udev,并且可以看到当你插入不同设备时发生了什么。用 root 权限试一试。
$ su # udevadm monitor
udevadm monitor
命令提供了许多很好的信息,但是你可以使用 udevadm info
命令以更好看的格式来看到。你也可以通过fdisk -l
命令查看当前已经分配的卷标。
udev的规则都保存在/etc/udev/rules.d
目录下,通过命令cd /etc/udev/rules.d`切换置当前目录。
新增一个测试规则,规则后缀使用.rules才能够被程序识别。
使用编辑器写入如下内容,保存为001.rules
SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/trigger.sh"
文件的内容解释为:当有一个usb设备新增的时候,执行定义的脚本文件。当然你也可以通过更多的个性化配置让触发的范围更加精细话,例如可以指定某个品牌的设备,或者单独的某个U盘。这些可以通过百度查询到内容,也可以在上门的链接中获得内容。
启动配置规则
udevadm control —reload
此时可以通过插入u盘,查看系统盘符下是否会生成trigger文件,并包含当前日期。如果不行,可能有俩个问题
1、脚本文件需要设置在/etc/udev/rules.d/
目录下,我也不知道 为什么,当脚本放置在当前文件中就可以执行,如果有知道的请在评论区告诉我
2、有些时候重置配置规则没用,使用重启
实战
配置u盘插入自动挂载
执行过程:使用udev配置规则,规则是当检测到u盘插入时执行一段脚本【自动挂载脚本】,当u盘拔出时也执行一段脚本【自动卸载u盘脚本】。在实际使用过程中可以将挂载和卸载脚本放置在一个中,根据参数进行区分。首先开始配置规则
udev规则文件
010.rules,放置在/etc/udev/rules.d
目录下
###########---USB---################ #----------------------------------# KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh usb %k" KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh usb %k", OPTIONS="last_rule" ##########---CF card---############# #----------------------------------# KERNEL=="hd[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh cf %k" KERNEL=="hd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh cf %k", OPTIONS="last_rule" #########-----SD------############## #----------------------------------# KERNEL=="mmcblk[0-9]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh sd %k" KERNEL=="mmcblk[0-9]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/zhiyuan_udev.sh sd %k", OPTIONS="last_rule"
然后编写执行脚本内容[zhiyuan_udev.sh] ,也放置在相同的目录
/etc/udev/rules.d
中,放在其他的目录就算给了777的执行权限也无法执行
#! /bin/sh #一般U盘插入之后会在/dev下产生一个sda和一个sda1节点, #但是只有sda1是可以挂载的。sda是设备,sda1是分区 #有的U盘只会产生一个/dev/sda节点,此时就应该挂载sda。 #这个脚本不区分设备节点和分区节点,一律先挂载, #但是挂载失败之后会立即清除建立的挂载点 #-------------------------------------------------# #磁盘种类 设备节点 设备分区节点 #U盘 sd[a-z] sd[a-z][0-9] #SD卡 mmcblk[0-9] mmcblk[0-9]p[0-9] #CF卡 hd[a-z] hd[a-z][0-9] #-------------------------------------------------# #说明:在这个脚本中的可以把udev脚本的ACTION作为环境变量来用, #但是无法使用KERNEL #-------------------------------------------------# if [ $# -ne 2 ] ; then #输入参数必须是两个 exit 1 fi MNT_PATH=/media/ #挂载移动设备的目录 #DEV_PRE=$1 #参数1:挂载点的前缀 DEV_NAME=$2 #参数2:设备在/dev下的名字 FS_TYPE=vfat #设备的文件系统类型 if [ $ACTION == "add" ] ; then #设备插入 # echo "=======add==========" >> /media/udev.txt wr /bin/mkdir -p $MNT_PATH$DEV_NAME /bin/mount /dev/$DEV_NAME $MNT_PATH$DEV_NAME >& /dev/null if [[ $? -ne 0 ]] ; then #mount失败则清除刚刚建立的目录 # echo "mount $DEV_NAME fialed" >> /media/udev.txt wr /bin/rmdir $MNT_PATH$DEV_NAME fi elif [ $ACTION == "remove" ] ; then # echo "=======remove==========" >> /media/udev.txt #设备移除 if [[ -e $MNT_PATH$DEV_NAME ]] ; then /bin/umount -l $MNT_PATH$DEV_NAME >& /dev/null wr /bin/rmdir $MNT_PATH$DEV_NAME fi fi exit 0
END
欢迎关注公众号 程序员工具集 👍👍 致力于分享优秀的开源项目、学习资源 、常用工具
回复关键词“关注礼包”,送你一份最全的程序员技能图谱。
回复关键词"wx"添加个人微信,勾搭作者,欢迎来聊^-^。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
数栈运维实例:Oracle数据库运维场景下,智能运维如何落地生根?
从马车到汽车是为了提升运输效率,而随着时代的发展,如今我们又希望用自动驾驶把驾驶员从开车这项体力劳动中解放出来,增加运行效率,同时也可减少交通事故发生率,这也是企业对于智能运维的诉求。 从人工运维到自动化运维是为了减少人力成本,降低操作风险,提高运维效率,但自动化运维的本质依然是人与自动化工具相结合的运维模式,仍有局限性。为了持续地面向大规模、高复杂性的系统提供高质量的运维服务,智能运维(AIOps)应运而生。 本文,袋鼠云将跟大家分享智能运维大数据平台(一款开箱即用的运维监控平台)在Oracle数据库运维场景下的具体应用。 一、数据采集 使用平台第一步是数据接入。要做好Oracle的运维,需要哪些数据支撑?根据我们运维Oracle日常的经验总结,以下几类数据是特别重要的: 实例和数据库基础信息 包括实例的版本、Patch、启动时间、实例参数、主机基本配置信息。 数据库健康检查 检查数据库是否能正常连接,读写响应时间是否正常。 实例基础性能数据 包括业务的QPS、TPS,实例和主机的CPU使用率、内存使用率、连接数使用率,SQL解析情况,数据库的逻辑读、物理读,数据库锁等待状况,以及R...
- 下一篇
QuickSDK1.0 发布,开源微云百度云 SDK
QuickSDk QuickSDK是一个开源的SDK包.目前支持以下功能: 微云 获取用户可用容量和总空间大小 获取微云文件夹信息 创建文件夹 删除文件夹 下载微云文件 解析微云分享链接 保存微云分享链接 分享微云文件 为分享微云文件设置密码 获取回收站文件列表 清空回收站 ...... 百度云 获取用户空间容量信息 解析百度云分享链接 解析带密码的百度云分享链接 下载分享链接 保存分享链接 获取百度云文件列表 创建文件夹 删除文件夹 私密分享百度云文件 公开分享百度云文件 取消分享百度云文件 重命名文件 删除文件 查看回收站文件 清空回收站 ...... QuickSDK需要用户手动设置微云Cookie或者百度云Cookie后才可使用. 快速入门 maven引入 ``` <dependency> <groupId>cn.schoolwow</groupId> <artifactId>QuickSDK</artifactId> <version>1.0</version> &...
相关文章
文章评论
共有0条评论来说两句吧...