Показаны сообщения с ярлыком совместная работа. Показать все сообщения
Показаны сообщения с ярлыком совместная работа. Показать все сообщения

воскресенье, 31 марта 2019 г.

Linux. Обмен файлами по модели "компьютер – компьютер" как альтернатива E-mail


Данная публикация может рассматриваться как расширение (обновление, дополнение, уточнение) ранее опубликованного материала о периодическом запуске Dropbox в указанный период времени и отслеживании появления новых файлов (папок) в папке общего доступа (обмена) Dropbox – https://onformix.blogspot.com/2019/02/dropbox-auto.html.

Краткий план публикации:

1. Что понимается под моделью обмена "компьютер – компьютер".
2. Почему обмен файлами, а не E-mail.
3. Практическая реализация с использованием скриптов на bash.
Создание файла, переименование файла при его создании. Автоматическая отправка файла (файлов) и их получение без участия пользователя. Вывод уведомлений на экран при получении файлов или открытие менеджера файлов в определённой папке.

В дальнейшем будет использоваться термин "папки". В графических окружениях Cinnamon и MATE используется именно этот термин, тогда как в xfce используется "каталоги". Разное употребление, вероятно, связано с пониманием авторов русских локализаций термина Folder.

Про личное понимание модели обмена "компьютер – компьютер" можно прочитать здесь.

Для ответа на вопрос "почему ..." придётся немного растечься "мыслею по древу".

В последнее время замечено, что в борьбе со спамом "усердие всё превозмогает" (К.Прутков), поэтому иногда важные сообщения от заведомо "валидных" отправителей попадают в папку спам. Чтобы этого избежать необходимо настраивать фильтры почтовых ящиков (примеры для Gmail, почты Яндекс).

Естественно предположить, что это должны сделать все стороны, принимающее участие в обоюдной переписке. Вместе с тем не секрет, что подавляющее большинство пользователей предпочитает не читать те же help от авторов ресурсов или программных решений, которыми они пользуются, а осуществлять свою деятельность методом "научного тыка". Поэтому задача настройки почтовых серверов респондентов или ляжет на ваши плечи или "Скорее Дунай потечёт вспять и небо упадёт на землю, чем сдастся Измаил" (пояснение).

Однако для меня наиболее раздражающим фактором явились ситуации, когда на мои сообщения начинали отвечать с темой первого попавшегося моего предыдущего сообщения (нажать на кнопку "Ответить"). Представьте ситуацию когда вами отправлено сообщение с темой "О возможности встречи", а в ответ получаете сообщение, тема которого, например "Re: Об изменениях в законодательстве". С моей стороны, вероятно, естественно предположить, что в письме речь пойдёт об ответе пользователя на содержание моего письма по теме изменений в законодательстве. А фактически – речь идёт совсем о другом. Не знаю кого как, но со временем меня это стало бесить.

Можно, конечно, перейти на обмен через Viber или Telegram, но опять же две стороны, принимающие участие в обмене должны иметь однотипные мессенджеры. И это преодолимо. Но когда твои другие контакты начинают видеть, что ты, наконец-то, появился в сети, то склонны забрасывать совершенно не информативными сообщения типа "Чего молчишь?" или "Ты где?". В результате часто происходило, что после включения приложения мессенджера с вдумчивой деятельностью за компьютером приходилось прощаться. Так как существуют респонденты, которые при отсутствии немедленного ответа на их сообщения в мессенджере начинают обижаться.

Поэтому два своих самых активных респондента были мной переведены на модель обмена сообщениями со мной в виде файлов. Дополнительным преимуществом такого способа является то, что с компьютера можно отправить не только небольшие текстовые или графические файлы, но и мультимедиа не слишком больших объёмов. Их размер может составить 50-150 Мб, но конкретное значение зависит от скорости среды передачи данных и продолжительности работы клиента синхронизации, если он запускается на непродолжительное время, по истечении которого автоматически прекращает свою работу (закрытие приложения).

Для реализации такого механизма обмена необходимо, чтобы у получающего и передающего была учётная запись на каком-либо ресурсе из перечисленных: Dropbox, Mega, pCloud, Диск Яндекс, Диск Google, где и создаётся общая папка обмена, которая в дальнейшем синхронизируется с компьютерами участников обмена.

Примечание 1. Так как Google не предоставляет клиента синхронизации для Linux, то пользователям Ubuntu и производных можно воспользоваться сторонним решением – клиентом ODrive.

Следующим шагом является создание скриптов на bash. Здесь, скорее всего, эта задача ляжет на плечи наиболее подготовленного пользователя, который сделает это или через сеанс удалённого доступа, или в ходе личного общения с компьютером респондента.

При моей переписке обмен сообщениями производится через написание файлов odt, редактируемых в Libre Office (хочется надеяться, что встроенная проверка правописания заставит обращать внимание пользователей на то, что после точки и запятой необходим пробел, а предложение следует начинать с заглавной буквы).

Как это происходит:

1. В папку предобмена копируется заранее созданный шаблон сообщения Message.odt
2. Скопированный файл переименовывается в день_года.часы-минуты.Message.odt
3. Переименованный файл открывается на редактирование сопоставленным приложением Libre Office Writer или Free Office.

Как пример именования файла привожу 081.17-24.Message.odt, из наименования которого понятно, что файл создан в 81-й день от начала года в 17 часов 24 минуты. Подобный формат гарантирует уникальность имени файла, для перезаписи которого необходимо вернуться во времени назад в 81-й день от начала года к 17 часам 24 минутам. А так как машину времени ещё не изобрели, то и второго файла с таким же именем быть не может.

Далее подразумевается, что папка Exchange является папкой обмена сообщениями и другими файлами со всеми пользователями. А уже в ней идёт разделение по пользователям:

– Outbox-1 – для отправки 1-му респонденту;
– Outbox-2 – для отправки 1-му респонденту;
– Inbox-1 – для получения от 1-го респондента;
– Inbox-2 – для получения от 2-го респондента.


