http://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&feed=atom&action=historyLXF171:Unison: Доступ к своим файлам - История изменений2024-03-28T23:02:08ZИстория изменений этой страницы в викиMediaWiki 1.19.20+dfsg-0+deb7u3http://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&diff=19977&oldid=prevOlkol в 11:32, 18 ноября 20182018-11-18T11:32:24Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 11:32, 18 ноября 2018</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 154:</td>
<td colspan="2" class="diff-lineno">Строка 154:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Теперь мы умеем синхронизировать данные и отправлять оповещения. Давайте удобства ради объединим все эти действия в одном скрипте.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Теперь мы умеем синхронизировать данные и отправлять оповещения. Давайте удобства ради объединим все эти действия в одном скрипте.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>#!/bin/bash</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline"> </ins>#!/bin/bash</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>/bin/ping -c 1 www.google.com 2>&1 >/dev/null</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>/bin/ping -c 1 www.google.com 2>&1 >/dev/null</div></td></tr>
</table>Olkolhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&diff=19976&oldid=prevOlkol: /* Синхронизируем наши данные */2018-11-18T11:30:53Z<p><span dir="auto"><span class="autocomment">Синхронизируем наши данные</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 11:30, 18 ноября 2018</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 110:</td>
<td colspan="2" class="diff-lineno">Строка 110:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>unison -ui text lxfsync</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>unison -ui text lxfsync</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>{{Врезка|right|Заголовок= |Ширина=<del class="diffchange diffchange-inline">10</del>%|Содержание=Ярлык для Unity Launcher</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>{{Врезка|right|Заголовок= |Ширина=<ins class="diffchange diffchange-inline">30</ins>%|Содержание=Ярлык для Unity Launcher</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Иногда вам захочется запустить процесс синхронизации вручную, а не ждать, пока это сделает cron. Например, вы просидели над документом весь рабочий день, но потом хотите еще поработать с ним из дома. Прямо перед выключением системы можно запустить скрипт синхронизации и выполнить принудительное обновление, и дома вы сможете начать прямо с обновленного документа.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Иногда вам захочется запустить процесс синхронизации вручную, а не ждать, пока это сделает cron. Например, вы просидели над документом весь рабочий день, но потом хотите еще поработать с ним из дома. Прямо перед выключением системы можно запустить скрипт синхронизации и выполнить принудительное обновление, и дома вы сможете начать прямо с обновленного документа.</div></td></tr>
</table>Olkolhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&diff=19975&oldid=prevOlkol: /* Альтернативные решения */2018-11-18T11:30:19Z<p><span dir="auto"><span class="autocomment">Альтернативные решения</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 11:30, 18 ноября 2018</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 17:</td>
<td colspan="2" class="diff-lineno">Строка 17:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Учитывая простоту и возможности решений для командной строки, предоставляемые rsync, эта утилита приходит на ум первой. Однако проблема rsync в том, что она не приспособлена для двусторонней синхронизации. У нее есть несколько полезных опций, позволяющих довольно близко подобраться к двусторонней синхронизации, но достичь таковой полностью нельзя. Хорошая иллюстрация — отсутствие эффективного способа реакции на удаление файлов. Существуют способы это обойти, которые включают сохранение вывода в лог-файлы, сравнение и удаление, но это излишне усложняет дело.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Учитывая простоту и возможности решений для командной строки, предоставляемые rsync, эта утилита приходит на ум первой. Однако проблема rsync в том, что она не приспособлена для двусторонней синхронизации. У нее есть несколько полезных опций, позволяющих довольно близко подобраться к двусторонней синхронизации, но достичь таковой полностью нельзя. Хорошая иллюстрация — отсутствие эффективного способа реакции на удаление файлов. Существуют способы это обойти, которые включают сохранение вывода в лог-файлы, сравнение и удаление, но это излишне усложняет дело.</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>{{Врезка|right|Заголовок=Генерация пары ключей |Ширина=<del class="diffchange diffchange-inline">10</del>%|Содержание=Важно понимать, что подключение по SSH без пароля несет в себе элемент риска. Если доверенный компьютер будет скомпрометирован, злоумышленник сможет получить прямой доступ к серверу. Чтобы управлять этим риском, лучше всего создать учетную запись на сервере специально для синхронизации Unison, у которого будет очень ограниченный доступ к другим сервисам.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>{{Врезка|right|Заголовок=Генерация пары ключей |Ширина=<ins class="diffchange diffchange-inline">30</ins>%|Содержание=Важно понимать, что подключение по SSH без пароля несет в себе элемент риска. Если доверенный компьютер будет скомпрометирован, злоумышленник сможет получить прямой доступ к серверу. Чтобы управлять этим риском, лучше всего создать учетную запись на сервере специально для синхронизации Unison, у которого будет очень ограниченный доступ к другим сервисам.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Для генерации пары ключей запустите ssh-keygen, и на экране появятся несколько сообщений, требующих ввода данных.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Для генерации пары ключей запустите ssh-keygen, и на экране появятся несколько сообщений, требующих ввода данных.</div></td></tr>
</table>Olkolhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&diff=19974&oldid=prevOlkol: /* Unison: Доступ к своим файлам */2018-11-18T11:29:45Z<p><span dir="auto"><span class="autocomment">Unison: Доступ к своим файлам</span></span></p>
<a href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&diff=19974&oldid=19973">Внесённые изменения</a>Olkolhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF171:Unison:_%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF_%D0%BA_%D1%81%D0%B2%D0%BE%D0%B8%D0%BC_%D1%84%D0%B0%D0%B9%C2%AD%D0%BB%D0%B0%D0%BC&diff=19973&oldid=prevOlkol: Новая страница: «Категория: Учебники == Unison: Доступ к своим файлам == [[Файл: |left | thumb|100px|'''Наш эксперт''' Дж…»2018-11-18T10:15:55Z<p>Новая страница: «<a href="/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%B8%D0%BA%D0%B8" title="Категория:Учебники">Категория: Учебники</a> == Unison: Доступ к своим файлам == [[Файл: |left | thumb|100px|'''Наш эксперт''' Дж…»</p>
<p><b>Новая страница</b></p><div>[[Категория: Учебники]]<br />
== Unison: Доступ к своим файлам ==<br />
[[Файл: |left | thumb|100px|'''Наш эксперт''' Джеймс Литтон занимал руководящие должности в нескольких организациях и является партнером и директором Identity Automation LP.]] <br />
Хотите разделять свои данные между разными системами без проблем с приватностью и собственностью на них? Джеймс Литтон показывает, как.<br />
<br />
При мыслях о своих данных у многих из нас возникает внутренняя борьба: мы подыскиваем наилучший способ гарантировать их сохранность. В прежние времена все данные умещались на нескольких дискетах; потом мы перешли к лентам, CD, DVD, NAS и, наконец, к облачным хранилищам.<br />
<br />
Рассмотрев типичную стратегию управления данными, мы обнаружим, что зачастую она фрагментарна и неэффективна. Ваши повседневные файлы, возможно, хранятся на Dropbox, что позволяет легко разделять их между разными компьютерами, которыми вы регулярно пользуетесь. Этот вариант прекрасно подходит для электронных таблиц, баз данных и документов — все вместе это довольно скромный объем данных. Но когда доходит до фотографий, музыки и фильмов, начинаются проблемы. Для файлов мультимедиа нужно гораздо больше места, и они часто оказываются на домашнем сервере NAS, и, возможно, время от времени копируются на внешний USB-диск.<br />
<br />
Предположим, что общий объем ваших данных — 500 ГБ, и вы хотите собрать их все в одном месте. Такое позволяет сделать Dropbox — за $ 499 в год, и это, честно говоря, довольно разумная цена, но многим из нас не нравится то, что их данные будут находиться на серверах Amazon S3 и выйдут из-под контроля. Данные можно зашифровать, но с их конфиденциальностью и собственностью на них не все так просто. Чтобы избавиться от этих недостатков, исследуем варианты построения собственной системы.<br />
<br />
Альтернативные решения<br />
<br />
На первый взгляд, существуют относительно простые для реализации решения, такие как OwnCloud и Sparkleshare. Оба выглядят простейшим способом создать полноценную замену Dropbox, но если подумать о задачах этого проекта, то нам вовсе не нужно реализовывать всю функциональность Dropbox. Другими словами, нам не нужны ни web-интерфейс, ни возможность делиться файлами с другими, а нужна только возможность выборочно разделять файлы между компьютерами. То есть лучше бы взять что-нибудь полегче Sparkleshare или OwnCloud.<br />
<br />
Учитывая простоту и возможности решений для командной строки, предоставляемые rsync, эта утилита приходит на ум первой. Однако проблема rsync в том, что она не приспособлена для двусторонней синхронизации. У нее есть несколько полезных опций, позволяющих довольно близко подобраться к двусторонней синхронизации, но достичь таковой полностью нельзя. Хорошая иллюстрация — отсутствие эффективного способа реакции на удаление файлов. Существуют способы это обойти, которые включают сохранение вывода в лог-файлы, сравнение и удаление, но это излишне усложняет дело.<br />
<br />
Если необходим простой сервер для резервного копирования данных, находящихся на одном компьютере, rsync прекрасно подойдет, но нам нужно нечто более интеллектуальное, поэтому мы обратимся к Unison. Unison — утилита синхронизации файлов, работающая в Linux, BSD, OS X и Windows. Она позволяет синхронизировать набор файлов и каталогов, которые хранятся в разных местах, путем распространения изменений между наборами.<br />
<br />
Прежде чем рассуждать о стратегии, важно понять, как именно работает Unison. На самом базовом уровне Unison поддерживает пары реплик синхронизированными. Уловили слово «пары»? При каждом запуске Unison он синхронизирует две реплики, и ничего больше. Если реплик больше двух, потребуется хорошо продуманная схема, которая гарантирует, что данные синхронизируются именно так, как мы воображаем.<br />
<br />
Реплики<br />
<br />
Теперь уместно спросить: «А что такое реплика?» По-простому, реплика — это набор файлов и каталогов. Реплики могут соответствовать разным хостам, но это не обязательно. Чтобы лучше понять идею, представьте, что у вас есть компьютер дома и компьютер в офисе, и вы хотите, чтобы домашний каталог автоматически синхронизировался между этими компьютерами. Пусть у вас также есть внешние USB-диски для резервных копий дома и в офисе. В этот сценарий вовлечено всего два компьютера, но реплик Unison четыре.<br />
<br />
Задумавшись о том, какую структуру синхронизации выбрать, вы получите различные «топологии», которые похожи на известные сетевые топологии — линия, звезда, сетка, кольцо и другие. Описанный выше сценарий соответствует линейной модели, но лучший способ организации нашей системы — с помощью хаба и модели «звезда». В такой конфигурации в центре находится сервер, и на каждом из компьютеров имеется один профиль Unison, который синхронизирует данные с сервером; эту схему мы и реализуем на нашем уроке.<br />
<br />
Для нашего тестового случая рассмотрим ситуацию, при которой на регулярной основе используются четыре компьютера: офисный настольный компьютер, домашний настольный компьютер, домашний ноутбук и ноутбук для поездок. Мы заменим Dropbox на всех этих четырех компьютерах. На двух компьютерах установлена Mac OS X, на двух других — Linux.<br />
<br />
При работе с Unison важно обеспечить, чтобы на всех системах, участвующих в синхронизации, была установлена одна и та же версия программы. Воспользуемся версией 2.40, это последний стабильный релиз.<br />
<br />
На платформе Mac загрузите графическую оболочку версии 2.40.69 с сайта http://alan.petitepomme.net/unison/index.html. Смонтируйте dmg и скопируйте Unison в каталог приложений. Теперь откройте Unison, и программа попросит вас установить версию утилиты для командной строки — скажите «да». Утилита установится в /usr/bin/. Для проверки выполните команду<br />
<br />
unison -version<br />
<br />
Unison должен вывести номер версии — 2.40.69. В Ubuntu 12.04 Unison можно установить из репозиториев Ubuntu, скомандовав<br />
<br />
sudo apt-get install unison<br />
<br />
Проверить установку можно командой<br />
<br />
unison -version<br />
<br />
Программа должна вывести номер версии — 2.40.65. Теперь можно создать профиль Unison. Профиль определяет, как Unison будет синхронизировать две реплики. Создадим файл профиля под названием lxfsync.prf в нашем системном каталоге Unison:<br />
<br />
root = /home/lxf/Unison<br />
<br />
root = ssh://lxf@example.com//home/lxf/Unison<br />
<br />
fastcheck = true<br />
<br />
batch = true<br />
<br />
force = newer<br />
<br />
times = true<br />
<br />
sshargs = -C<br />
<br />
Строки 1 и 2 задают местоположение реплик. Строка 3 велит Unison применять время изменения и размер файла как «псевдономер узла» при сканировании реплик на наличие изменений, вместо считывания содержимого каждого файла целиком. Строка 4 отключает интерфейс пользователя. Строка 5 велит Unison брать файл с последним временем изменения. Строка 6 означает, что будет сохраняться время изменения файлов; и, наконец, в строке 7 включается сжатие SSH для увеличения производительности. Замечание об опции times: увы, она не поддерживает каталоги. При копировании каталога время его создания будет соответствовать созданию каталога копии, а не исходного каталога.<br />
<br />
Теперь мы готовы к первичной синхронизации. Для начала выберите один из компьютеров, создайте копию каталога Dropbox и назовите ее Unison.<br />
<br />
cp -r ~/Dropbox ~/Unison<br />
<br />
Затем мы подключимся к нашему серверу Unison через SSH и создадим соответствующий каталог, в который будут синхронизироваться наши четыре компьютера.<br />
<br />
mkdir ~/Unison<br />
<br />
Синхронизируем наши данные<br />
<br />
Теперь нужно переместить копию данных с ноутбука на сервер. Чтобы убедиться в шифровании данных при передаче между компьютерами, взгляните на параметры: с их помощью мы указали, что для подключения к удаленной реплике нужно пользоваться SSH. Синхронизация запускается следующей командой:<br />
<br />
unison -ui text lxfsync<br />
<br />
Первые два параметра велят Unison запускаться в текстовом режиме. Третий параметр — имя профиля, который мы хотим использовать.<br />
<br />
По окончании синхронизации Unison должен сообщить количество переданных элементов. Если некоторые элементы были пропущены или возникли ошибки, подробную информацию о транзакции можно получить, заглянув в файл журнала — ~/unison.log.При запуске Unison вы видели, что вас просят ввести пароль учетной записи на сервере. А так как мы собираемся автоматизировать этот процесс, аутентификация должна проходить без вашего вмешательства.<br />
<br />
Чтобы достичь этой цели, воспользуемся аутентификацией SSH по ключу. Для этого на каждом компьютере, синхронизируемом с сервером, нужно сгенерировать уникальный ключ. Чтобы сделать это на ноутбуке, выполните следующую команду:<br />
<br />
ssh-keygen -t rsa<br />
<br />
После этого в каталоге ~/.ssh должно появиться два файла: id_rsa и id_rsa.pub. Файл id_rsa.pub — наш публичный ключ, и его нужно скопировать на сервер, чтобы демон SSH мог доверять этому ключу. Переместим файл командой scp:<br />
<br />
scp ~/.ssh/id_rsa.pub lxf@example.com:~/.ssh/Computer1.pub<br />
<br />
Теперь нужно предупредить демон SSH на сервере, чтобы он доверял этому ключу. Для этого подключимся к серверу по SSH и скомандуем:<br />
<br />
cat ~/.ssh/Computer1.pub >> authorized_keys<br />
<br />
Чтобы проверить нашу работу, снова запустим команду Unison с ноутбука. Если все в порядке, на сей раз у нас не спросят пароль:<br />
<br />
unison -ui text lxfsync<br />
<br />
Хотя это и не обязательно, многим нравится, что агент Dropbox информирует их о происшедших изменениях; перенесем эту возможность на четыре наших компьютера, синхронизируемые с сервером. Так как синхронизация производится с помощью скриптов оболочки, нужно установить утилиты, которые позволят обратиться к системе оповещений рабочего стола. На платформе Mac можно воспользоваться Growl посредством growelnotify. На компьютерах Ubuntu воспользуемся NotifyOSD с помощью notify-send.<br />
<br />
На платформе Mac загрузите Growl 1.2.2 с growl.info. После загрузки смонтируйте dmg и установите Growl, дважды щелкнув на скрипте Growl.pkg. Откройте каталог Extras, затем growlnotify, и установите growlnotify, запустив скрипт growlnotify.pkg. Теперь можно отправлять оповещения Growl с командной строки. Чтобы это проверить, откройте терминал и выполните команду<br />
<br />
growlnotify --message “Hello World”<br />
<br />
В Ubuntu для передачи сообщений демону оповещений рабочего стола нужно установить библиотеку libnotify. Установить ее можно из репозиториев Ubuntu, командой<br />
<br />
sudo apt-get install libnotify-bin<br />
<br />
Чтобы ее проверить, попробуйте выполнить следующую команду:<br />
<br />
notify-send “Hello World”<br />
<br />
Если все хорошо, ваши сообщения появятся на соответствующих рабочих столах.<br />
<br />
Объединяем все вместе<br />
<br />
Теперь мы умеем синхронизировать данные и отправлять оповещения. Давайте удобства ради объединим все эти действия в одном скрипте.<br />
<br />
#!/bin/bash<br />
<br />
/bin/ping -c 1 www.google.com 2>&1 >/dev/null<br />
<br />
if [“$?” == 0 ]; then<br />
<br />
root=”/home/lxf”<br />
<br />
image=”$root/.unison/sync.png”<br />
<br />
stat=`/usr/bin/unison -ui text -logfile “$root/unison.log” lxfsync 2>&1 >/dev/null | tail -1`<br />
<br />
if [${PIPESTATUS[0]} != 0 ]; then<br />
<br />
notify-send “Unison” “Sync Error” -i “$image” -t 0<br />
<br />
exit 1<br />
<br />
fi<br />
<br />
if [ ${stst:0:7} == “Nothing” ]; then<br />
<br />
exit 0<br />
<br />
else<br />
<br />
stat2=`echo “$stat” | grep -Po ‘(?<=\().*?(?=\))’`<br />
<br />
fi<br />
<br />
notify-send “Unison” “$stat2” -i “$image”<br />
<br />
else<br />
<br />
exit 1<br />
<br />
fi<br />
<br />
Как видите, наш скрипт очень прост. В строке 1 задается тип скрипта (Bash). В строке 2 проверяется подключение к Интернету. В строке 3 анализируется результат проверки, и если подключения нет, мы переходим к строке 18, в которой скрипт завершается с кодом ошибки, означающим, что синхронизация завершилась неудачно.<br />
<br />
В том случае, если подключение доступно, в строках 4 и 5 задаются несколько переменных, после чего мы переходим к строке 6. В данной строке мы запускаем Unison, получаем последнюю строку вывода и сохраняем ее в переменной $stat, которой воспользуемся позже. В строке 7 мы проверяем, вернул ли Unison код 0, означающий успешную синхронизацию. Если мы получили другой код ошибки, то в строке 8 мы отправляем оповещение рабочего стола об ошибке синхронизации.<br />
<br />
При успешном завершении синхронизации в строке 11 мы анализируем переменную $stat, чтобы понять, выполнил ли Unison какие-либо действия. Если первое слово в переменной — “Nothing [Ничего]”, то мы выходим из скрипта, потому что обновлений не было; в противном случае переходим к строке 14, где получаем строку в круглых скобках и сохраняем ее в переменной $stat2, после чего переходим в строку 16 и отображаем результаты пользователю.<br />
<br />
Чтобы все работало без нашего участия, скрипт должен запускаться регулярно и синхронизироваться с сервером. С этой задачей прекрасно справится cron. Давайте сделаем интервал синхронизации в пять минут следующей командой:<br />
<br />
crontab -e<br />
<br />
Теперь добавим следующее:<br />
<br />
*/5 * * * * DISPLAY=:0 /home/lxf/sync.sh<br />
<br />
*/5 велит cron запускаться каждые пять минут. Следующие четыре звездочки велят cron запускаться каждые пять минут каждого часа каждого дня каждого месяца. DISPLAY=:0 направляет вывод скрипта на текущий монитор.<br />
<br />
Вот и все! Теперь вы обзавелись бесплатной заменой Dropbox, которая находится под вашим контролем. Некоторые из вас, несомненно, поинтересуются: а как же лучше всего делиться файлами с членами семьи и друзьями? Здесь лучше Dropbox вам не найти. Продолжайте пользоваться бесплатной учетной записью и делиться файлами по мере необходимости, не беспокоясь об остальных данных. |</div>Olkol