当前位置: 首页 > news >正文

设备管理 -- Udev(二)U盘挂载

1、检测U盘

/etc/udev/rules.d/99-usb-hotplug.rules

ACTION=="add",SUBSYSTEM=="block",ENV{ID_BUS}=="usb",ENV{ID_FS_TYPE}=="?*",RUN+="/home/lorentz/usb_hotplug.sh add %k"
ACTION=="remove",SUBSYSTEM=="block",ENV{ID_BUS}=="usb",ENV{ID_FS_TYPE}=="?*",RUN+="/home/lorentz/usb_hotplug.sh remove %k"

usb_hotplug.sh

#!/bin/bashecho "正在检测U盘设备..."
found=0# 遍历所有块设备
for dev in /sys/block/sd*; doif [[ ! -e "$dev" ]]; thencontinuefidev_name=$(basename "$dev")removable=$(cat "$dev/removable" 2>/dev/null)if [[ "$removable" -eq 1 ]]; thenfound=1model=$(cat "$dev/device/model" 2>/dev/null | tr -d ' ')size=$(cat "$dev/size" 2>/dev/null)size_gb=$((size * 512 / 1000000000))# 检查挂载点mount_point=$(lsblk -n -o MOUNTPOINT "/dev/$dev_name" | grep -v '^$' | head -1)if [[ -z "$mount_point" ]]; thenmount_status="未挂载"elsemount_status="已挂载至 $mount_point"fiecho "--------------------------------"echo "设备: /dev/$dev_name"echo "型号: $model"echo "大小: ${size_gb}GB"echo "状态: $mount_status"fi
doneif [[ $found -eq 0 ]]; thenecho "未检测到U盘!"
fi

2、U盘挂载

/etc/udev/rules.d/99-usb-hotplug.rules

ACTION=="add",SUBSYSTEM=="block",ENV{ID_BUS}=="usb",ENV{ID_FS_TYPE}=="?*",RUN+="/home/lorentz/usb_hotplug.sh add %k"
ACTION=="remove",SUBSYSTEM=="block",ENV{ID_BUS}=="usb",ENV{ID_FS_TYPE}=="?*",RUN+="/home/lorentz/usb_hotplug.sh remove %k"

usb_hotplug.sh

#!/bin/bash# 事件类型:add 或 remove
EVENT="$1"
# 设备名称(如 sdb1)
DEVICE="$2"
# 日志文件路径
LOG_FILE="/var/log/usb_hotplug.log"
# 挂载点基础路径
MOUNT_BASE="/media/usb"log() {echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | sudo tee -a "$LOG_FILE"
}case $EVENT inadd)# 创建挂载点目录MOUNT_POINT="${MOUNT_BASE}/${DEVICE}"sudo mkdir -p "$MOUNT_POINT"# 尝试挂载设备if sudo mount "/dev/${DEVICE}" "$MOUNT_POINT" 2>/dev/null; thenlog "设备 /dev/${DEVICE} 已挂载到 ${MOUNT_POINT}"# 获取设备信息VENDOR=$(udevadm info --query=property --name="/dev/${DEVICE}" | grep "ID_VENDOR=" | cut -d'=' -f2)MODEL=$(udevadm info --query=property --name="/dev/${DEVICE}" | grep "ID_MODEL=" | cut -d'=' -f2)SIZE=$(lsblk -n -o SIZE "/dev/${DEVICE}")# 发送桌面通知(如果可用)if [ -n "$DISPLAY" ]; thennotify-send "U盘已插入" "设备: ${VENDOR} ${MODEL} 大小: ${SIZE} 挂载点: ${MOUNT_POINT}"filog "设备信息: ${VENDOR} ${MODEL}, 大小: ${SIZE}"elselog "无法挂载 /dev/${DEVICE}"fi;;remove)# 查找设备挂载点MOUNT_POINT=$(grep "/dev/${DEVICE}" /proc/mounts | awk '{print $2}')if [ -n "$MOUNT_POINT" ]; then# 卸载设备sudo umount -l "$MOUNT_POINT"# 删除挂载点sudo rmdir "$MOUNT_POINT"log "设备 /dev/${DEVICE} 已卸载,挂载点 ${MOUNT_POINT} 已删除"# 发送桌面通知if [ -n "$DISPLAY" ]; thennotify-send "U盘已移除" "设备 /dev/${DEVICE} 已安全移除"fifi;;*)log "未知事件: $EVENT";;
esacexit 0
http://www.xdnf.cn/news/1019539.html

相关文章:

  • linux thermal framework(3)_thermal cooling device
  • WEBSOCKET研究
  • 传智健康---十天项目总结
  • 邮科OEM摄像头重塑楼宇安防价值链条
  • 010502管道符_防火墙出入站_不回显带外-渗透命令-基础入门-网络安全
  • 多模态大语言模型arxiv论文略读(120)
  • ArcPy 与 ArcGIS .NET SDK 读取 GDB 要素类坐标系失败?GDAL 外挂方案详解
  • 会计-收入-3-关于特定交易的会计处理
  • Flask应用中处理异步事件(后台线程+事件循环)的方法(2)
  • C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)
  • 论文阅读:arxiv 2025 Not All Tokens Are What You Need In Thinking
  • 一致性hash
  • PG、SprinBoot项目报错,表不存在
  • 代码训练LeetCode(34)文本左右对齐
  • 无人机避障——感知篇(Orin nx采用zed2双目相机进行Vins-Fusion-GPU定位,再通过位姿和深度图建图完成实时感知)
  • .NetCore 8 反射与源生成器(Reflection vs Source Generators)
  • 安装 Ubuntu Desktop 2504
  • Spring Boot自动配置原理与实践
  • 3.图数据Neo4j - CQL的使用
  • 6月13日day52打卡
  • docker-compose部署tidb服务
  • 二叉树的算法
  • 将包含父子关系的扁平列表 List<Demo> 转换成树形结构的 List<DemoVO>,每个节点包含自己的子节点列表
  • 年化收益237%的策略,12年年化是38%,支持配置最小日期,附aitrader_1.5代码发布
  • 爬虫技术栈解析:XPath与BeautifulSoup的深度对比与实践指南
  • WPF数据绑定疑惑解答--(关于控件的Itemsource,Collection绑定)
  • 获取Linux设备系统启动时间和进程启动时间
  • 基于Netty的UDPServer端和Client端解决正向隔离网闸数据透传问题
  • 前端八股文-vue篇
  • 2025-06-13【视频处理】基于视频内容转场进行分割