Создание файла

Реализация описанных выше трёх действий осуществляется скриптом на bash.

Пример для Libre Office:

#!/bin/bash
sm=$HOME/scripts/Message.odt
dm=$HOME/Exchange/Outbox-1
date=`date '+%j.%H-%M'`
cp $sm $dm
mv $dm/Message.odt $dm/$date.Message.odt
xdg-open $dm/$date.Message.odt
exit

Пример для Softmaker Free Office:

#!/bin/bash
sm=$HOME/Шаблоны/Message.docx
dm=$HOME/Exchange/Outbox-1
date=`date '+%j.%H-%M'`
cp $sm $dm
mv $dm/Message.docx $dm/$date.Message.docx
/usr/bin/textmaker18free $dm/$date.Message.docx
exit

Со временем, со своей стороны захотелось назначать произвольное имя создаваемого файла, которое по аналогии можно считать темой сообщения E-mail.

Пример для Libre Office:

#!/bin/bash
sm=$HOME/scripts/Message.odt
dm=$HOME/Exchange/Outbox-1
temp=$HOME/scripts
cp $sm $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".odt
find $dm -mmin -1 > $temp/created.txt
perl -ni -e 'print unless $. == 1' $temp/created.txt
read var < $temp/created.txt
xdg-open "$var"
exit

Пример для Softmaker Free Office:

#!/bin/bash
sm=$HOME/Шаблоны/Message.docx
dm=$HOME/Exchange/Outbox-1
temp=$HOME/scripts
cp $sm $dm/"`zenity --entry --title="Имя файла" --text="Назначьте имя создаваемому файлу"`".docx
find $dm -mmin -1 > $temp/created.txt
perl -ni -e 'print unless $. == 1' $temp/created.txt
read var < $temp/created.txt
/usr/bin/textmaker18free "$var"
exit

Примечание 2. На одном из компьютеров используется не Libre Office, а Softmaker (Free Office), что обусловлено более низкими требованиями Free Office к аппаратной части компьютера. К примеру, при сравнении объёма израсходованной оперативной памяти после запуска текстовый редактор Softmaker "съел" 66 Мегабайт, а Writer пакета Libre Offrice – 234 Мб.

Запуск скрипта bash у меня оформлен в виде значка запуска (используется графическое окружение xfce). В Cinnamon и MATE тоже можно сделать кнопки запуска, но вследствие неиспользования у себя данных оболочек решение вам придётся найти самостоятельно. Когда-то мной использовался Cinnamon и для того времени создать в нём кнопку запуска можно было так – https://onformix.blogspot.com/2016/01/kn-zap-cinnamon.html


Отправка файла (файлов)

Отправка сообщений из папки предобмена Exchange в папку обмена производится по расписанию. Это сделано из тех соображений, чтобы респондент не воспринял незавершённый вариант редакции файла в качестве окончательного.

Скрипт смотрит в папку предобмена. Если он там не находит никаких файлов, то он ничего не делает и выключается. Если находит, то копирует всё содержимое из папки предобмена в папку обмена, а в папке предобмена удаляет весь содержащийся в ней контент. Для частного случае приведен комментарий, обозначенный символами #.

Папка Share-1 является папкой обмена с 1-м пользователем, в которой Inbox – условно "Входящие" от меня. Имена папок могут быть любыми, так как для Mega и pCloud имя папки компьютера значения не имеет, так как они сопоставляются в оболочке управления клиентом, а для Dropbox и Диска Яндекс сопоставление производится через механизм символических ссылок.

#!/bin/bash
D1=$HOME/Exchange/Outbox-1
D2=$HOME/Share-1/Inbox
filecount=`find $D1 -type f | wc -l`
if [ $filecount -eq 0 ];
then
:
else
cp -r $D1/* $D2
find $D1/* -delete
# Если все файлы odt вами в дальнейшем экспортируются в pdf, то имеет смысл исходные файлы odt удалять. Для этого уберите символ # в строках ниже.
#sleep 5
#find $D2 -name "*.odt" -delete
fi
exit

Запуск скрипта производится по расписанию через пользовательское задание cron.

Ниже приводится пример назначения выполнения задания с 19 до 22 часов ежедневно через каждые 30 минут:

*/30 19-22 * * * export DISPLAY=:0 && путь_к_скрипту.sh

Примечание 3. Применение export DISPLAY=:0 обусловлено тем, что задания отправки/получения осуществляются у меня в ходе запуска остановки Dropbox, в скрипт запуска/остановки которого они включены как команды sh. А отображение значков статуса Dropbox как раз и обеспечивается инструкцией export DISPLAY=:0

Примечание 4. В команды правого контекcтного меню Thunar можно добавить пункт, например, "Отправить по обмену". При этом выделенные папки или файл(ы) будут отправляться в папку предобмена. Пример как это сделать в xfce читать здесь. В качестве команды указать cp -r %F путь_к_папке_предобмена  В качестве условий появления можно отметить все возможные варианты.
Как сделать для Cinnamon и MATE также не скажу по причине неиспользования у себя данных оболочек. Но решения можно поискать в Интернет.

Предотвращение отправки "пустых" файлов

Бывают ситуации, когда редактирование очередного созданного скриптом файла ещё не завершено, а задание отправки выполняется. В этом случае пользователю будет отправлен или "пустой" (только что созданный файл), или файл не до конца отредактированный (промежуточно сохранённый, незавершённый).

В таком случае перед процедурой отправки файла (файлов) можно включить проверку на запущенность текстового редактора. Результат проверки записывается в файл, например, busy.txt (при записи очередного результата проверки данный файл будет перезаписан новым значением). Если значение файла равно 0, то текстового редактора не запущено и файл(ы) можно отправлять. Если текстовый редактор запущен, то результат проверки не будет равен нулю (при тестах результат был равен 2) и отправку производить не надо.

Пример для Libre Office:

