Как задать паузу перед выполнением команды в sh или csh?
sleep 1
о! пасиба
Кстати для монтирования на лету сейчас модно использовать supermount.
кстати, у меня получилось нечто "use with caution" - перед выдёргиванием надо размонтировать. если после - пипец
У тебя бсд? Тогда нет. Это исключительно для Linux.
Да, БСД. Жаль тогда.
Хочется usbd заставить нормально реагировать на флешки.Пауза всё равно будет race condition. Нужно делать while (условие); do sleep 1; done;.
Что конкретно ты хочешь сделать?
Вот, как сделано у меня:
tmp-mountflash:
#!/bin/sh
: ${USBFLASH_CONFIG="/home/aix/etc/usbflash.conf"}
if [ -f "$USBFLASH_CONFIG" -a -r "$USBFLASH_CONFIG" ]; then
. $USBFLASH_CONFIG
fi
: ${USBFLASH_OWNER_USER:=0}
: ${USBFLASH_OWNER_GROUP:=0}
: ${USBFLASH_ROOT:=/mnt/usbflash}
sleep 2
sym=/mnt/flash
mkdir -p ${USBFLASH_ROOT}
rmdir ${USBFLASH_ROOT}/* > /dev/null 2> /dev/null
for i in `ls /dev/da* | grep s`
do
j=`basename $i`
mkdir -p ${USBFLASH_ROOT}/$j
chown ${USBFLASH_OWNER_USER}:${USBFLASH_OWNER_GROUP} ${USBFLASH_ROOT}/$j
chmod 700 ${USBFLASH_ROOT}/$j
mount_msdosfs -o sync -L ru_RU.KOI8-R -D CP866 -m 600 -M 700 $i ${USBFLASH_R
OOT}/$j > /dev/null 2> /dev/null
rmdir ${USBFLASH_ROOT}/$j > /dev/null 2> /dev/null
done
tmp-umountflash:
#!/bin/sh
: ${USBFLASH_CONFIG=/home/aix/etc/usbflash.conf}
if [ -f "$USBFLASH_CONFIG" -a -r "$USBFLASH_CONFIG" ]; then
. $USBFLASH_CONFIG
fi
: ${USBFLASH_ROOT:=/mnt/usbflash}
sleep 3
echo Detach `date` $1 >> /tmp/usbflash.log
if [ ! -d ${USBFLASH_ROOT} ]
then
exit
fi
for i in `ls ${USBFLASH_ROOT}`
do
j=`mount | cut -f 1 -d" " | grep $i`
umount $j
done
usbflash.conf:
USBFLASH_OWNER_USER=sasha
USBFLASH_OWNER_GROUP=dataaccess
USBFLASH_ROOT=/mnt/usbflash
/etc/usbd.conf:
...
device "USB flash"
devname "umass[0-9]+"
attach "/home/aix/bin/tmp-mountflash ${DEVNAME}"
# detach "/home/aix/bin/tmp-umountflash ${DEVNAME}"
...
Я знаю, что это не очень удачное решение
Сделать umount нельзя после отключиения flash, как я понимаю, по этой причине?
Уже сделал Когда вставляю флешку, срабатывание скрипта идёт на появление устройства umass0, а da0s1 появляется буквально на полсекунды позже. Небольшой задержки даже в секунду перед срабатыванием mount_msdosfs вполне хватило.
Угу, kernel panic тот ещё получается
Да. Alfred Perlstein работает над autofs, которая должна решить эту проблему. Когда он закончит - это хз.
Уже сделал Когда вставляю флешку, срабатывание скрипта идёт на появление устройства umass0, а da0s1 появляется буквально на полсекунды позже. Небольшой задержки даже в секунду перед срабатыванием mount_msdosfs вполне хватило.Всё равно лучше сделать с проверкой, чем тупо вставить задержку. Если ты видишь (или тебе подсказали) правильное решение задачи, то не нужно оставлять её в недорешенном состоянии. Такой подход важен даже в мелочах.
: ${USBFLASH_CONFIG="/home/aix/etc/usbflash.conf"}
if [ -f "$USBFLASH_CONFIG" -a -r "$USBFLASH_CONFIG" ]; then
. $USBFLASH_CONFIG
fi
Ты отдаешь себе отчет что это способ превратиться из aix в root?
ЗЫ: чего-то я не понял хитрости работы umount Всё дело в -o sync?
ты имеешь в виду это?
: ${USBFLASH_OWNER_USER:=0}
: ${USBFLASH_OWNER_GROUP:=0}
если да, то с этим у меня всё в порядке.
Если нет, то я не понимаю, почему.
See /usr/libexec/locate.updatedb, line 36.
Нет. Я имею в виду что malicious user получив каким-то образом твой шелл может вставить свои команды в /home/aix/etc/usbflash.conf, и просто дождаться когда ты вставишь флешку. Команды исполнятся от пользователя root.
у меня-то всё в порядке, но мне не следовало постить сюда такие настройки без упоминания о том, что usbflash.conf должен быть доступен для записи только суперпользователю
у меня-то всё в порядке, но мне не следовало постить сюда такие настройки без упоминания о том, что usbflash.conf должен быть доступен для записи только суперпользователюНе совсем очевидно в свете того, что лежит в домашнем каталоге пользователя.
Оставить комментарий
hoha32
Хочется usbd заставить нормально реагировать на флешки.