首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当检测到新的USB存储设备时,如何运行shell脚本?

当检测到新的USB存储设备时,如何运行shell脚本?
EN

Ask Ubuntu用户
提问于 2011-06-24 13:12:53
回答 1查看 5.1K关注 0票数 18

我想要一个脚本来转储日志,并在usb大容量存储插入(文件'OKdump‘在它上)时立即开始登录它,如果检测到任何异常(比如视觉上存在的错误),我希望它能够截图并保存在同一个驱动器上。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2011-06-24 16:09:16

使用Udev。Udev是一个设备管理器守护进程。除其他外,它负责命名您的设备。您可以通过在rules目录中放置具有特定语法的文件来定义udev-规则。这些规则可以做很多事情--特别是当某个设备连接时,它们可以运行脚本。

如何解决您的问题:

首先,你需要在你的设备上收集信息。假设您连接了它,并且知道它的名称是/dev/sdb1。如果是这样,请运行:

代码语言:javascript
复制
udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

该命令将输出有关设备的信息。相当长的时间。您需要找到唯一标识设备的东西。它可以是像ATTRS{serial}=="UA04FLGC"这样的系列,也可以是其他属性(如ATTRS{idVendor}ATTRS{idProduct} )的组合。大多数名字或多或少都是不言自明的。选择一个或几个看似合理的组合--如果它们不起作用,就尝试其他的东西。

找到唯一的标识符后,在/etc/udev/rules.d中创建一个以两位数开头、以.rules结尾的文件。这两个数字指定了处理这些规则-文件的顺序- 70-usb-log-custom.rules对您来说应该是一个很好的选择。此规则文件的语法可能非常复杂。如果你感兴趣,谷歌udev。如果不只是打开新创建的文件并编辑它,如下所示:

代码语言:javascript
复制
# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

这是我正在使用的实际udev文件。它有三条规则。每一行都是自己的规则。第一行在连接加密磁盘时运行脚本来创建解密设备。在删除解密设备时,第二行使用不同的选项调用相同的脚本。第三行设置另一个相关设备的权限。

很可能你只需要第一行。删除其余部分并插入正确的序列(或组合您为识别设备而选择的参数)。

对我的文件的解释:

KERNEL=="sd?1"说我们在这个规则中寻找的设备是按照/dev/sda1/dev/sdc1之类的方式命名的。问号是任何字母的通配符。ATTRS{serial}=="UA04FLGC"是这里的唯一标识符。对于我所说的另一个设备(第三行),我不是使用序列号,而是使用SYSFS{idVendor}=="1781"SYSFS{idProduct}=="0c9f"的组合来识别它。

ACTION=="add"告诉规则,只有当设备被添加时,它才能起作用,而不是当它被移除时。

SYMLINK+="cusb1"创建一个指向磁盘的符号链接,因此人们可以在/dev/cusb1下找到它。

RUN+="/home/confus/bin/usb-encrypt.sh add %k"运行脚本并将'add‘和'%k’(设备名称)传递给它。

我不会给出更多的细节,因为有关于udev规则的优秀教程。不过,你在这里读到的东西应该足以引起人们的注意。

票数 14
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/50357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档