#!/bin/bash
check=путь_к_расположению_файла_с результатом_проверки
ps ax | grep -v grep | grep writer | wc -l > $check/busy.txt
value=`cat $check/busy.txt`
if [ $value -eq 0 ];
then
путь_к_скрипту_отправки
else
:
fi
exit

Пример для Softmaker (Free Office):

#!/bin/bash
check=путь_к_расположению_файла_с результатом_проверки
task=textmaker
ps ax | grep -v grep | grep $task | wc -l > $check/busy.txt
value=`cat $check/busy.txt`
if [ $value -eq 0 ];
then
путь_к_скрипту_отправки
else
:
fi
exit

Примечание 5. У пользователей, использующих запуск Dropbox только на определённое время, то есть запуск – работа – выключение (подробности) имеется два варианта его запуска: первоначальный и периодический. Первоначальный запуск производится на длительное время при включении компьютера через некоторое время (через 30-60 секунд), а периодический через пользовательское задание cron. В этом случае может возникнуть, если так можно выразиться, коллизия, связанная с тем, что пользователь включился примерно как раз в то время, когда настало время запуска Dropbox через задание cron. Чтобы такого не происходило, необходимо перед запуском Dropbox осуществлять проверку на его "запущенность", то есть проверять наличие в системе существования процесса Dropbox. Скрипт запуска Dropbox после старта системы условно назовём dropbox-1.sh, а запуск по расписанию cron как dropbox-2.sh

Пример для варианта включения на 20 минут после старта системы. В тексте скрипта предусматривается, что продолжительность работы Dropbox при его запуске через dropbox-2.sh составляет 5 минут (300 секунд).

#!/bin/bash
ver=`cat /home/minter/.dropbox-dist/VERSION`
task=dropbox-dist/dropbox-lnx.x86_64-$ver/dropbox
ps ax | grep -v grep | grep $task | wc -l > /home/minter/.scripts/dropbox.txt
value=`cat /home/minter/.scripts/dropbox.txt`
if [ $value -eq 0 ];
then
/home/minter/.scripts/dropbox-1.sh
else
sleep 330
/home/minter/.scripts/dropbox-1.sh
fi
exit

Аналогичным способом производится проверка и при запуске dropbox-2.sh

#!/bin/bash
ver=`cat /home/minter/.dropbox-dist/VERSION`
task=dropbox-dist/dropbox-lnx.x86_64-$ver/dropbox
ps ax | grep -v grep | grep $task | wc -l > /home/minter/.scrips/dropbox.txt
value=`cat /home/minter/.scrips/dropbox.txt`
if [ $value -eq 0 ];
then
/home/minter/.scripts/dropbox-2.sh
else
:
fi
exit


Получение файла (файлов)

Скрипт получения сообщений аналогичен скрипту отправки, только выполняющим обратное действие. Папка обмена мониторится на предмет новых файлов, при нахождении которых они перемещаются в локальную папку компьютера. Далее на экран выводится сообщение о файле (файлах) от пользователя и папка с его сообщением (сообщениями) открывается в менеджере файлов.

Примечание 6. Для вывода текстового сообщения на экран, вероятно, может потребоваться запуск скрипта с инструкцией:

export DISPLAY=:0 && путь_к_скрипту.sh

Так это или нет попробуйте выяснить экспериментально. Лично у меня запускается с инструкцией, так как скрипт выполняется в процессе запуска Dropbox с необходимостью отображения индикатора в системной лотке (трее, на подставке рабочего стола).

Если какое-то действие не надо, то поставьте в начале описывающего данное действие строки символ # или исключите её из скрипта.

