Часть 2. Используя консольные команды.
Заодно устраняем проблемы с кодировками и занимаемся некоторыми улучшательствами и малой автоматизацией по просьбам товарищей.
В первой части я использовал графический samba-клиент, который, кроме всего прочего умеет генерировать скрипт монтирования сетевой папки (меню Options->Generate mountscript), вот его-то и надо подправить. Для ускорения процесса я выложу уже подправленный и поясню что к чему.
#! /bin/sh
# SMB mount script
# created by LinNeighborhood
где
smbmount
– собственно команда, монтирующая сетевую папку
//TESTCOMP/shared
– адрес нашей сетевой папки
/mnt/winshared/
— точка монтирования, где у нас после выполнения команды отобразится содержимое сетевой папки. Должна быть создана заранее. Это просто любая пустая директория, создающаяся где вам удобно (но лучше все-таки в /mnt) из графической оболочки или с помощью команды mkdir
<путь_к_папке> (напр. mkdir /mnt/winshared/)
-o
– после этого параметра (и пробела) следуют опции монтирования (они перечисляются через запятую без пробелов):
guest
– произвести подключение без указания имени пользователя и пароля. В некоторых случаях имя пользователя и пароль требуются (см. настройки на компьютере с Windows),в таком случае необходимо заменить guest
на user=имя_пользователя,pass=пароль
Аналогично опции guest
сработают опции user=guest,pass=
или user=guest%
iocharset
– кодировка, используемая Linux’ом (в нашем случае utf8)
codepage
– кодировка, в которой удаленный компьютер передает имена файлов в сетевой папке (в нашем случае это кодовая страница 866). Внимание! Перед номером кодовой страницы необходимо не забыть написать cp (cp866 а не просто 866).
fmask и dmask
– права доступа соответственно к файлам и директориям. Тут простор для решений (можно и вообще убрать эти параметры), но я поставил такие, ибо если оставить по умолчанию, у всех файлов будет атрибут выполнения, что не есть хорошо.
Этот скрипт нужно сохранить в текстовом файле под удобным названием в удобной вам папке и установить ему права на исполнение.
Проблема с кодировками устранена
Скрипт размонтирования сетевой папки
#! /bin/sh
umount /mnt/winshared
Можно автоматически создавать точку монтирования перед собственно монтированием сетевой папки, для этого надо дополнить наш скрипт, вставив следующий код перед smbmount
if ! [ -d /mnt/winshared ]; then
mkdir /mnt/winshared
fi
Про оператор
if
можно подробнее прочесть тутЯ дам лишь краткое пояснение:
-d имя_директории
– проверка, существует ли такая директория! – аналог логического оператора НЕ
Т.е. данный код работает таким образом – в случае, если не существует директории /mnt/winshared то выполняются команды внутри конструкции then fi, а там как раз создание директории, которая в дальнейшем будет использована в качестве точки монтирования.
Удобно монтировать сетевые папки автоматически, например, при старте X-server’а, для этого достаточно скопировать скрипт в директорию Startup того пользователя, под которым вы работаете. Но есть небольшая проблема – скрипт запустится без всяческих сообщений, в т.ч. и в случае ошибки (например, если компьютера с расшаренной папкой нет в сети). Исправляем этот недочет:
#!/bin/bash
if ! [ -d /mnt/winshared ]; then
mkdir /mnt/winshared
fi
smbmount //TESTCOMP/shared /mnt/winshared/ -o guest,iocharset=utf8,codepage=cp866,fmask=644,dmask=755 >/tmp/sharemess
if [ $? -ne 0 ]; then
xmessage -title error -file /tmp/sharemess
wait
rf /tmp/sharemess
exit 1
fi
exit 0
До строки
if [ $? ...
все осталось без изменений, кроме того, что добавилось перенаправление вывода команды smbmount
во временный файл sharemess (>/tmp/sharemess
), который используется позже.Оператор
if
, после операции монтирования анализирует результат работы операции монтирования (т.е. ее код завершения), хранящийся в системной переменной $?
, и если он не равен (операнд -ne
) нолю, значит, произошла ошибка, текст которой будет выведен пользователю в диалоговом окне командой xmessage
. Ее параметры:-title заголовок
– заголовок диалогового окна-file имя_файла
– файл с текстом диалогового окна. В данном случае – файл, в котором хранится вывод команды smbmount
.Другие параметры команды
xmessage
можно увидеть выполнив в консоли xmessage --help
После выдачи сообщения об ошибке, скрипт ждет когда команда
xmessage
завершится, т.е. пользователь нажмет кнопку OK (это достигается использованием команды wait
), удаляет файл с сообщением об ошибке (rf /tmp/sharemess
) и завершается с кодом завершения 1.Так будет выглядеть сообщение об ошибке
Если ошибки не произошло, скрипт завершает свою работу с кодом завершения 0.
Для открытия сетевой папки в графической среде после монтирования, необходимо дополнить вышеприведенный скрипт вызовом файлового менеджера ROX (команды вставляются перед
exit 0
):
rox /mnt/winshared
wait
Скачать заметку (Yandex.Disk, DOC)
Скачать заметку (Mega.nz, PDF)
UPD
А почти устраивающий меня ответ, как обычно, нашелся, но уже поздно. И по совсем другому запросу.
Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/136034.html
Прокомментировать заметку можно по ссылке выше.