# Синхронизация на лаптоп с настолна машина и обратно

*2006-04-27*

> Синхронизиране на файлове и директории между лаптоп и настолен компютър под GNU/Linux с rsync, SSH и кратък Bash скрипт.

В тази статия ще покажа как с помощта на GNU/Linux и [rsync](https://rsync.samba.org/) да синхронизирате файлове и директории между настолния си компютър и лаптопа си.

## 1. Защо да синхронизираме файловете си?

Когато съм в университета, работя на лаптопа си: създавам нови файлове, редактирам съществуващи или добавям нова информация. Когато се прибера вкъщи, искам тези промени да се прехвърлят и на настолния ми компютър. Тук на помощ идва `rsync`, който ми помага да поддържам актуални копия на данните си и да намаля вероятността да работя с по-стара версия на някой файл.

Ако тази идея ви звучи непознато, можете да сравните `rsync` с функцията My Briefcase („Куфарче“) в Windows. `rsync` обаче предлага повече възможности и по-голяма гъвкавост.

## 2. Инсталиране на rsync

Повечето GNU/Linux дистрибуции предлагат готов пакет за `rsync`. Потърсете го в пакетния мениджър на вашата дистрибуция и го инсталирайте и на двата компютъра.

При [Gentoo](https://www.gentoo.org/) `rsync` обикновено вече е инсталиран, тъй като Portage го използва за синхронизация на хранилището.

При [Debian GNU/Linux](https://www.debian.org/) или Ubuntu изпълнете следната команда като root:

```sh
apt-get install rsync
```

## 3. Настройване на синхронизацията

Направете следните настройки на компютъра, от който ще изпращате файловете.

### 3.1. Създаване на директорията sync

Създайте директория с име `sync` в домашната си директория и влезте в нея:

```sh
cd
mkdir sync
cd sync
```

### 3.2. Избор на директории за синхронизация

С командата `ln` създайте символни връзки към директориите, които искате да синхронизирате. В примера потребителят е `paskov`; заменете пътищата с подходящите за вашата система:

```sh
ln -sf /home/paskov/documents/ ./documents
ln -sf /home/paskov/university/ ./university
ln -sf /home/paskov/gsm/ ./gsm
ln -sf /home/paskov/images/ ./images
ln -sf /home/paskov/projects/ ./projects
ln -sf /home/paskov/Mail/ ./Mail
```

### 3.3. Създаване и изпълнение на скрипта

Копирайте следния скрипт и задайте стойности на променливите `SYNC_USER` и `RHOST`. `SYNC_USER` е потребителското име, използвано и на двата компютъра, а `RHOST` е името или IP адресът на получаващата машина. Примерът предполага SSH достъп до получаващата машина и домашни директории в `/home`.

```bash
#!/bin/bash
# Author: Vladimir Paskov

SYNC_USER="paskov"
RHOST="mobile"
OPTIONS="-arLvu"

rsync "$OPTIONS" "/home/$SYNC_USER/sync/" \
    "$SYNC_USER@$RHOST:/home/$SYNC_USER/"
```

Променливата `OPTIONS` съдържа кратките опции за `rsync`, обединени в един аргумент. Опцията `-L` копира съдържанието, към което сочат символните връзки, вместо самите връзки. Опцията `-u` пропуска файловете, които са по-нови на получаващата машина. За повече информация изпълнете `man rsync`.

Запазете скрипта например като `sync-files.sh` и го направете изпълним:

```sh
chmod +x sync-files.sh
```

След това го стартирайте:

```sh
./sync-files.sh
```

Ако бъдете подканени за парола, въведете паролата на потребителя от отдалечения компютър.

Първото синхронизиране може да отнеме повече време, защото се копират всички необходими файлове. Следващите изпълнения обикновено са по-бързи, тъй като се прехвърлят само промените.

Скриптът изпраща файловете от локалния компютър към `RHOST`. За синхронизация в обратната посока го изпълнете на другия компютър, като създадете там същата структура `~/sync` и зададете първия компютър като `RHOST`.

