rsync команда в Linux – Пълно ръководство с примери

rsync команда в Linux - Пълно ръководство с примери

Какво е rsync?

rsync е мощен инструмент за синхронизация и копиране на файлове в Linux и Unix системи. Име му идва от "remote sync" (отдалечена синхронизация).

За WordPress администратори, rsync е най-добрият начин за бързо и ефективно копиране на файлове между сървър и локална машина, или между различни сървъри.

Защо да използваме rsync вместо FTP/SFTP?

  • ✅ Копира само промените, не целия файл (спестява време и трафик)
  • ✅ Запазва права, времена и собственост на файлове
  • ✅ Много по-бърз от FTP – особено за WordPress с хиляди файлове
  • ✅ Показва прогрес на копирането
  • ✅ Може да възстанови прекъснато копиране
  • ✅ Компресира данните при прехвърляне
  • ✅ Перфектен за backup на WordPress сайтове

Инсталация

Ubuntu/Debian:

sudo apt update
sudo apt install rsync

CentOS/RHEL/Rocky Linux:

sudo yum install rsync

Windows (WSL):

sudo apt update
sudo apt install rsync

Проверка дали е инсталиран:

rsync --version

Основен синтаксис – Разбиране на структурата

rsync [ОПЦИИ] ИЗТОЧНИК ДЕСТИНАЦИЯ

Анатомия на rsync командата – разглобяване по части

Нека разгледаме конкретна команда и да я разбием на части:

