Имена файлов патчей не должны иметь значения. Что (обычно) имеет значение, так это имя файла патча, как оно определено в первых двух строках самого файла патча.
В качестве примера
--- /tmp/file.original 2015-10-08 13:02:28.171436259 +0100
+++ /tmp/file 2015-10-08 13:02:31.167408397 +0100
@@ -1,3 +1,3 @@
This is the file
-This is the original file
+This is the patched version of the file
This is the file
Здесь показано, что файл для патча - /tmp/file
, и патч может быть применен с помощью patch -p0 < patch_file
.
Для обычного пользователя, чтобы смонтировать том (, даже если у него есть полный доступ к файлу устройства ), необходима запись в /etc/fstab
. Это явно не работает с динамическими именами устройств.
udev может только добавлять символические ссылки, но не изменять имя блочного устройства. Но для записи в fstab нужно настоящее имя.
Но вместо имени устройства можно использовать UUID файловой системы. udev может сделать устройство доступным для чтения для вашего пользователя и установить символическую ссылку, чтобы ваш пользовательский скрипт мог определить UUID.
запись fstab
UUID=8186709a-ab1f-4d18-80bb-b219cb126398 /mnt/tmp ext4 defaults,noauto,user,nofail 0 0
скрипт монтирования
current_uuid=$(blkid --output export /dev/myusb | grep ^UUID=)
mount "$current_uuid"
сопоставитель устройств
Другой подход заключается в размещении устройства отображения устройств поверх USB-устройства(man dmsetup
). Преимущество заключается в том, что таким образом вы получаете статическое имя, например. /dev/mapper/myusb
. Но я не знаю, как отреагирует DM устройство, если выдернуть флешку. Для этого вам могут понадобиться правила отключения udev. Это кажется намного более сложным и, вероятно, не стоит статического имени.
Я решил свою проблему, не касаясь /etc/fstab
, с помощью программы pmount . Эта программа, по-видимому, доступна в репозиториях пакетов нескольких дистрибутивов Linux.
В Ubuntu автоматически создает папки внутри /media
и монтирует в них диски. Кажется, нет возможности монтировать диски вне /media
, но лично я с этим смирился.
Программа принимает идентификатор раздела (, например.sdb1
)в качестве аргумента. $DEVNAME
, доступный в скрипте udev, предоставляет идентификатор диска (, например.sdb
). С флешками разумно ожидать, что диск будет иметь только первый раздел(sdb1
).
Таким образом, рабочая версия скрипта в вопросе будет:
LOG_FILE=/home/<username>/usb_log
echo "New usb device detected at $DEVNAM doing stuff
pmount "{$DEVNAME}1" &>> $LOG_FILE
ret=$?
echo "$ret" >> $LOG_FILE
В качестве последнего замечания :сценарий запускается от имени пользователя root, и файл сценария должен принадлежать пользователю root. (в Ubuntu)