Как написать Скрипт (Монтирование устройств)

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Аватара пользователя
fast_deer
Сообщения: 57

Как написать Скрипт

Сообщение fast_deer »

Привет народ!
У меня вопрос: надо написать скрипт по монтированию/размонтированию устройств. Проьлема состоит в том чтобы определить подключено устройство или нет. Я пытаюсь обрабатываать mtab через gawk на наличие подключений. неполучается. Как проверить есть ли необходимая строка в mtab и получить ответ для дальнейшей обработки?
С уважением,
Алексей
--------------------------------
"Я не волшебник - я только учусь" (С) к/ф "Золушка"
Спасибо сказали:

Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: Как написать Скрипт

Сообщение Jan2ary »

Просто пробуй монтировать и проверять вывод команды - если ругается, значит по делу ругается.
А вообще я думаю, что для твоих целей подойдет devfs (или udev) - там файл устройства создается автоматом при подключении устройства. Тогда просто проверяешь соответствующий /dev/device на наличие и монтируешь. Вот только как ты будешь определять тип фаловой системы на разделах, допустим, через скрипт?
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:

Petya

Re: Как написать Скрипт

Сообщение Petya »

(fast_deer @ May 20 2004, 03:26 AM) писал(а):Привет народ!
У меня вопрос: надо написать скрипт по монтированию/размонтированию устройств. Проьлема состоит в том чтобы определить подключено устройство или нет. Я пытаюсь обрабатываать mtab через gawk на наличие подключений. неполучается. Как проверить есть ли необходимая строка в mtab и получить ответ для дальнейшей обработки?

а что тебе конкретно то надо и что у тебя есть ? ты по подробнее напиши ....
Спасибо сказали:

Аватара пользователя
fast_deer
Сообщения: 57

Re: Как написать Скрипт

Сообщение fast_deer »