#!/bin/bash
D1=$HOME/Share-1/Outbox
D2=$HOME/Exchange/Inbox-1
user-1=`find $D1 -type f | wc -l`
if [ $user-1 -eq 0 ];
then
:
else
cp -r $D1/* /$D2
find $D1/* -delete
fi
note=`find $D2 -type f | wc -l`
if [ $note -eq 0 ];
then
  sleep 5
else
  zenity --width=100 --info --text "\nФайл(ы) от User-1"
xdg-open $D2
fi
exit

Запуск также осуществляется по расписанию на периодической основе.

Если выполнение скриптов отправки/получения осуществляется при запуске/остановке клиентов синхронизации Dropbox или Диска Яндекс, то эти команды можно включать так:

#!/bin/bash
путь_к_скрипту_отправки.sh
dropbox start -i
sleep 290
путь_к_скрипту_получения.sh
sleep 10
dropbox stop
exit

#!/bin/bash
путь_к_скрипту_отправки.sh
yandex-disk start
sleep 290
путь_к_скрипту_получения.sh
sleep 10
yandex-disk stop
exit

Задержка перед остановками клиентов в 10 секунд даст возможность клиентам синхронизации передать изменения в облако (удаление отправленных пользователем сообщений), тем самым подтвердив факт получения сообщения от пользователя.

Для Mega и pCloud запуск скриптов отправки необходимо осуществлять до запуска этих клиентов, например,

путь_к_скрипту_отправки.sh
megasync

путь_к_скрипту_отправки.sh
/home/user/pcloud

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

путь_к_скрипту_получения.sh
sleep 10
скрипт_остановки_megasync

путь_к_скрипту_получения.sh
sleep 10
скрипт_остановки_pcloud

Скрипты остановки Mega и pCloud имеют особенности реализации. Смотреть примеры скрипта остановки Mega и скрипта остановки pCloud.


После всего этого можно надуть щёки от осознания собственной значимости или мании собственного величия, потому что


воскресенье, 10 февраля 2019 г.

Автоматизация процессов в Linux: периодический запуск Dropbox в указанный период времени

Выполнение указанной задачи может быть обусловлено необходимостью отслеживания появления новых файлов (папок) в папке общего доступа (обмена) Dropbox.

В частности, с 19 до 22 часов Dropbox должен запускаться на 10 минут. При этом период между данными запусками должен составить 30 минут.

При завершении этого 10-минутного сеанса работы папка общего доступа (обмена) должна быть проверена на наличие новых файлов/папок. Если такие файлы/папки имеются, то они подлежат перемещению в другую папку. Затем папка назначения открывается сопоставленным менеджером файлов (nautilus, nemo, caja, thunar).

Так как готового решения, на первый взгляд, не существует, то пришлось создать "самопальное" решение на bash. Может быть, кому-нибудь пригодится это решение или его отдельные элементы.


Задача является комплексной и состоит из нескольких отдельных задач:

– проверка наличия уже существующего процесса Dropbox;

– запуск 10-минутного сеанса работы;

– проверка наличия файлов/папок в папке общего доступа;

– назначение периодического пользовательского задания cron.


Проверка существования запущенного сеанса Dropbox обусловлена тем, что в назначенное время Dropbox может быть запущен вручную для выполнения какой-либо синхронизации. Если Dropbox уже запущен, то он должен быть остановлен.

Основным процессом Dropbox является выполняемая задача

dropbox-dist/dropbox-lnx.x86_64-.../dropbox , где в качестве многоточния указана версия используемого в настоящее время клиента. Но момент написания данной публикации такой версией является 66.4.84, поэтому в диспетчере задач необходимо произвести поиск задачи

dropbox-dist/dropbox-lnx.x86_64-66.4.84/dropbox

C течением времени клиент обновляется, поэтому версия будет постоянно меняться. По этой причине выполняющий данную проверку скрипт будет использовать несколько переменных.

1. Определяется текущая версия ПО Dropbox

ver=`cat ~/.dropbox-dist/VERSION`

2. Нас основании текущей версии указывается имя задачи для поиска

task=dropbox-dist/dropbox-lnx.x86_64-$ver/dropbox

3. Осуществляется поиск задачи Dropbox. Результат имеет два варианта: 0 – Dropbox не запущен, 1 – Dropbox запущен. Результат записывается в файл dropbox.txt  Расположение данного файла указано для моих нужд, у Вас оно определяется Вами. При выводе результата в файл dropbox.txt предыдущее значение заменяется новым, поэтому необходимости в последующем удалении данного файла не имеется.

ps ax | grep -v grep | grep $task | wc -l > ~/scripts/dropbox.txt

4. Для следующей операции сравнения "если ... то ..." производится считывание значения, записанного в файл dropbox.txt

value=`cat ~/scripts/dropbox.txt`

5. Если Dropbox не запущен (в dropbox.txt записан 0), то никаких действий не производится. В противном случае (Dropbox запущен) выдаётся команда остановки Dropbox.

 if [ $value -eq 0 ];
then
:
else
dropbox stop
fi

В результате получился следующий скрипт bash, которому условно назначено имя exist.sh

#!/bin/bash
ver=`cat ~/.dropbox-dist/VERSION`
task=dropbox-dist/dropbox-lnx.x86_64-$ver/dropbox
ps ax | grep -v grep | grep $task | wc -l > ~/scripts/dropbox.txt
value=`cat ~/scripts/dropbox.txt`
if [ $value -eq 0 ];
then
:
else
dropbox stop
fi
sleep 5 && exit

Команда 5 секундной паузы введена для "перестраховки", так как после команды остановки Dropbox необходимо 3-5 секунд для закрытия всех открытых подключений.


Проверка наличия в папке обмена новых файлов/папок. Автоматический перенос данных в другую папку.

Определяются переменные: H-1 – общая папка (обмена) Dropbox, H-2 – папка назначения, в которую будут переноситься данные.

D1=/home/user/Dropbox/H-1
D2=/home/user/Work/H-2

Производится подсчёт файлов (соответственно и папок, в которых будут расположены файлы):

count=`find $D1 -type f | wc -l`

Если в результате поиска выдано значение 0 (нет никаких файлов), то не производится никаких действий:

if [ $count -eq 0 ];
then
:

В противном случае всё содержимое папки общего доступа Dropbox копируется в другую папку (назначения):
 
else
cp -r $D1/* $D2

В папке источника данные подлежат удалению. Так как папка общего доступа Dropbox может иметь скрытый файл .dropbox, то он из процесса удаления должен быть исключён. То есть, в папке источника найти все данные и удалить их за исключением файла .dropbox:

find $D1/* ! -name '.dropbox' -delete

В папке назначения наоборот – найти и удалить скопированный из папки источника файл .dropbox, так как команда cp -r будет копировать всё, в том числе и скрытые файлы/папки: 

find $D2 -name '.dropbox' -delete

Завершить цикл и открыть папку назначения в файловом менеджере:

fi
xdg-open $D2

Листинг скрипта (например, do.sh) на bash:

#!/bin/bash
D1=/home/user/Dropbox/H-1
D2=/home/user/Work/H-2
count=`find $D1 -type f | wc -l`
if [ $count -eq 0 ];
then
:
else
cp -r $D1/* $D2
find $D1/* ! -name '.dropbox' -delete
find $D2 -name '.dropbox' -delete
fi
xdg-open $D2
exit

Если соответствующая переменной D1 папка является вложенной папкой общей папки Dropbox, то в ней файл .dropbox будет отсутствовать. В таком случае скрипт упрощается:

#!/bin/bash
D1=/home/user/Dropbox/H-1
D2=/home/user/Work/H-2
count=`find $D1 -type f | wc -l`
if [ $count -eq 0 ];
then
:
else
cp -r $D1/* $D2
find $D1/* -delete
fi
xdg-open $D2
exit

Возможно, что вместо переноса данных в другую папку и последующего открытия файлового менеджера Вам необходимо просто информирование на экране, например:


Отображение в Linux Mint 18.3 xfce


Отображение в Linux Mint 19.1 xfce

В этом случае можно использовать скрипт:

#!/bin/bash
DIR=/home/user/Dropbox/H-1
count=`find $DIR -type f | wc -l`
if [ $count -eq 0 ];
then
:
else
zenity --width=200 --height=50 --info --text "\nВ каталоге H-1 имеются данные" 2>/dev/null
fi
exit

Команда zenity вызывает отображение сообщения на экране монитора, которое будет отображаться до тех пор, пока пользователь не нажмёт кнопку OK.

--width=200 --height=50 указывает на ширину и высоту отображаемого окна. В Linux Mint 18.3 в этом не было необходимости, а в Linux Mint 19.1 такие параметры уже пришлось ввести.

Символ \n соответствует команде "перейти на новую строку". Введено для более лучшего визуального восприятия сообщения.



Скрипт 10-минутного сеанса работы Dropbox состоит из двух вышеописанных и команд запуска/остановки Dropbox.

#!/bin/bash
~/scripts/exist.sh
dropbox start -i
sleep 600
~/scripts/do.sh
dropbox stop
sleep 5 && exit

Команда 5 секундной паузы введена для "перестраховки", так как после команды остановки Dropbox необходимо 3-5 секунд для закрытия всех открытых подключений.


Периодический запуск Dropbox в указанный промежуток времени осуществляется через пользовательское задание cron. Запустите в терминале crontab -e и назначьте задание. Для описанной задачи, например:

*/30 19-22 * * * export DISPLAY=:0 && /путь_к_скрипту

