Как запустить сценарий оболочки при обнаружении нового USB-накопителя?

17

Я хочу сценарий, который выводит журнал и начинает входить в него, как только запоминающее устройство USB будет подключено (с файлом 'OKdump' на нем). И если обнаружится что-то ненормальное (например, ошибка, которая визуально присутствует), я хочу это сделать снимок экрана и сохранить его на том же диске.

Амит КК
источник

Ответы:

13

Используйте Udev. Udev - это демон диспетчера устройств. Среди прочего он отвечает за наименование ваших устройств. Вы можете определить 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-файлов - это 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