Конкретно надо сделать скрипт (дальше я хочу его засунуть в меню МС) который проверяет наличие подключенного устройства (диска) и при его отсутствии - смонтирует, а при присутствии - отключит. Причем имя диска я ему буду подсовывать в качестве параметра скрипта (у меня их около 10 дисков, только из-за этого числа затеял я весь сыр-бор, так как "ручками" очень долго писать. Параметры файловой системы не интересуют так как я для (де)монтажа использую команду монтирования каталога (например: mount /mnt/dos) и все параметры уже настроены в fstab.
Я тут почитал/поэксперементировал и пришел к выводу, что лучше всего использовать для определения наличия диска файл /etc/mtab (нет заморочек с правами) через grep. Получается что-то типа

if ! grep "hde1" /etc/mtab 1 > /dev/null ; then
mount /mnt/dos && setterm -reset && echo "Mount Disk C:\ (DOS)" && cd /mnt/dos
else
umount /mnt/dos && setterm -reset && echo "Deattach Disk C:\ (DOS)"
fi

Отсюда вопрос (уже немного другого плана): можно ли как либо сократить данный скрипт (чтоб не писать его на КАЖДОЕ устройство) используя входящий параметр. Как это можно реализовать? Если у кого то будет более лучшее решение - буду очень рад его принять Толко желательно с коментариями, так как я еще не силен в шелл-программировании (иначе бы не спрашивал)
С уважением,
Алексей
--------------------------------
"Я не волшебник - я только учусь" (С) к/ф "Золушка"
Спасибо сказали:

Petya

Re: Как написать Скрипт

Сообщение Petya »

(fast_deer @ Вторник, 25 Май 2004, 19:36) писал(а):Конкретно надо сделать скрипт (дальше я хочу его засунуть в меню МС) который проверяет наличие подключенного устройства (диска) и при его отсутствии - смонтирует, а при присутствии - отключит. Причем имя диска я ему буду подсовывать в качестве параметра скрипта (у меня их около 10 дисков, только из-за этого числа затеял я весь сыр-бор, так как "ручками" очень долго писать. Параметры файловой системы не интересуют так как я для (де)монтажа использую команду монтирования каталога (например: mount /mnt/dos) и все параметры уже настроены в fstab.
Я тут почитал/поэксперементировал и пришел к выводу, что лучше всего использовать для определения наличия диска файл /etc/mtab (нет заморочек с правами) через grep. Получается что-то типа
if ! grep "hde1" /etc/mtab 1 > /dev/null ; then
mount /mnt/dos && setterm -reset && echo "Mount Disk C:\ (DOS)" && cd /mnt/dos
else
umount /mnt/dos && setterm -reset && echo "Deattach Disk C:\ (DOS)"
fi
Отсюда вопрос (уже немного другого плана): можно ли как либо сократить данный скрипт (чтоб не писать его на КАЖДОЕ устройство) используя входящий параметр. Как это можно реализовать? Если у кого то будет более лучшее решение - буду очень рад его принять Толко желательно с коментариями, так как я еще не силен в шелл-программировании (иначе бы не спрашивал)

у тебя как то сложно получается :huh:
я в принципе тут написал небольшой shell скрипт .. но он пока в бета тестировании находится ...
меня интересует главная вещь - откуда будут братся "названия" дисков (/dev/hdaX или там еще что нибудь ) .. типа они у тебя как постоянные идут или как ?

имеется ввиду - прописаны ли она в fstab или они типа являються УЖЕ определёнными ПОСТОЯННЫМИ ( то есть например ты точно знаешь что один из них /dev/hdc4 скажем - и он им и останется )
Спасибо сказали:

Аватара пользователя
fast_deer
Сообщения: 57

Re: Как написать Скрипт

Сообщение fast_deer »

По поводу сложности: если можно сделать это проще - скажите как?
Мне по ходу работы в Линуксе часто приходится монтировать/размонтировать диски (особенно флэш и сидюки). Для монтирования, как я и говорил выше, использую команду монтирования КАТАЛОГА (типа mount /mnt/dos), а не устройства, так как команда mount при монтаже сначала просматривает fstab, где у меня уже все настроено(! я писал выше об этом). IMHO, обращение по каталогу более удобное, нежели по названию устройства. Конструкция команды, что я приводил, работает (надеюсь, не надо объяснять как :-)) ). Интересует передача скрипту параметра для монтирования нужного устройства (example: Script dos), причем в большей степени интересует обработка ошибок (отсутствие парамера для монтирования или не тот параметр)
И еще раз повотрюсь: если у кого то найдется более лучшее решение данной задачи (особенно в части минимизации скрипта, так как в данной реализации его надо писать на каждый девайс), а также дельные советы, то буду этому рад
"Я не волшебник, я только учусь!"

ЗЫ: я не хочу делать суперуниверсальный скрипт: если надо добавить/изменить в конфигурации дисков - мне проще настроить fstab и (временно) забыть про него. Важен сам скрипт, точнее его работоспособность.
С уважением,
Алексей
--------------------------------
"Я не волшебник - я только учусь" (С) к/ф "Золушка"
Спасибо сказали:

Petya

Re: Как написать Скрипт

Сообщение Petya »

(fast_deer @ Пятница, 28 Май 2004, 21:21) писал(а):По поводу сложности: если можно сделать это проще - скажите как?
Мне по ходу работы в Линуксе часто приходится монтировать/размонтировать диски (особенно флэш и сидюки). Для монтирования, как я и говорил выше, использую команду монтирования КАТАЛОГА (типа mount /mnt/dos), а не устройства, так как команда mount при монтаже сначала просматривает fstab, где у меня уже все настроено(! я писал выше об этом). IMHO, обращение по каталогу более удобное, нежели по названию устройства. Конструкция команды, что я приводил, работает (надеюсь, не надо объяснять как :-)) ). Интересует передача скрипту параметра для монтирования нужного устройства (example: Script dos), причем в большей степени интересует обработка ошибок (отсутствие парамера для монтирования или не тот параметр)
И еще раз повотрюсь: если у кого то найдется более лучшее решение данной задачи (особенно в части минимизации скрипта, так как в данной реализации его надо писать на каждый девайс), а также дельные советы, то буду этому рад
"Я не волшебник, я только учусь!"
ЗЫ: я не хочу делать суперуниверсальный скрипт: если надо добавить/изменить в конфигурации дисков - мне проще настроить fstab и (временно) забыть про него. Важен сам скрипт, точнее его работоспособность.