четверг, 25 октября 2018 г.

Совместная работа через облака. Пояснение механизма обмена информацией через ресурсы облачного хранения данных

Данная публикация имеет поясняющий характер и ставит своей целью, по возможности, простыми словами и максимально доходчиво (как просят, "для чайников"), объяснить суть и механизм совместной работы с использованием ресурсов облачного хранения данных, таких как Dropbox, pCloud, Диск Яндекс, Облако@Mail.Ru, Google Диск и т.п.

"Облако", если говорить с технической точки зрения, является онлайн-хранилищем, состоящим из большого количества серверов, объединённых в огромную сеть (облачное хранилище данных).

Облачное хранение данных следует понимать как хранение данных в системах, в которых данные распределены по большому числу серверов, объединённых в так называемые кластеры.

Кла́стер (англ. cluster – скопление) – объединение нескольких однородных элементов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами. В сфере информационных технологий под кластером следует понимать группу вычислительных узлов, объединённых высокоскоростными каналами связи, представляющих с точки зрения пользователя единый аппаратный ресурс (подробности).

Так как потребителю не известно на каких именно участках кластеров хранятся его данные, а известна только точка его соединения с массивом кластеров, то такую реализацию назвали "облаком". Cloud – облако (англ.)

Как происходит обмен данными между пользователями через "облако" ?

Каждый пользователь имеет учётную запись в облаке и установленный на компьютере клиент (программа синхронизации данных). Синхронизация – это процесс, при котором хранящиеся в облаке данные и данные, указанные клиенту для сопоставления с облаком, приводятся к идентичному содержанию.


Например, user-1 имеет в облаке 4 папки,


а user-2 имеет в облаке 3 папки


user-1 одну из папок даёт в доступ пользователю user-2 (синего цвета). В терминологии ресурсов облачного хранения данных такое действие называется "приглашение".


user-2 принимает приглашение в папку и у него в облаке становится тоже 4 папки. Полученная от user-1 в доступ папка помечена оранжевым цветом.


В итоге получается конструкция, при которой при любом изменении/добавлении данных в папке синего цвета точно такие же изменения будут произведены в папке оранжевого цвета и наоборот (папки синхронизируются). То есть, содержание этих папок будет идентичным.


Соответственно, эти изменения будут также переданы на компьютеры user-1 и user-2 при очередном сеансе связи их клиентов с облаком.


Получается, что после завершения синхронизации содержание жёлтой папки, владельцем которой является user-1, станет идентичным содержанию бирюзовой папки, владельцем которой является user-2, и наоборот:


Упрощённо говоря, происходит передача данных с компьютера на компьютер. При этом посредником в этом процессе выступает облако.

Синхронизация данных клиента с облаком происходит по защищённому протоколу, который препятствует перехвату данных по сети. В зависимости от конкретной реализации, передаётся либо новый файл на замену старому, либо значение "дельта" (разница значений нового и старого файлов).

Для своего функционирования такая схема не требует завершения всех операций синхронизации в течение сеанса связи с Интернет. В процессе синхронизации клиент постоянно вычисляет содержание папки клиента и соответствующей ей папки облака, а также отслеживает отметку времени, назначенной каждому файлу и каждой папке. На основании этой информации клиент производит запись или удаление данных в той папке клиента или облака, отметка времени которой старше (то есть более ранняя). Если в течение сеанса работы с Интернет процесс синхронизации не был завершён, то при следующем сеансе он будет продолжен. Такой процесс условно можно назвать "докачкой данных". Учитывая указанное, процессу можно сопоставить термин "асинхронная репликация".

Репликация (англ. replication) – механизм синхронизации содержимого нескольких копий объекта (файла, папки). В процессе репликации происходит копирование данных из одного источника на другой (или на множество других) и наоборот. Иными словами, изменения, сделанные в одной копии объекта, распространяются в другие копии.

При синхронной репликации, если данная реплика (копия объекта, обновляемая автоматически при обновлении оригинала) обновляется, все другие реплики того же фрагмента данных также должны быть обновлены в одной и той же транзакции (транза́кция (англ. transaction, от лат. transactio 
– соглашение, договор) – минимальная логически осмысленная операция, которая имеет смысл и может быть совершена только полностью, см. wiki). Можно сказать, что на практике существует лишь одна версия данных.

При асинхронной репликации обновление одной реплики распространяется на другие спустя некоторое время, а не в ходе той же транзакции. Таким образом, при асинхронной репликации вводится задержка (время ожидания), в течение которой отдельные реплики могут быть фактически неидентичными (то есть определение "реплика" оказывается не совсем подходящим, поскольку мы не имеем дело с точными и своевременно созданными копиями). В большинстве случаев асинхронная репликация реализуется посредством чтения журнала транзакций или постоянной очереди тех обновлений, которые подлежат распространению
 (подробности).

