用mdev使U盘中的脚本自动执行

原创 2015年11月21日 15:18:10

这并不是什么先进技术,mdev、udev是Linux已经使用多年的热插拔通知方案,但我想说的是,作为一个初学者,想实现自己的想法并不是那么容易。其实我写脚本已不是一次两次了,但每次写脚本都要费很长时间,总结原因有几点:

1、脚本不像编译语言,没有编译器帮你在执行前发现语法层的错误,只能运行时发现。

2、脚本调试不方便,基本只能靠echo打印得知变量的值或者程序运行到哪,虽然有可以在开头加-xv自动打印每一步的情况,但脚本一大或者变量复杂的话,打印的信息太多,也不好定位。关键是有些情况系就是打印不出信息,这就真没辙了。

3、背景知识需要太多,而且没有像ANSI C库函数一样的全面介绍命令的书(至少我还没找到),加上有很多命令用法复杂,参数变化多样,命令命名不规范,不好猜,使得初学者处处碰壁,虽然man可以告诉我们很多信息,但是必须是知道有这个命令的前提下,如果压根就不知道有这个命令,man实在没什么用。尤其是该死的正则表达式,规则复杂还经常用,简直是初学者的天敌。还有那/proc里的东西,我就想知道那本书里将它?!

4、消息封锁。google上不去,要么翻墙,还没有稳定、免费的翻墙法,baidu又不争气,找到的文章基本千篇一律。zf屏蔽google简直就是阻碍科学发展!

我就为实现一个像Windows中的autorun一样的功能,花了3天的时间,于是决心写此文记录。

mdev我就不多介绍了,网上有的是。让它执行一个脚本的方法也很简单,传统的做法是在/etc/mdev.conf中添加如下语句:

sd[a-z][0-9] 0:6 0660*/etc/automount.sh

这里的*可以换成@,表示只有插上u盘时执行/etc/automount.sh,当然,这样就需要配合$,表示卸载U盘时执行什么脚本。这都不重要,关键是/etc/automount.sh的写法。

#!/bin/sh

destdir=/udisk
app=myscript
#echo "$0 $ACTION $MDEV"

my_umount()
{
umount "$destdir";
rmdir "$destdir"
}

my_mount()
{
mkdir "$destdir" || true
  mount -t vfat -o sync -o noatime -o nodiratime "/dev/$1" "$destdir" || true
}

run_script()
{
HACKPATH=${destdir}/$1
if [ -e $HACKPATH ]; then
/bin/chmod u+x $HAKPATH 2>&1
exec $HACKPATH &
fi
}

kill_script()
{
  NAME=$1
#  echo $NAME
  ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $1}'`#网上都是print $2,但我试的就是$1
  echo $ID
  for id in $ID
  do
  pkill -P $id #这个命令用于干掉所有因NAME引发的进程
#  echo "killed $id"
  done
}

case "${ACTION}" in
remove)
        my_umount        
        kill_script $app
        ;;
add|"")
echo "i'm in ${ACTION}"#不知为什么,这里就是打印不出来
my_mount ${MDEV}
run_script $app
;;
esac

剩下的事你也应该知道了,在U盘里放一个myscript文件,里面写着你要执行的脚本,注意添加可执行权限。当你插上U盘时就会自动执行你的脚本了。

这里还有一些不足,就是拔出u盘时总是umount失败,但我始终找不到原因,还请过路的大神指教,在此先谢过。

linux arm上实现插入U盘自动运行的设计

前言之前写过在ubuntu上实现插入U盘自动运行的程序,即autorun,但是在arm 上并不能实现。即仅仅是修改U盘上的文件或者权限,无法提供插入u盘时自动运行这个效果。在嵌入式编程的一个思路是,修...
  • u011016879
  • u011016879
  • 2016年08月02日 12:41
  • 1710

批处理监视U盘 插入后自动执行copy.cmd

  • 2010年07月28日 06:07
  • 2KB
  • 下载

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

1、接入U盘,看输出打印信息并分析 (1)输出信息 自动创建设备节点 (2)用ls命令查看 这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区。 (3)手动挂载,查看...
  • qingkongyeyue
  • qingkongyeyue
  • 2016年11月26日 17:01
  • 656

linux arm上实现插入U盘自动运行的设计

前言之前写过在ubuntu上实现插入U盘自动运行的程序,即autorun,但是在arm 上并不能实现。即仅仅是修改U盘上的文件或者权限,无法提供插入u盘时自动运行这个效果。在嵌入式编程的一个思路是,修...
  • u011016879
  • u011016879
  • 2016年08月02日 12:41
  • 1710

脚本实现U盘自动挂载(linux)

这个方法我自己测试过了。 这里是通过对udev 的设置,让 udev 收到内核发来的 U 盘消息后自动挂载,首先你要确保你的系统有udev的支持,如果有直接进行对udev设置,如果没有请先移植ude...
  • mike8825
  • mike8825
  • 2016年03月28日 18:48
  • 962

S3C2440 U盘,以及自动挂载顺序(inittab,fstab,mdev,hotplug)

平台: Ubuntu 14.04 LTS             Linux-3.0       首先配置内核参数: Make menuconfig Device Drivers ---...
  • zq979999
  • zq979999
  • 2015年08月04日 16:28
  • 902

关于实现mdev自动挂载与卸载(U盘)

在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似。不能在挂载的目录中进行热插拔,否...
  • hunanchenxingyu
  • hunanchenxingyu
  • 2013年12月03日 09:24
  • 1419

ubuntu下如何自动启动U盘脚本程序(autorun)

windows 下的autorun在windows中,做个插入U盘及运行的文件名为autorun.inf,用笔记本打开或新建在U盘的根目录下,其内容大致如下:[autorun] icon=tupiao...
  • u011016879
  • u011016879
  • 2016年07月26日 12:17
  • 1087

Linux如何自动挂载U盘

某些场景下,服务器可能没有必要的键盘等输入设备、屏幕等输出设备。此时需要在没有人为干预的情况下实现当插入U盘或者硬盘后自动挂载,并执行某些脚本动作。以下是我的实践过程。必要组件 udev,udisks...
  • tzdwsy
  • tzdwsy
  • 2016年06月24日 17:48
  • 5665

Android下开机启动后U盘经常不能自动挂载

======================
  • tankai19880619
  • tankai19880619
  • 2015年03月26日 21:22
  • 2752
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用mdev使U盘中的脚本自动执行
举报原因:
原因补充:

(最多只允许输入30个字)