дык весь прикол состоит в том что супер пупер минимизации тут не добьёшься никак ...
в принципе я тут скрипт накатал - но ты только скажи как ты саму обработку хочешь сделать ? короче просто выложи сюда твой фстаб - те части которые ты собираешься монтировать - что бы мне знать что в скрипт пихать .. а я тут тебе выложу ...
и если я не ошибаюсь - то монтировать надо именно устройство :huh:
Спасибо сказали:

Аватара пользователя
Selecter
Сообщения: 311

Re: Как написать Скрипт

Сообщение Selecter »

Так зачем тебе писать скрипт? Существует supermount для этого. Вставил cdrom, зашёл в /mnt/cdrom и считывает с диска. floppy, dvd и другие устройства также работают через supermount.
Спасибо сказали:

Petya

Re: Как написать Скрипт

Сообщение Petya »

(Selecter @ Суббота, 29 Май 2004, 3:02) писал(а):Так зачем тебе писать скрипт? Существует supermount для этого. Вставил cdrom, зашёл в /mnt/cdrom и считывает с диска. floppy, dvd и другие устройства также работают через supermount.

а это случаем не autofs называется ?

или я не о том подумал ? :unsure:
Спасибо сказали:

Аватара пользователя
Selecter
Сообщения: 311

Re: Как написать Скрипт

Сообщение Selecter »

Нет, это не autofs. supermount не входит в стандартное ванильное ядро. Чтобы получить supermount, надо пропатчить ядро.
Спасибо сказали:

Petya

Re: Как написать Скрипт

Сообщение Petya »

(Selecter @ Суббота, 29 Май 2004, 11:52) писал(а):Нет, это не autofs. supermount не входит в стандартное ванильное ядро. Чтобы получить supermount, надо пропатчить ядро.

у меня 2.4.22 по моему на этмо компе ... :huh:
Спасибо сказали:

Cursed
Сообщения: 61

Re: Как написать Скрипт

Сообщение Cursed »

Спасибо сказали:

Аватара пользователя
fast_deer
Сообщения: 57

Re: Как написать Скрипт

Сообщение fast_deer »

Всем привет! Это опять я со скриптами:
Я щее раз повторюсь: я буду монтировать каталог(!! точнее его имя). Команда типа
mount /mnt/usb подмонтирует мне устройство /dev/sda1 так как это УЖЕ прописано в fstab. Так что я не вижу смысла посылать сюда мой fstab (хотя он и не секретный). Достаточно указать в скрипте имя ресурса (например так: _имя_ресурса_) а я уже подставлю свои имена каталогов. В самом скрипте указывать параметры монтирования устройства не надо - это все УЖЕ указано в fstab.
Задача проста: надо чтобы скрипт в качестве параметра принимал имя каталога (без слешей, просто имя, например: dos или flash) и подставлял в команду (выше). Причем должна осуществляться проверка состояния устройства и выполняться обратное действие (при подключенном девайсе - его отключить и наоборот)
Я приводил скрипт который у меня работает (правда криво..., но работает), но в данном варианте его надо писать на каждое устройство (есть желание воткнуть его в МС - он поддерживает ввод параметров). Вот я и думаю (тоесть здесь и заключается сложноть задачи) как в этот скрипт "впихать" имя каталога в качестве параметра, причем чтоб скрипт осуществял проверку на отсутствие входного параметра и неверного параметра. Ненадо перечислять ВСЕ параметры (имена каталогов). От этого он может сократиься до 10 раз. Достаточно просто указать пару-тройку и в каком месте добавить/поравить, а дальше я постораюсь довести его до ума (в институте проходил програмирование, но уже забыл почти все, так как мне это было не нужно. Это к тому что я не совсем дурак-думать тоже умею, особенно когда есть примеры:-))) ).