В философской концепции развития по спирали, user-1 и user-2 осуществляют обмен данными через общую сетевую папку (Shared folder), как раньше это происходило в локальной сети. Но если в том случае для осуществления информационного обмена user-1 и user-2 должны были быть расположены не далее 80 метров друг от друга (максимальная дальность передачи информации, при которой гарантируется качественная связь без применения специальных усилителей-повторителей), то теперь их географическое местоположение значения не имеет.

четверг, 23 августа 2018 г.

Доступ к общей папке Windows из Linux

Несмотря на кажущуюся простоту доступа к общей папке Windows из Linux некоторые пользователи, особенно начавшие пользоваться Linux, могут столкнуться с проблемой, которая, на первый взгляд, может оказаться неразрешимой. При этом пользователи Windows будут говорить "ничего не знаю – от меня пули вылетают". Чтобы не возникло впечатления о "глючности" Linux попробуем в этом вопросе разобраться.

Рассматривается частный вопрос о работе в домашней сети Linux с общей папкой Windows XP с целью изменения в ней данных, то есть записи и удаления. Содержание публикации не раскрывает работу с более поздними версиями Windows (хотя ситуация с ними может быть похожей), а также работу в доменных сетях, то есть в сетях с централизованным управлением политикой паролей и базой данных пользователей, например, Windows Active Directory.

Итак, на Windows открывается папка общего доступа. Но при обращении пользователя Linux к этой папке через сетевое окружение оказывается, что "достучаться" невозможно даже к узлу.

В самом начале можно столкнуться с проблемой отсутствия доступа даже к рабочей группе.


Это может объясняется небольшой инерционностью при первом обращении по протоколу SMB, который используется для доступа к папкам и файлам Windows из сети. Подождите немного, хотя бы несколько секунд, и повторите попытку. В конечном счёте Вы компьютер "увидите".


При дальнейшем обращении высветится форма запроса полномочий доступа, например:


Пользователь Linux вводит свой пароль и ... снова на экране получает эту же форму запроса. И так может продолжаться до бесконечности.

Причина в том, что как в Linux, так и в Windows, в целях обеспечения безопасности на уровне файловой системы действуют так называемые права на файлы и папки. А в данном случае пользователь Linux пытается обратиться к папке Windows под своим именем и паролем, о котором Windows не имеет никакого представления. Обращаться к ресурсу необходимо с использованием тех данных, о которых "знает" Windows. То есть, используя какие-то имя пользователя и пароль Windows, которые Windows известны.

Так как на русскоязычных Windows имена пользователей могут быть кириллическими, то есть, например, Администратор, Вася, Петя, красотка и т.п., то для целей предоставления доступа к папке попросите администратора компьютера Windows завести пользователя с латинским логином или переименовать существующий логин на латинские буквы. Например, можно создать специального пользователя,


у которого будет постоянный пароль и он будет находиться в группе "Пользователи". Этим можно исключить возможные дальнейшие случаи "системного непонимания" между Linux и Windows.

Права на предоставляемую в доступ папку нуждаются в некоторой корректировке, так как по умолчанию для пользователей назначаются права "только чтение".

Пояснение. Чтобы увидеть полное содержание вкладки "Безопасность" на системе Windows откройте Проводник и в разделе "Сервис – Свойства папки – Вид" снимите галочку в поле "Использовать простой общий доступ к файлам".






Не нужно выставлять "Полный доступ" ни на вкладке "Доступ – Разрешения", ни на вкладке "Безопасность", хотя очень многие поступают именно так. Полный доступ подразумевает разрешение на смену как разрешений на объект, так и его владельца. И если в какой-то мере это может быть допустимо в рамках домашней сети из 2-3 компьютеров, то в других случаях лучше так не делать.

Лучше поставить галочку в поле "Изменение" (Все – это активные, то есть не отключенные, учётные записи пользователей на компьютере Windows).


Далее необходимо перейти к вкладке "Безопасность" и для пользователей компьютера Windows поставить галочку в поле "Запись".



Но и это ещё не всё. Нужно нажать на кнопку "Дополнительно" и для строки с внесённым изменением (столбец "Разрешение – Запись") добавить галочки в полях "Обзор папок", "Содержание папки", "Удаление подпапок и файлов", "Удаление".




При этом установить галочку в поле "Применять эти разрешения к объектам и контейнерам только внутри этого контейнера" (см. рисунок выше).

Ого, сколько всего. Прямо страсти какие-то мексиканские. И всё это надо сделать на Windows.


Теперь вернёмся к вопросу обращения к папке из Linux. Вводим правильные значения. Вместо


укажем имя пользователя в формате компьютер\пользователь. Так как компьютер, к которому осуществляется обращение называется H-38, а функционирующий в моей маленькой сети сервер DHCP назначает имя домена vot, то ввожу необходимые данные и, наконец-то, получаю перечень общих ресурсов компьютера H-38.



Как видно из рисунка, клиент Samba отобразил не только папку Data, но и скрытые ресурсы ADMIN и C, используемые системой Windows для целей администрирования (скрытые ресурсы Windows отображаются значком $ после имени ресурса).

Однако при попытке обращения к папке Data система снова выдаёт запроc на введение учётных данных. При этом по умолчанию предлагается подключиться анонимно.


Вспомните, что общий доступ был предоставлен для пользователей Windows. Поэтому необходимо вводить имя и пароль конкретного пользователя.

Если пароль пользователя Windows никогда меняться не будет (а в самом начале рекомендовалось создать на Windows пользователя с неизменяемым паролем), то можно выбирать "Запомнить навсегда" и тогда пароль при обращении к папке общего доступа в дальнейшем запрашиваться не будет. Это же справедливо и для обращения к компьютеру. В приводимых примерах пароль не сохраняется.


Теперь попробуйте в общую папку Data записать какой-нибудь файл и какую-нибудь папку. Должно получиться.



