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/
Разбивка:
rsync– самата команда (програмата която викаме)-avz– ОПЦИИ/АРГУМЕНТИ (как да работи командата)[email protected]:/var/www/html/– ИЗТОЧНИК (откъде копираме)/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/
Най-важните аргументи (опции)
Основни опции:
| Опция | Значение | Обяснение |
|---|---|---|
-a | archive mode | Архивен режим – запазва всичко (права, времена, линкове) |
-v | verbose | Подробен изход – показва какво се копира |
-z | compress | Компресира данните при прехвърляне (по-бърз трансфер) |
-h | human-readable | Показва размерите в четим формат (KB, MB, GB) |
-P | progress + partial | Показва прогрес + запазва частично копирани файлове |
-n | dry-run | "Пробен" режим – само показва какво ще се случи |
-r | recursive | Рекурсивно – влиза в поддиректории |
-u | update | Обновява само по-нови файлове |
--delete | delete | Изтрива файлове, които не съществуват в източника |
--exclude | exclude | Изключва определени файлове/папки |
Какво означава -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% от случаите! 🚀