rsync -avz [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/nav/

Разбивка:

  1. rsync – самата команда (програмата която викаме)
  2. -avz – ОПЦИИ/АРГУМЕНТИ (как да работи командата)
  3. [email protected]:/var/www/html/ – ИЗТОЧНИК (откъде копираме)
  4. /mnt/c/Users/fedia/Desktop/nav/ – ДЕСТИНАЦИЯ (къде копираме)

Разбиране на ОПЦИИТЕ (аргументите)

rsync -avz ...

Опциите винаги започват с - (тире) и могат да бъдат:

Кратки опции (комбинирани):

  • -avz = -a + -v + -z (три опции заедно)
  • -avzhP = -a + -v + -z + -h + -P (пет опции заедно)

Дълги опции (самостоятелни):

  • --delete (с две тирета)
  • --exclude (с две тирета)

Можем ли БЕЗ опции?

Да! Най-простата команда е:

rsync /source/ /destination/

Но това просто копира файлове без да запазва права, времена и т.н. Затова ВИНАГИ използваме поне -a.

Разбиране на ИЗТОЧНИКА

Източникът е ОТКЪДЕ копираме. Може да бъде:

1. Локална папка:

rsync -avz /home/user/documents/ /backup/
  • ИЗТОЧНИК: /home/user/documents/
  • Тип: Локална директория на същата машина

2. Отдалечена папка (сваляне от сървър):

rsync -avz [email protected]:/var/www/html/ /local/backup/
  • ИЗТОЧНИК:[email protected]:/var/www/html/
    • root – потребителско име на сървъра
    • @ – разделител
    • 10.20.20.23 – IP адрес на сървъра (може да е и домейн)
    • : – разделител между сървър и път
    • /var/www/html/ – пътят на файловете на сървъра

3. Друг формат на отдалечен път:

rsync -avz [email protected]:/home/user/files/ /local/
  • Може да използваме домейн вместо IP
  • Може да използваме различен потребител (не само root)

Разбиране на ДЕСТИНАЦИЯТА

Дестинацията е КЪДЕ копираме. Може да бъде:

1. Локална папка:

rsync -avz [email protected]:/var/www/html/ /home/user/backup/
  • ДЕСТИНАЦИЯ: /home/user/backup/
  • Тип: Локална директория на същата машина

2. Windows път в WSL:

rsync -avz [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/nav/
  • ДЕСТИНАЦИЯ:/mnt/c/Users/fedia/Desktop/nav/
    • /mnt/c/ = Windows диск C:
    • Останалата част е нормален Windows път

3. Отдалечена папка (качване към сървър):

rsync -avz /local/files/ [email protected]:/var/www/html/
  • ДЕСТИНАЦИЯ: [email protected]:/var/www/html/
  • Тип: Отдалечена директория на сървър

Правило за посоката на копирането

Лесен начин да запомните:

ОТКЪДЕ → КЪДЕ

Сваляне (от сървър към локално):

rsync -avz ОТДАЛЕЧЕНО ЛОКАЛНО
rsync -avz [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/

Качване (от локално към сървър):

rsync -avz ЛОКАЛНО ОТДАЛЕЧЕНО
rsync -avz /mnt/c/Users/fedia/Desktop/nav/ [email protected]:/var/www/html/

Критично важно правило за наклонените черти (/)

Наклонената черта / в края на пътя променя драстично поведението!

С наклонена черта (/) – копира СЪДЪРЖАНИЕТО:

rsync -avz /source/ /destination/

Резултат:

/destination/
  ├── file1.txt
  ├── file2.txt
  └── subfolder/

Файловете от /source/ отиват ДИРЕКТНО в /destination/

БЕЗ наклонена черта (/) – копира САМАТА ПАПКА:

rsync -avz /source /destination/

Резултат:

/destination/
  └── source/
      ├── file1.txt
      ├── file2.txt
      └── subfolder/

Създава се папка source вътре в destination

Реален пример за WordPress:

# ПРАВИЛНО - копира файловете директно
rsync -avz [email protected]:/var/www/html/ /backup/
# Резултат: /backup/wp-config.php, /backup/wp-content/, и т.н.

# ГРЕШНО - създава вложена папка
rsync -avz [email protected]:/var/www/html /backup/
# Резултат: /backup/html/wp-config.php, /backup/html/wp-content/

Златно правило: Винаги използвайте / в края за по-предсказуемо поведение!

Реални примери с пълен разбор

Пример 1: Сваляне на WordPress сайт

rsync -avz [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/nav/

Разбивка:

  • Команда: rsync
  • Опции:-avz
    • -a = архивен режим (запазва всичко)
    • -v = verbose (показва какво прави)
    • -z = компресия при прехвърляне
  • Източник:[email protected]:/var/www/html/
    • Сървър: 10.20.20.23
    • Потребител: root
    • Път: /var/www/html/
    • / в края = копирай съдържанието
  • Дестинация:/mnt/c/Users/fedia/Desktop/nav/
    • Локален път в WSL (Windows Desktop)

Какво прави: Свалява всички файлове от /var/www/html/ на сървъра и ги слага в Desktop/nav/

Пример 2: Качване на промени към сървър

rsync -avz /mnt/c/Users/fedia/Desktop/nav/ [email protected]:/var/www/html/

Разбивка:

  • Команда: rsync
  • Опции: -avz (същите като преди)
  • Източник:/mnt/c/Users/fedia/Desktop/nav/
    • Локален път (Windows Desktop в WSL)
    • / в края = копирай съдържанието
  • Дестинация:[email protected]:/var/www/html/
    • Отдалечен сървър

Какво прави: Качва файлове от локалната папка към сървъра (обратното на пример 1)

Пример 3: Локално копиране (без мрежа)

rsync -avh /home/user/website/ /backup/website-backup/

Разбивка:

  • Команда: rsync
  • Опции:-avh
    • -a = архивен режим
    • -v = verbose
    • -h = human-readable sizes (показва MB/GB)
  • Източник: /home/user/website/ (локална папка)
  • Дестинация: /backup/website-backup/ (друга локална папка)

Какво прави: Копира локално от една папка в друга на СЪЩАТА машина

Пример 4: С множество опции

rsync -avzhP --delete --exclude 'cache/' [email protected]:/var/www/html/ /backup/

Разбивка:

  • Команда: rsync
  • Кратки опции:-avzhP
    • -a = archive
    • -v = verbose
    • -z = compress
    • -h = human-readable
    • -P = progress + partial
  • Дълги опции:--delete --exclude 'cache/'
    • --delete = изтрий файлове, които липсват в източника
    • --exclude 'cache/' = не копирай папката cache/
  • Източник: [email protected]:/var/www/html/
  • Дестинация: /backup/

Какво прави: Свалява файлове със синхронизация (изтрива ненужното) и пропуска cache папката

Минимални необходими опции

Може ли само rsync source destination?

Да, но НЕ Е препоръчително:

rsync /source/ /destination/
  • Ще копира файловете
  • НО няма да запази права, собственост, времена
  • НЕ е рекурсивно (няма да влезе в папките)

Минимум за реална работа:

rsync -a /source/ /destination/
  • -a е минималното необходимо за правилно копиране

Препоръчителен минимум:

rsync -av /source/ /destination/
  • -a = archive (запазва всичко)
  • -v = verbose (виждаме какво става)

Оптималният избор за ежедневна употреба:

rsync -avz source destination
  • За локално копиране: -avh
  • За отдалечено копиране: -avz (компресията помага)
  • За големи файлове: -avzhP (виждаме прогреса)

Комбинации на опции, които винаги работят заедно

# За backup (местен)
rsync -avh source/ destination/

# За backup (отдалечен)
rsync -avz root@server:/path/ /local/path/

# За синхронизация (с изтриване)
rsync -avz --delete source/ destination/

# За upload с прогрес
rsync -avzhP /local/ root@server:/remote/

# За изключване на файлове
rsync -avz --exclude 'cache/' --exclude '*.log' source/ dest/

Най-важните аргументи (опции)

Основни опции:

ОпцияЗначениеОбяснение
-aarchive modeАрхивен режим – запазва всичко (права, времена, линкове)
-vverboseПодробен изход – показва какво се копира
-zcompressКомпресира данните при прехвърляне (по-бърз трансфер)
-hhuman-readableПоказва размерите в четим формат (KB, MB, GB)
-Pprogress + partialПоказва прогрес + запазва частично копирани файлове
-ndry-run"Пробен" режим – само показва какво ще се случи
-rrecursiveРекурсивно – влиза в поддиректории
-uupdateОбновява само по-нови файлове
--deletedeleteИзтрива файлове, които не съществуват в източника
--excludeexcludeИзключва определени файлове/папки

Какво означава -a (archive)?

Опцията -a всъщност е комбинация от:

  • -r – рекурсивно копиране
  • -l – копира символни връзки
  • -p – запазва permissions (права)
  • -t – запазва времената на модификация
  • -g – запазва групата
  • -o – запазва собственика (owner)

За WordPress това е критично важно – запазва правата на файловете (644 за файлове, 755 за папки).


Практически примери за WordPress – стъпка по стъпка

1. Сваляне на WordPress сайт от сървър (Backup)

Пример 1: Основно сваляне (Linux)

rsync -avz [email protected]:/var/www/html/ /home/user/wordpress-backup/

Обяснение:

  • -a – архивен режим (запазва права, времена и т.н.)
  • -v – показва какво се копира
  • -z – компресира данните при прехвърляне
  • [email protected] – потребител и IP адрес на сървъра
  • :/var/www/html/ – пътят на сървъра (забележете / в края!)
  • /home/user/wordpress-backup/ – локалната дестинация

Какво се случва: Всички файлове от /var/www/html/ на сървъра се копират в локалната папка /home/user/wordpress-backup/

Пример 2: Сваляне от WSL (Windows)

rsync -avz [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/nav/

Обяснение:

  • Същото като горе, но дестинацията е Windows път
  • /mnt/c/ – това е как WSL вижда диск C: в Windows
  • /mnt/c/Users/fedia/Desktop/nav/ = C:\Users\fedia\Desktop\nav\

Пример 3: Сваляне с прогрес бар

rsync -avzhP [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/nav/

Обяснение:

  • -P – показва прогрес бар за всеки файл и общ процент

Пример 4: Сваляне само на wp-content (темите и плъгините)

rsync -avz [email protected]:/var/www/html/wp-content/ /mnt/c/Users/fedia/Desktop/wp-content-backup/

Защо само wp-content?

  • Често ни трябват само темите, плъгините и uploads
  • По-бързо е от цял сайт
  • WordPress core файловете можем да ги изтеглим от wordpress.org

2. Качване на WordPress сайт към сървър (Deploy/Restore)

Пример 1: Качване от локална машина към сървър (Linux)

rsync -avz /home/user/wordpress-site/ [email protected]:/var/www/html/

Обяснение:

  • Обратно на свалянето – локалният път е ПЪРВИ, сървърният е ВТОРИ
  • Копира локалните файлове към сървъра

Пример 2: Качване от WSL (Windows)

rsync -avz /mnt/c/Users/fedia/Desktop/nav/ [email protected]:/var/www/html/

Обяснение:

  • Качва файлове от Windows Desktop към сървъра
  • Внимавайте с правата на файлове – може да се наложи да ги коригирате на сървъра след качване

Пример 3: Качване с изтриване на стари файлове

rsync -avz --delete /home/user/wordpress-site/ [email protected]:/var/www/html/

Обяснение:

  • --delete – изтрива файлове на сървъра, които НЕ съществуват локално
  • ВНИМАНИЕ: Опасна опция! Използвайте я само ако сте сигурни!
  • Полезно за "чиста" синхронизация

Пример 4: "Пробно" качване (без реално копиране)

rsync -avzn /home/user/wordpress-site/ [email protected]:/var/www/html/

Обяснение:

  • -n (dry-run) – само показва какво ще се качи, БЕЗ да качва наистина
  • Винаги правете това първо преди реално качване!

3. Копиране между два сървъра

Пример: Миграция на WordPress от стар към нов сървър

# От сървър A към сървър B (изпълнявате от локалната си машина)
rsync -avz [email protected]:/var/www/html/ [email protected]:/var/www/html/

Обяснение:

  • Копира директно между два сървъра
  • Вие сте посредникът – командата минава през вашата машина

4. Изключване на ненужни файлове (exclude)

WordPress съдържа много файлове, които не ни трябват при backup:

Пример 1: Изключване на cache папки

rsync -avz --exclude 'wp-content/cache/' \
           --exclude 'wp-content/uploads/cache/' \
           [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/backup/

Обяснение:

  • --exclude – пропуска определени файлове/папки
  • \ – продължава командата на нов ред (за четливост)

Пример 2: Изключване на множество неща

rsync -avz \
  --exclude 'wp-content/cache/' \
  --exclude 'wp-content/uploads/cache/' \
  --exclude 'wp-content/backup*' \
  --exclude '.git/' \
  --exclude 'node_modules/' \
  --exclude '.DS_Store' \
  --exclude 'error_log' \
  [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/backup/

Какво изключваме:

  • cache/ – кеш папки (регенерират се)
  • backup* – стари backup файлове
  • .git/ – Git repository (не ни трябва в production)
  • node_modules/ – Node.js зависимости (огромни и ненужни)
  • .DS_Store – Mac системни файлове
  • error_log – PHP error логове

Пример 3: Използване на exclude файл

Създайте файл rsync-exclude.txt:

wp-content/cache/
wp-content/uploads/cache/
wp-content/backup*
.git/
node_modules/
.DS_Store
error_log
*.log

След това:

rsync -avz --exclude-from='rsync-exclude.txt' \
  [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/backup/

Типични WordPress сценарии

Сценарий 1: Ежедневен backup

#!/bin/bash
# Скрипт за автоматичен backup

DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/home/user/backups/wordpress-$DATE"

rsync -avz \
  --exclude 'wp-content/cache/' \
  --exclude 'wp-content/uploads/cache/' \
  [email protected]:/var/www/html/ "$BACKUP_DIR/"

echo "Backup завърши в $BACKUP_DIR"

Сценарий 2: Синхронизация на uploads папката

Често искаме само да свалим новите upload файлове (снимки, PDF-и и т.н.):

rsync -avz --update [email protected]:/var/www/html/wp-content/uploads/ \
  /home/user/wordpress-uploads/

Обяснение:

  • --update – копира само по-нови файлове (спестява време)

Сценарий 3: Качване само на темата (след разработка)

rsync -avz --delete /home/user/my-theme/ \
  [email protected]:/var/www/html/wp-content/themes/my-theme/

Сценарий 4: Синхронизация на development и production

# Сваляне на production базата и uploads
rsync -avz [email protected]:/var/www/html/wp-content/uploads/ \
  /home/user/local-wordpress/wp-content/uploads/

Разлика в синтаксиса – Linux vs WSL

Linux (стандартен):

# Сваляне
rsync -avz [email protected]:/var/www/html/ /home/user/backup/

# Качване
rsync -avz /home/user/backup/ [email protected]:/var/www/html/

WSL (Windows):

# Сваляне
rsync -avz [email protected]:/var/www/html/ /mnt/c/Users/fedia/Desktop/backup/

# Качване
rsync -avz /mnt/c/Users/fedia/Desktop/backup/ [email protected]:/var/www/html/

Ключовата разлика:

  • Linux: /home/user/...
  • WSL: /mnt/c/Users/... (за достъп до Windows файлове)

Важни съвети и трикове

1. Винаги тествайте с -n първо!

# Първо - пробен режим
rsync -avzn /local/path/ root@server:/remote/path/

# Ако изглежда добре - без -n
rsync -avz /local/path/ root@server:/remote/path/

2. Правата на файлове след rsync

След качване на файлове към сървър, може да се наложи да коригирате правата:

# На сървъра
sudo chown -R www-data:www-data /var/www/html/
sudo find /var/www/html/ -type d -exec chmod 755 {} \;
sudo find /var/www/html/ -type f -exec chmod 644 {} \;

3. Наклонената черта (/) е критична!

# С / - копира СЪДЪРЖАНИЕТО
rsync -avz /source/ /destination/
# Резултат: /destination/file1, /destination/file2

# БЕЗ / - копира САМАТА ПАПКА
rsync -avz /source /destination/
# Резултат: /destination/source/file1, /destination/source/file2

4. SSH портове (ако не е 22)

rsync -avz -e "ssh -p 2222" [email protected]:/var/www/html/ /local/backup/

5. Показване на прогрес в човешки формат

rsync -avzhP --stats [email protected]:/var/www/html/ /local/backup/

Показва:

  • Прогрес бар за всеки файл
  • Общ брой файлове
  • Прехвърлени байтове
  • Скорост на трансфер

Често срещани грешки и решения

Грешка 1: "Permission denied"

Проблем: Нямате права да четете/пишете файлове

Решение:

# Използвайте sudo или се свържете като root
rsync -avz root@server:/var/www/html/ /local/backup/

Грешка 2: "Connection refused"

Проблем: SSH не работи или портът е грешен

Решение:

# Проверете SSH връзката
ssh [email protected]

# Ако портът е различен
rsync -avz -e "ssh -p 2222" root@server:/path/ /local/

Грешка 3: Копират се твърде много файлове

Проблем: Забравили сте да изключите cache/logs

Решение:

# Използвайте --exclude
rsync -avz --exclude 'cache/' --exclude '*.log' root@server:/path/ /local/

Грешка 4: Файловете се копират отново и отново

Проблем: Разлика в времевите зони или правата

Решение:

# Използвайте --checksum за сравнение по съдържание
rsync -avz --checksum root@server:/path/ /local/

Бонус: Полезни команди за WordPress

Проверка размер на директория преди sync:

du -sh /var/www/html/

Преброяване на файлове:

find /var/www/html/ -type f | wc -l

Намиране на най-големите файлове:

find /var/www/html/ -type f -exec du -h {} + | sort -rh | head -20

Заключение

rsync е незаменим инструмент за всеки WordPress администратор. Овладейте го и ще спестите часове време при:

  • Правене на backups
  • Миграция между сървъри
  • Синхронизация на development и production
  • Качване на промени след разработка

Златно правило: Винаги тествайте с -n преди реални операции!

Най-използваната команда:

rsync -avzhP --exclude 'cache/' source/ destination/

Това е всичко, което ви трябва за 95% от случаите! 🚀

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

💝 Благодарим ви, че прочетохте тази статия! Ако сте намерили информацията за полезна, можете да подкрепите нашия труд със символична сума:
💝 Благодарим ви за подкрепата!

Последвайте ни във Facebook за още IT съвети и новини

Последвайте ни

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 1 + 8 ? (въведете числото)