При удалении данных из общей папки (как отдельных файлов, так и папок вместе с их содержимым) у Вас будет показываться предупреждение о том, что удаляемые объекты восстановлению в дальнейшем не подлежат.



Если имеется необходимость помещения удаляемых по сети объектов в Корзину, то на Windows необходимо устанавливать специальное ПО, которое, как правило, всегда коммерческое. Наилучшим решением в этой области, по моему мнению, является Executive Software Undelete.

Если Вы дочитали до конца, то, надеюсь, убедились в том, что изначально со стороны Windows оказывается пули не совсем вылетают. И кто в таком случае более "глючный"?

Увы, но виноваты в данном случае не Linux или Windows, а их пользователи. Один не до конца настроил предоставление доступа на своей системе, а второй неправильно обращается к предоставленному в доступ ресурсу.

Выходит, что для пользования компьютером в настоящее время мало уметь только нажимать на клавиши и водить по экрану мышкой. Необходима и некоторая степень понимания смысла предпринимаемых действий.


воскресенье, 17 декабря 2017 г.

Google Диск. Практическая реализация синхронизации и совместной работы в Windows с папками Google Диска на ПК

Рассмотрение данного вопроса связано с выбором наиболее удачной модели совместной работы с синхронизируемыми на ПК папками с точки зрения удобства настройки и потребления системных ресурсов.

Для Google Диск всемирно известная корпорация добра выпускает десктопные клиенты синхронизации только для Windows, Mac, Android и IOS. И так как выпуск десктопного клиента для Linux Google в течение длительного времени упорно игнорирует, то данное облако долгое время оставалось вне области моих интересов.

Так с некоторых пор называют компанию Google Inc, ту самую корпорацию, которая известна по своим знаменитым продуктам – поисковику, почтовому сервису, облачному сервису, картам и многому прочему.
Назвали ее так в противовес "Корпорации зла", Microsoft Corporation, которая навязчиво предлагает лишь свои стандарты и решения. Гугл же потихоньку отбирает рынок у монополиста.
(источник: Большой вопрос.ru)


После произведённого ребрендинга десктопное приложение для персонального использования стало называться "Автозагрузка и синхронизация", а для бизнеса – "Клиент Google Диска". Предметом данной публикации является рассмотрение работы с приложением "Автозагрузка и синхронизация".

Скачанный для установки клиент представляет собой небольшой исполняемый файл installbackupandsync.exe, который впоследствии скачает и установит приложение синхронизации.

Настройка клиента

После своей установки приложение будет автоматически запущено и Вам будет предложено его настроить, т.е. произвести авторизацию в службе и указать объекты для синхронизации.





Вы можете оставить настройки как есть или произвести выборочную настройку. Нажмите ссылку "Изменить" и укажите свои предпочтения.



В расширенных настройках Вы можете исключить синхронизацию некоторых типов файлов по их расширению, например, tmp и bak.

Слева от ссылки "Изменить" имеется кнопка выбора папки для синхронизации с Диском, которая будет расположена за пределами пространства папки Google Диск. Например, я желаю синхронизировать с Google Диском папку Exchange, расположенную в C:\Data



Папка Google Диск расположена в папке профиля пользователя системы.


Google считает, что все имевшиеся на Диске папки (Мой Диск) до установки клиента будут синхронизироваться именно с этой папкой профиля пользователя. А все дополнительные объекты, которые будут указаны для синхронизации, расположены в папке Диска "Компьютеры".


Далее Вам стоит проявить внимательность. Впрочем, если Вы даже и ошибётесь, то это не страшно, так как в последующем настройку объектов для синхронизации Вы всегда можете поменять.




Обратите внимание на предыдущий рисунок. После кнопки OK Вы видите ссылку "Изменить", нажав на которую Вы получите возможность указать не путь, предлагаемый по умолчанию  (C:\Users\папка_профиля_пользователя\Google Диск), а выбранную папку, расположение которой м.б. на другом логическом разделе (диск D, диск E и т.п.) Ниже можно настроить синхронизацию не всех папок облака Google Диск, а только некоторых.


То, что будет указано (см. рисунок выше) будет скачиваться в папку Google Диск папки профиля пользователя системы.

В системном трее (на подставке рабочего стола) работа клиента отображается значком, кликнув по которому можно поинтересоваться его настройками. Кроме того, клик по значку отобразит процесс синхронизации в подробностях. То есть какие файлы синхронизируются и сколько файлов осталось. Для больших объектов процесс синхронизации будет отображаться в процентах выполнения.


Если никакие папки для синхронизации указаны не были, то клиент в папку Google Диск загрузит те файлы, которые находятся отдельно, то есть не в папках, а в корне Диска. На рисунке ниже, например, в корне Диска располагается файл GK.jpg


В спокойном состоянии (отсутствие синхронизации), что отображается значком с направленной вверх стрелочкой синего цвета (см. предыдущий рисунок), клиент потребляет неожиданно много по сравнению с другими клиентами синхронизации с облаком. Эта величина может варьироваться, но в незначительных пределах. Возможно, это обусловлено тем, что имеется 3 процесса. С точки зрения практического применения клиента какой процесс за что отвечает значения не имеет. Просто берём на заметку.



Для сранения, запущенный клиент Диска.Яндекс, судя по диспетчеру задач, в состоянии покоя ведёт себя скромнее (15-19 КБ):


Справедливости ради необходимо отметить, что когда Google совсем "успокоится", то есть в течение некоторого времени будет находиться в состоянии отсутствия активных передач, то и его потребление ресурсов становится вполне приемлемым.


Продолжим дальнейшую настройку клиента. Так как, по умолчанию, клиент прописывается в автозагрузку, то, исходя из своих соображений, предпринимаю усилия по обеспечению более "мягкого" старта системы.

В одной из предыдущих публикаций для этой предлагалось использовать программу Startup Delayer. Если в настройках данного ПО обратиться к свойствам объекта GoogleDriveSync, то можно увидеть, что его запуск осуществляется с ключом /autostart.