По поводу автоматического монтирования - если бы оно мне было нужно - я бы просто включил его в fstab`е.
С уважением,
Алексей
--------------------------------
"Я не волшебник - я только учусь" (С) к/ф "Золушка"
Спасибо сказали:

Sergey
Сообщения: 2

Re: Как написать Скрипт

Сообщение Sergey »

В общем то, что тебе нужно - называется automount. На тему autofs не помню, вроде не совсем то. Автомоунт - это порт с солярки висит у тебя демон и проверяет в какие каталоги заходишь... по дефолту эта фигня включена и вроде-бы настроена в шляпе, мандрак и других подобных, в слаке ручками. инфы тоде есть, ховту всякие и маны...
Maniaq
Спасибо сказали:

Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Как написать Скрипт

Сообщение madskull »

Ну говорят же вам, человеку надо объяснить, как передавать параметры! А вы про автомонтирование...

Если я правильно понял, то можно сделать так:
вызов: Script dos
внутренности:

Код: Выделить всё

# в переменной $1 - имя переданного каталога (dos)
# определяем, подключено ли устройство
mntdir=`awk '{print$2}' /etc/mtab | grep /$1$` # смонтированный каталог или пусто
if [ -z "$mntdir" ]; then
   # не подключено
   # берем тогда точку монтирования из fstab
   mntdir=`awk '{print$2}' /etc/fstab | grep /$1$`
   mount $mntdir && setterm -reset && echo "Mount Disk C:\ (DOS)" && cd $mntdir
else
    # подключено
    umount $mntdir && setterm -reset && echo "Deattach Disk C:\ (DOS)"
fi


Надеюсь, ничего не попутал, так как не проверял
Добавил @ 15.06.2004 16:57
вот, правда, что с "echo "Deattach Disk C:\ (DOS)" не знаю...
ArchLinux / IceWM
Спасибо сказали:

Hatred
Сообщения: 37

Re: Как написать Скрипт

Сообщение Hatred »

Нет, это не autofs. supermount не входит в стандартное ванильное ядро. Чтобы получить supermount, надо пропатчить ядро.


а вы когда последний раз собирали ядро взятое с kernel.org???
и вам говоряет про autofs, а не про supermount --- разные вещи!
учите матчасть.
Спасибо сказали:

Аватара пользователя
fast_deer
Сообщения: 57

Re: Как написать Скрипт

Сообщение fast_deer »

(madskull @ Вторник, 15 Июня 2004, 12:55) писал(а):Ну говорят же вам, человеку надо объяснить, как передавать параметры! А вы про автомонтирование...
Если я правильно понял, то можно сделать так:
вызов: Script dos
внутренности:
{cute}
Добавил @ 15.06.2004 16:57
вот, правда, что с "echo "Deattach Disk C:\ (DOS)" не знаю...


Большое Спасибо madskull за приведенный скрипт! Хотя честно говоря он у меня не заработал.
Пришлось помучиться долго, доводя его рабочего состояния.
Вот сей "шедевр" :

#Начало
+ d /mnt
= t d
1 Mount/umount device
DIR=%f
FDIR=%d"/"%f
TMP=`grep -c "$FDIR" /etc/mtab`
if [ "$TMP" == "0" ]; then
mount $FDIR
else
eject $FDIR
fi
#Конец

вставленный в файл .mc.menu и покладенный в /mnt. По клавише F2 в этом каталоге вызывает меню в МС (мне в нем удобней работать) и можно смело запускать - при повторном запуске (на каталоге) отмонтирует, если было примонтировано. Скрипт немного кривоватый, так как пытается сделать EJECT для раздела HDD что не совсем правильно - не хватило времени доделать

Спасибо также всем ответившим
С уважением,
Алексей
--------------------------------
"Я не волшебник - я только учусь" (С) к/ф "Золушка"
Спасибо сказали: