liunx系统下 怎么一插入u盘就让里面的文件自动执行

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

一插入u盘会自动执行文件里面的代码

Linux系统下是使用udev或者轻量级的类udev工具来自动自动挂载设备,这里以udev为例,来说下怎么设置U盘自动运行脚本。
1. udev挂载脚本配置

一般U盘挂载规则文件在这个目录下面:

/etc/udev/rules.d

我这里的文件内容:

ACTION!="add",GOTO="fens"
KERNEL=="sd[a-z][0-9]",RUN+="/usr/sbin/mount-usb.sh %k %n $sysfs{size}"
LABEL="fens"

这个脚本“/usr/sbin/mount-usb.sh”即U盘挂载脚本,当udev检测到U盘挂载事件时,会调用这个脚本。

2. U盘挂载脚本
U盘自动运行脚本,就是在U盘挂载脚本里添加的。首先要把自动运行的脚本名字给固定下来,这里暂定为“start.sh”。挂载脚本在挂载过U盘之后,去检测U盘里是否有该脚本,如果有则运行。脚本内容如下:


#!/bin/sh
RUN="/mnt/usb/start.sh"
#挂载U盘
/bin/mount  /dev/$1 /mnt/usb
#检测是否有自动运行脚本,如果有则执行
if [ -f $RUN ]
then
    /bin/sh $RUN &
fi

内容也比较简单,和上次那个脚本启动方式一样,有两点,一是使用/bin/sh启动,这样不用检测脚本是否具有可执行权限;二是加上&符号,后台运行脚本。

扩展
这样预留了一个自动运行脚本之后,相当于给系统又增加了一个预留接口一样,当客户需要导出日志或者数据时,而我们系统功能当前没有这个功能时,那就可以先写个脚本,实现客户功能。

U盘里新建autorun.inf文件
里边写执行代码的命令

参考:
https://zhuanlan.zhihu.com/p/123260810

1、引导dos启动
  启动UltraISO,选择菜单“启动光盘/写入硬盘映像”,在对话框中选择“便携启动/写入新的硬盘主引导记录(MBR)/USB-ZIP+”,再选择“便携启动/写入新的驱动器引导记录/windows 9x”。然后复制引导文件command.com、io.sys、MSDOS.SYS到U盘根目录。此时可以从U盘以USB-ZIP方式启动dos系统。
https://m.jb51.net/softjc/184984.html

对于你这个问题可以参考如下链接:

嵌入式Linux系统小技巧之U盘自动运行脚本_风声的专栏-CSDN博客 上次说了一个脚本小技巧(预留启动脚本),这次说的这个小技巧,是U盘自动运行脚本。U盘自动运行脚本的用处U盘自动运行脚本,也属于是系统预留的一个接口吧。当系统忘记密码、没有debug调试线、网络进不去等等时,U盘就发挥作用了!系统预留了这个自动运行脚本,那可以解决好多问题。在这里简单罗列几点:修改系统密码自动升级自动导入/导出配置文件导出日志导出数据等等……U盘自动运行脚本配置方法Linux系统下是使用udev或者轻量级的类udev工具来自动自动挂载设备,这里以udev为例,来说下. https://blog.csdn.net/wuquan_1230/article/details/122516904

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

https://blog.csdn.net/weixin_29205373/article/details/116632939

https://blog.csdn.net/wuquan_1230/article/details/122516904 这个可以

有以下步骤提供参考:
一、先设置自动挂载U盘

1、在/etc下创建udev目录
2、在/etc/udev下穿件目录rules.d和文件udev.conf
3.在udev.conf中添加如下内容

# udev.conf

# The initial syslog(3) priority: "err", "info", "debug" or its

# numerical equivalent. For runtime debugging, the daemons internal

# state can be changed with: "udevcontrol log_priority=".
udev_log="err"

4.在rules.d下创建规则文件

如实现U盘自动挂载

Vim 11-add-usb.rules

添加如下内容

ACTION!="add",GOTO="farsight"

KERNEL=="sd[a-z][0-9]",RUN+="/sbin/mount-usb.sh %k"

LABEL="farsight"

这个文件中ACTION后是说明是什么事件,KERNEL后是说明是什么设备比如sda1,mmcblk0p1等,RUN这个设备插入后去执行哪个程序%k是传入这个程序的参数,这里%k=KERNEL的值也就是sda1等。

在/sbin/下创建mount-usb.sh文件添加如下内容

#!/bin/sh

/bin/mount -t vfat /dev/$1 /tmp

sync

修改文件权限为其添加可执行的权限。
二、U盘挂载脚本

U盘自动运行脚本,就是在U盘挂载脚本里添加的。首先要把自动运行的脚本名字给固定下来,这里暂定为“start.sh”。挂载脚本在挂载过U盘之后,去检测U盘里是否有该脚本,如果有则运行。脚本内容如下:

#!/bin/sh
RUN="/mnt/usb/start.sh"
#挂载U盘
/bin/mount  /dev/$1 /mnt/usb
#检测是否有自动运行脚本,如果有则执行
if [ -f $RUN ]
then
    /bin/sh $RUN &
fi

内容也比较简单,和上次那个脚本启动方式一样,有两点,一是使用/bin/sh启动,这样不用检测脚本是否具有可执行权限;二是加上&符号,后台运行脚本。

问题是,如果安全性高的机器,插入U盘,不执行简单形式的脚本,除非利用了系统的加载机制。
好奇你这需求是为了。。。^_^

占个沙发学习一下。

要是还没有拒绝的话可以参考这个https://blog.csdn.net/hktkfly6/article/details/23390987,思路就是使用busybox实现热插拔事件的监控,配置hotplug,然后执行u盘里的文件

https://blog.csdn.net/u014304293/article/details/40212591?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-20.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-20.pc_feed_download_top3ask

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632