Попробуем убрать этот ключ, указать задержку запуска и перезагрузить систему.




Можно убедиться в правильности предпринятых для достижения этой цели шагов, контролируя по времени процесс запуска приложения.



 Примечание.  После 2-й или 3-й перезагрузки Вы можете наблюдать, что задержка не сработает. Обратившись в Startup Delayer к списку автозагружаемых приложений Вы можете с удивлением обнаружить, что у Вас имеется 2 записи GoogleDriveSync: настроенная на задержку и запускаемая при старте системы с нулевой задержкой, т.е. восстановленная. Это связано с тем, что такая запись автостарта с ключом /autostart присутствует в реестре. Удалите в Startup Delayer "восстановленную" запись. Изменение будет записано в реестр и больше такой ситуации повторяться не будет.

На рисунке выше видно, что вместо вертикальной стрелки вверх на значке происходит анимация, что свидетельствует о  синхронизации ПК с облаком.

Если подвести к значку курсор, то будет отображена всплывающая подсказка:


Если синхронизируемые данные представляют из себя файлы сравнительно небольшого размера, то синхронизация производится быстро, о чём можно судить путём периодического нажатия на значок приложения.



Также в эти моменты будет показаны синхронизируемые в данный момент времени файлы.


Как видно на рисунке выше, синхронизация происходит в несколько потокоа, то есть одновременно обрабатываются 5 файлов. При этом число "готовых" файлов, помеченных зелёным, будет варьироваться в пределах 1-2, а число скачиваемых (загружаемых), помеченных синим анимационным кружочком, 3-4 Диспетчер задач покажет Вам, что число процессов googledrivesync.exe по сравнению с состоянием покоя также выросло.


Признаком завершения синхронизации данных является изменение состояния значка.


Совместная работа с папками общего доступа

Чтобы предоставить папку в совместное использование необходимо авторизоваться в Google Диске через браузер, выбрать папку, назначить её в совместный доступ, указать пользователя Google и определить для него необходимые права.

Выделите папку и нажмите правую кнопку мыши. В выпадающем меню кликните на "Совместный доступ".


Укажите пользователя и назначьте необходимые права. Выбор, правда, небольшой, поэтому долго думать Вам не придётся.


Другому пользователю на почту поступит соответствующее уведомление и после выполнения им необходимых действий предоставленная ему в доступ папка будет отображаться в его пространстве Google Диска. Но это ещё не означает, что он её автоматически увидит в своих синхронизируемых данных. На начальном этапе эта папка отображается в разделе "Доступные мне" (смотреть через браузер).


Чтобы включить её в состав своих синхронизируемых клиентом данных необходимо (опять же в браузере) через правый клик мыши скомандовать "Добавить на Мой Диск" или попробовать перетащить а "Мой Диск" мышкой (может зависеть от браузера) и впоследствии даже в "Мое устройство ПК".






Если теперь обратиться к настройкам клиента, то можно убедиться в том, что данная папка доступна для синхронизации на ПК в папке Google Диск.

Щёлкните по значку клиента и далее на 4 вертикальных точки. Дальше всё будет понятно интуитивно.





Эта папка (JoinedEx) будет находиться в папке Google Диск Вашего ПК и помечена как папка с совместным доступом (в рассматриваемом примере на Windows 7 – синий силуэт):


Увы, но в первом эксперименте в папку облака "Мое устройство ПК" переместить её не представилось возможным, хотя в дальнейшем в браузерах Chrome (Chromium) этот шаг осуществить получилось.


Вам необходимо будет иметь в виду, что на системном диске Windows (как правило, это C, но могут быть и варианты) необходимо иметь достаточно свободного дискового пространства для нормальной работы с Google Диском. Но если Вы внимательно читали описанное выше, то в самом начале настройки клиента имеется возможность указания другого расположения папки Google Диск на ПК. Однако эта настройка осуществляется только на начальном этапе. Если вы пожелаете всё переделать, то после деинсталляции клиента Вам придётся удалить сопутствующие ему скрытые папки и хорошо вычистить реестр.

При работе с папкой совместного доступа с правом "Перемещение и изменение" избегайте желания её переименовать, как это Вы могли делать в Диск.Яндекс или Dropbox. Как только Вы её переименуете, то изменения будут реплицированы на пространство папок Вашего респондента или всех респондентов, работающих с этой папкой. На примере ниже на своём ПК переименовываю JoinedEx в JoinedR2. Это изменение приводит к переименованию папки JoinedEx на Google Диске того, кто предоставил эту папку мне в доступ.



При этом душевный настрой работающих с данной папкой может претерпевать серьёзные изменения, переходя из состояния "я слегка сердит(а)" в состояние "я в ярости".

Для проверки совместной работы в папку JoinedEx были помещены несколько файлов:


После завершения процесса синхронизации эти же файлы отображались на Google Диске другого аккаунта:


После всех синхронизаций диспетчер задач отображал мне сначала 5, а потом 4 процесса с различающимися расходами ресурсов. Лично для меня такое непостоянство так и осталось "тайной мадридского двора".



Возвращаясь к настройкам, перейдём к последнему пункту вертикального меню слева. Как видно из рисунков ниже, здесь никаких комментариев не требуется.




Можно отметить, что назначение папок для синхронизации можно произвести через правое контекстное меню Проводника. Например, добавим папку Books fb2.




К тем папкам, которые уже синхронизируются клиентом, также применимы операции при помощи правого контекстного меню мыши:




В качестве своего ряда заключения.

Описанное выше было выполнено на виртуальной машине. На реальном ПК показатели отдельных процессов googledrivesync.exe достигали значений в 280-320 КБ. Такое потребление ресурсов наблюдалось в случае большого числа (более 9 тысяч) файлов в очереди на обработку.

Синхронизирующиеся и синхронизированные папки в Проводнике были помечены синими и зелёными эмблемами соответственно: