检测到新的USB存储设备时如何运行Shell脚本?


17

我想要一个脚本来转储日志并在插入USB大容量存储后立即对其进行登录(上面带有文件'OKdump')。如果检测到任何异常(例如出现视觉错误)拍摄屏幕截图并将其保存在同一驱动器上。

Answers:


13

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

如何解决您的问题:

首先,您需要在设备上收集信息。假设您已将其连接起来,并且知道它的名称为/dev/sdb1。如果这样运行:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

该命令将输出有关您的设备的信息。这是一个很长的时间。您需要找到可以唯一标识设备的内容。那可能是连续的ATTRS{serial}=="UA04FLGC"其他属性(例如ATTRS{idVendor}和)的组合ATTRS{idProduct}。大多数名称或多或少是自我解释。选择一种或几种看似合理的组合-如果它们不起作用,请尝试其他方法。

找到唯一的标识符后,请在/etc/udev/rules.d其中创建一个以两位数开头和以结束的文件.rules。这两位数字指定了处理这些.rules-files的顺序-70-usb-log-custom.rules应该是您的理想选择。此规则文件的语法可能非常复杂。如果您有兴趣,请访问Google udev。如果不是,请仅打开新创建的文件并将其编辑为如下所示:

# /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规则的出色教程。不过,您在这里阅读的内容应该足以引起关注。



4
然后,您将不得不编写它,或者更确切地说明您想要什么。例如,我看不到截图会告诉您什么。还“转储系统日志”在哪里?“任何异常”也是一个相当广泛的名词。我们不是您的私人军队-如果您对bash脚本了解一两件事,那么现在您拥有了自己编写脚本所需的所有工具。
con-f-use

:D抱歉@ con-f-use
Amith KK 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.