# Source
Repo: https://github.com/oleksdovz/oleks-dov.work
Копіювання і бекап у Linux: базові команди, параметри та практичні приклади
У Linux є кілька базових інструментів для копіювання файлів, директорій, архівації та резервного копіювання. На практиці найчастіше використовують cp, rsync, tar, scp, dd, а для баз даних — окремі утиліти на кшталт mysqldump або pg_dump.
Цей матеріал — не просто список команд, а практична база: що робить кожна команда, що означає кожен параметр, навіщо він використовується саме так, і в яких випадках цей підхід доречний.
Зміст
- 1.
cp— найпростіше копіювання файлів і папок - 2.
rsync— основний інструмент для бекапу і синхронізації - 3.
tar— архівування в один файл - 4. Стиснуті архіви:
tar.gz,tar.bz2,tar.xz - 5.
scp— копіювання на інший сервер - 6.
dd— поблочне копіювання дисків і розділів - 7.
find— вибіркове копіювання і пошук потрібних файлів - 8. Бекап баз даних: окремі утиліти, а не
cp - 9. Автоматичний backup через
cron - 10. Як правильно обирати інструмент
- 11. Найчастіші помилки
- 12. Мінімальна практична шпаргалка
- Висновок
1. cp — найпростіше копіювання файлів і папок
Чи є команда cp вбудованою
cp не є builtin-командою shell. Зазвичай це окрема утиліта з пакета coreutils, яка майже завжди вже встановлена в системі.
- Debian / Ubuntu: пакет
coreutils - RHEL / CentOS / Rocky / AlmaLinux: пакет
coreutils
Як встановити cp
Debian / Ubuntu
sudo apt update
sudo apt install -y coreutils
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y coreutils
Таблиця аргументів cp
| Аргумент | Що означає | Навіщо використовувати |
|---|---|---|
-r |
Рекурсивне копіювання директорій | Потрібен для копії папок з усім вмістом |
-R |
Те саме, що recursive | Альтернативний варіант рекурсивного копіювання |
-a |
Archive mode | Зберігає права, часові мітки (timestamps), символічні посилання (symlink) і структуру — найкращий варіант для резервної копії |
-i |
Interactive | Запитує перед перезаписом файлу |
-v |
Verbose | Показує, що саме копіюється |
-p |
Preserve mode, ownership, timestamps | Корисно, якщо треба зберегти атрибути (власник/права/часові мітки) без повного archive mode |
Приклади використання cp
Приклад 1. Скопіювати один файл
cp /home/user/file.txt /tmp/
Розбір команди
cp— сама команда copy./home/user/file.txt— джерело, файл який копіюємо./tmp/— каталог призначення, куди копіюємо.
Що робить команда
Бере файл file.txt з домашньої директорії користувача і створює його копію в /tmp.
Коли так використовувати
Це найпростіший варіант для разового копіювання одного файлу.
Приклад 2. Скопіювати файл під новим ім’ям
cp /home/user/file.txt /tmp/file-backup.txt
Розбір
cp— команда копіювання./home/user/file.txt— вихідний файл./tmp/file-backup.txt— повний шлях нового файлу.
Що важливо
Якщо в другому аргументі вказано не директорію, а повне ім’я файлу, cp створить копію саме з цим ім’ям.
Навіщо так
Так зручно робити швидкий backup перед редагуванням конфіга або скрипта.
Приклад 3. Скопіювати директорію рекурсивно
cp -r /home/user/project /backup/
Розбір параметра -r
-r= recursive, рекурсивно.- Без цього параметра
cpне буде копіювати директорію з усім її вмістом.
Що робить команда
Копіює папку project разом з усіма вкладеними файлами й підкаталогами в /backup/.
Чому параметр потрібен
Директорія — це не один файл. Щоб пройти по всьому дереву файлів, треба ввімкнути рекурсивний режим.
Приклад 4. Архівний режим — кращий варіант для копії папок
cp -a /home/user/project /backup/
Розбір параметра -a
-a= archive mode.- Це не просто “скопіювати папку”, а максимально зберегти оригінальні властивості.
Зазвичай -a включає поведінку на кшталт:
- рекурсивного копіювання;
- збереження прав доступу;
- збереження часових міток;
- коректної роботи із symlink;
- збереження структури.
Чому краще -a, ніж -r
cp -r просто копіює дерево.
cp -a робить це акуратніше і ближче до резервної копії.
Практичний висновок
Якщо копіюєш директорію для backup або migration — майже завжди краще брати cp -a.
Приклад 5. Питати перед перезаписом
cp -i file.txt /tmp/
Розбір параметра -i
-i= interactive.- Якщо файл уже існує в місці призначення, команда запитає підтвердження.
Навіщо це потрібно
Корисно, коли працюєш руками і боїшся випадково затерти файл.
Приклад 6. Показувати, що саме копіюється
cp -av /home/user/project /backup/
Розбір параметрів
-a— archive mode.-v= verbose, показувати список файлів у процесі.
Навіщо -v
У ручних операціях корисно бачити, що саме відбувається. Особливо якщо копіюється багато файлів.
Скрипт: приклад для cp
#!/usr/bin/env bash
set -euo pipefail
SRC_FILE="/home/user/file.txt"
DST_DIR="/tmp"
DST_FILE="${DST_DIR}/file-backup.txt"
# Перевіряємо, що джерельний файл існує
echo "[INFO] Checking that source file exists: ${SRC_FILE}"
[ -f "${SRC_FILE}" ]
# Створюємо директорію призначення
echo "[INFO] Creating destination directory if it does not exist: ${DST_DIR}"
mkdir -p "${DST_DIR}"
# Копіюємо файл у нове місце
echo "[INFO] Copying file ${SRC_FILE} to ${DST_FILE}"
cp -av "${SRC_FILE}" "${DST_FILE}"
# Повідомляємо про успішне завершення
echo "[OK] Copy completed successfully with cp"
Документація для cp
Офіційної україномовної сторінки для cp, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про cp
Україномовних якісних статей саме по cp майже немає, тому додаю перевірені англомовні матеріали:
YouTube-відео про cp
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
2. rsync — основний інструмент для бекапу і синхронізації
Чи є команда rsync вбудованою
rsync не є builtin-командою shell. Це окрема утиліта, яку часто треба встановлювати вручну, особливо на мінімальних образах серверів або контейнерів.
- Debian / Ubuntu: пакет
rsync - RHEL / CentOS / Rocky / AlmaLinux: пакет
rsync
Як встановити rsync
Debian / Ubuntu
sudo apt update
sudo apt install -y rsync
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y rsync
Якщо cp — це просто копіювання, то rsync — вже повноцінний робочий інструмент для резервного копіювання.
Його сильні сторони:
- копіює лише зміни;
- працює локально і по мережі;
- може дзеркалити каталоги;
- підтримує dry-run;
- зручний для cron і регулярних backup jobs.
Таблиця аргументів rsync
| Аргумент | Що означає | Навіщо використовувати |
|---|---|---|
-a |
Archive mode | Базовий режим для бекапу: рекурсія, права, часові мітки (timestamps), символічні посилання (symlink) |
-v |
Verbose | Показує список файлів і дій |
-h |
Human-readable | Робить розміри читабельними |
-z |
Compress | Стискає дані при передачі по мережі |
-A |
Preserve ACL | Зберігає ACL |
-X |
Preserve extended attributes | Зберігає xattrs |
-H |
Preserve hard links | Правильно переносить hard links |
--delete |
Видаляти зайве у destination | Робить destination дзеркалом source |
--dry-run |
Тестовий запуск | Дозволяє перевірити зміни без реального виконання |
--progress |
Показувати прогрес | Зручно для великих файлів |
--exclude=PATTERN |
Виключити файли або директорії | Не копіювати кеш, логи, build artifacts |
-e "ssh ..." |
Вказати transport shell | Потрібно для SSH з кастомним портом або опціями |
Приклади використання rsync
Приклад 1. Базова синхронізація
rsync -av /home/user/data/ /backup/data/
Розбір параметрів
rsync— команда синхронізації.-a= archive mode.-v= verbose./home/user/data/— джерело./backup/data/— призначення.
Що означає -a в rsync
У rsync це один із найважливіших параметрів. Він включає логіку “архівного копіювання”, зокрема:
- рекурсивне проходження по директоріях;
- збереження прав;
- збереження timestamp;
- збереження symlink;
- збереження групи/власника, якщо є права.
Навіщо -v
Щоб бачити, які файли переносяться.
Ключовий нюанс зі слешем /
/home/user/data/
Означає: копіювати вміст директорії.
А от так:
/home/user/data
Означає: копіювати саму директорію data.
Це одна з найважливіших деталей у rsync.
Приклад 2. З прогресом і зручним форматом розміру
rsync -avh --progress /home/user/data/ /backup/data/
Розбір параметрів
-a— archive mode.-v— verbose.-h= human-readable, показувати розміри у зрозумілому форматі: KB, MB, GB.--progress— показувати прогрес копіювання кожного файлу.
Навіщо -h
Без цього великі числа байтів менш читабельні.
Навіщо --progress
Добре підходить для великих файлів, коли хочеш бачити, що копія реально йде, а не “зависла”.
Приклад 3. Дзеркальна синхронізація
rsync -av --delete /home/user/data/ /backup/data/
Розбір параметра --delete
--deleteвидаляє з каталогу призначення ті файли, яких уже немає в джерелі.
Що це означає на практиці
Backup каталог стає дзеркалом source каталогу.
Чому це корисно
Коли потрібна точна синхронізація, а не накопичення старого сміття.
Чому це небезпечно
Якщо випадково видалиш файл у source, rsync при наступному запуску видалить його і в backup.
Практика
--delete хороший для mirror backup, але не для історичних snapshot backup.
Приклад 4. Спочатку перевірка без реальних змін
rsync -av --delete --dry-run /home/user/data/ /backup/data/
Розбір параметра --dry-run
--dry-runпоказує, що буде зроблено, але нічого не змінює.
Навіщо він потрібен
Це обов’язкова практика перед ризикованою синхронізацією, особливо з --delete.
Чому так правильно
Тому що rsync може дуже швидко “акуратно знищити зайве”, якщо переплутав шляхи.
Приклад 5. Backup на інший сервер по SSH
rsync -avz -e ssh /home/user/data/ [email protected]:/backup/data/
Розбір параметрів
rsync— команда синхронізації.-a— archive mode.-v— verbose.-z— стискати дані під час передачі.-e ssh— використовувати SSH як транспорт.[email protected]:/backup/data/— віддалений шлях у форматіuser@host:path.
Навіщо -z
Якщо мережа повільна або даних багато, стиснення часто зменшує трафік.
Коли не дуже потрібно
У дуже швидкій локальній мережі або якщо файли вже стиснені, користь може бути меншою.
Важливе уточнення
Формат на кшталт:
rsync -avz /home/user/data/ [email protected]:/backup/data/
зазвичай асоціюють із backup по SSH, але тут важливо розуміти різницю між двома режимами роботи rsync:
- якщо використовується просто
rsync-daemon, то на віддаленому сервері має бути встановлений і налаштований сервісrsync; - якщо окремий
rsync-daemon не налаштований, найпрактичніший варіант — явно запускати передачу через SSH, тобто використовувати-e ssh.
Для більшості серверів у реальному житті правильний і безпечний варіант виглядає так:
rsync -avz -e ssh /home/user/data/ [email protected]:/backup/data/
Приклад 6. Використання нестандартного SSH порту
rsync -avz -e "ssh -p 2222" /home/user/data/ [email protected]:/backup/data/
Розбір параметра -e
-eдозволяє вказати remote shell.- Тут використовується:
тобто
"ssh -p 2222"rsyncпід капотом піде через SSH на порту2222.
Навіщо так
Коли на сервері SSH слухає не стандартний 22, а інший порт.
Приклад 7. Виключити зайві файли
rsync -av --exclude='*.log' --exclude='node_modules' /home/user/app/ /backup/app/
Розбір параметра --exclude
--exclude='*.log'— не копіювати файли логів.--exclude='node_modules'— не копіювати директоріюnode_modules.
Навіщо це потрібно
Для бекапу зазвичай не потрібні:
- тимчасові файли;
- кеші;
- артефакти збірки;
- великі відновлювані залежності.
Чому це правильно
Backup має містити те, що реально важливо відновити, а не все підряд.
Приклад 8. Хороший варіант для системного бекапу
rsync -aAXHv --delete /home/user/ /mnt/backup/home-user/
Розбір параметрів
-a— archive mode.-A— preserve ACL.-X— preserve extended attributes.-H— preserve hard links.-v— verbose.--delete— прибирати зайве у destination.
Навіщо -A
ACL потрібні там, де використовується розширена модель доступу, не лише базові rwx.
Навіщо -X
Extended attributes часто використовуються системою або додатками для додаткових метаданих.
Навіщо -H
Hard links без цього можуть відновитися некоректно як окремі файли.
Коли це має сенс
Коли хочеш зробити більш точну копію системи або домашнього каталогу.
Скрипт: приклад для rsync
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/home/user/data/"
DST_DIR="/backup/data/"
# Перевіряємо, що джерельна директорія існує
echo "[INFO] Checking that source directory exists: ${SRC_DIR}"
[ -d "${SRC_DIR}" ]
# Створюємо директорію призначення
echo "[INFO] Creating destination directory if it does not exist: ${DST_DIR}"
mkdir -p "${DST_DIR}"
# Спочатку показуємо зміни без реального виконання
echo "[INFO] Running dry-run first to preview changes"
rsync -av --delete --dry-run "${SRC_DIR}" "${DST_DIR}"
# Потім запускаємо реальну синхронізацію
echo "[INFO] Starting real synchronization"
rsync -avh --progress "${SRC_DIR}" "${DST_DIR}"
# Повідомляємо про успішне завершення
echo "[OK] Synchronization completed successfully with rsync"
Документація для rsync
Офіційної україномовної сторінки для rsync, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про rsync
Україномовних якісних статей саме по rsync майже немає, тому додаю перевірені англомовні матеріали:
- PhoenixNAP: rsync command in Linux
- PhoenixNAP: How to use rsync to back up data
- PhoenixNAP: How to transfer files with rsync over SSH
YouTube-відео про rsync
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
- How to Use the rsync Command | Linux Essentials Tutorial
- How to Use rsync to Reliably Copy Files Fast (many examples)
3. tar — архівування в один файл
tar не синхронізує каталоги, а пакує їх в один архів. Це дуже зручно для:
- зберігання;
- перенесення;
- point-in-time backup;
- відправки на інший сервер чи в object storage.
Чи є команда tar вбудованою
tar не є builtin-командою shell. Це окрема утиліта, яка зазвичай уже встановлена в системі, але на мінімальних image може бути відсутня.
- Debian / Ubuntu: пакет
tar - RHEL / CentOS / Rocky / AlmaLinux: пакет
tar
Як встановити tar
Debian / Ubuntu
sudo apt update
sudo apt install -y tar
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y tar
Таблиця аргументів tar
| Аргумент | Що означає | Навіщо використовувати |
|---|---|---|
-c |
Create | Створити новий архів |
-x |
Extract | Розпакувати архів |
-t |
List | Подивитися вміст архіву |
-v |
Verbose | Показувати файли під час роботи |
-f |
File | Вказати ім’я архіву |
-z |
Gzip compression | Створити або розпакувати .tar.gz |
-j |
Bzip2 compression | Створити або розпакувати .tar.bz2 |
-J |
XZ compression | Створити або розпакувати .tar.xz |
-C DIR |
Change directory | Розпакувати в конкретний каталог |
Приклади використання tar
Приклад 1. Створити звичайний tar-архів
tar -cvf /tmp/project-backup.tar /home/user/project
Розбір параметрів
tar— команда архівації.-c= create, створити новий архів.-v= verbose, показувати файли, що додаються.-f= file, вказати ім’я архіву./tmp/project-backup.tar— файл архіву./home/user/project— що саме пакуємо.
Чому -f важливий
Без -f tar не зрозуміє, куди писати архів.
Навіщо -v
Не обов’язково, але корисно для ручного запуску — видно, що саме додається.
Приклад 2. Подивитися вміст архіву
tar -tvf /tmp/project-backup.tar
Розбір
-t= list, показати вміст архіву.-v— у розширеному форматі.-f— працювати з конкретним файлом архіву.
Навіщо це потрібно
Щоб перевірити backup без розпакування.
Приклад 3. Розпакувати архів
tar -xvf /tmp/project-backup.tar -C /restore/
Розбір параметрів
-x= extract, витягнути файли з архіву.-v= verbose.-f= archive file.-C /restore/— перед розпакуванням перейти в каталог/restore/.
Навіщо -C
Щоб контролювати, куди саме підуть розпаковані файли.
Чому це важливо
Без -C архів розпакується в поточну директорію, і можна випадково засмітити або перезаписати файли.
Скрипт: приклад для tar
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/home/user/project"
ARCHIVE_FILE="/tmp/project-backup.tar"
RESTORE_DIR="/tmp/restore-test"
# Перевіряємо, що директорія для архівації існує
echo "[INFO] Checking that source directory exists: ${SRC_DIR}"
[ -d "${SRC_DIR}" ]
# Створюємо tar-архів
echo "[INFO] Creating tar archive: ${ARCHIVE_FILE}"
tar -cvf "${ARCHIVE_FILE}" "${SRC_DIR}"
# Перевіряємо вміст архіву
echo "[INFO] Listing archive contents for verification"
tar -tvf "${ARCHIVE_FILE}"
# Виконуємо тестове відновлення
echo "[INFO] Extracting archive into test directory: ${RESTORE_DIR}"
mkdir -p "${RESTORE_DIR}"
tar -xvf "${ARCHIVE_FILE}" -C "${RESTORE_DIR}"
# Повідомляємо про успішне завершення
echo "[OK] Archive creation and test restore completed successfully with tar"
Документація для tar
Офіційної україномовної сторінки для tar, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про tar
Україномовних якісних статей саме по tar майже немає, тому додаю перевірені англомовні матеріали:
YouTube-відео про tar
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
- How to Use Tar on Linux | Command Line Tips from Linode’s …
- How to use the tar command: 2-Minute Linux Tips
4. Стиснуті архіви: tar.gz, tar.bz2, tar.xz
Чи є команди для стиснутих архівів вбудованими
Для tar.gz, tar.bz2 і tar.xz базова команда — це все той самий tar, але для деяких форматів потрібні додаткові утиліти стиснення.
gzipдля-zbzip2для-jxzдля-J
Debian / Ubuntu
- пакет
tar - пакет
gzip - пакет
bzip2 - пакет
xz-utils
RHEL / CentOS / Rocky / AlmaLinux
- пакет
tar - пакет
gzip - пакет
bzip2 - пакет
xz
Як встановити інструменти для стиснутих архівів
Debian / Ubuntu
sudo apt update
sudo apt install -y tar gzip bzip2 xz-utils
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y tar gzip bzip2 xz
Приклади використання стиснутих архівів
Варіант 1. tar.gz
tar -czvf /tmp/project-backup.tar.gz /home/user/project
Розбір додаткового параметра -z
-z= gzip compression.
Що це дає
Архів буде не просто tar, а tar + gzip стиснення.
Коли використовувати
Це найпрактичніший формат у більшості випадків: швидко і достатньо добре стискає.
Розпакування tar.gz
tar -xzvf /tmp/project-backup.tar.gz -C /restore/
Розбір
-x— extract.-z— працювати через gzip.-v— verbose.-f— файл архіву.-C— куди розпакувати.
Варіант 2. tar.bz2
tar -cjvf /tmp/project-backup.tar.bz2 /home/user/project
Розбір параметра -j
-j= bzip2 compression.
Коли це доречно
Коли важливіше сильніше стиснення, ніж швидкість.
Варіант 3. tar.xz
tar -cJvf /tmp/project-backup.tar.xz /home/user/project
Розбір параметра -J
-J= xz compression.
Коли використовувати
Коли потрібен ще менший розмір архіву, і час не критичний.
Скрипт: приклад для стиснутих архівів
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/home/user/project"
ARCHIVE_FILE="/tmp/project-backup.tar.gz"
RESTORE_DIR="/tmp/restore-gzip"
# Перевіряємо, що директорія для архівації існує
echo "[INFO] Checking that source directory exists: ${SRC_DIR}"
[ -d "${SRC_DIR}" ]
# Створюємо gzip-архів
echo "[INFO] Creating gzip archive: ${ARCHIVE_FILE}"
tar -czvf "${ARCHIVE_FILE}" "${SRC_DIR}"
# Створюємо директорію для тестового відновлення
echo "[INFO] Creating restore directory: ${RESTORE_DIR}"
mkdir -p "${RESTORE_DIR}"
# Розпаковуємо архів для перевірки
echo "[INFO] Extracting gzip archive into ${RESTORE_DIR}"
tar -xzvf "${ARCHIVE_FILE}" -C "${RESTORE_DIR}"
# Повідомляємо про успішне завершення
echo "[OK] Compressed archive workflow completed successfully"
Документація для стиснутих архівів
Для стиснутих архівів використовуються tar і утиліти стиснення. Офіційної україномовної сторінки, як правило, немає, тому нижче — англомовна документація:
Блоги / статті про стиснуті архіви
Україномовних якісних статей саме по tar.gz, tar.bz2 і tar.xz майже немає, тому додаю перевірені англомовні матеріали:
YouTube-відео про стиснуті архіви
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
- Linux tar Command Tutorial with Examples: .tar, .tar.gz, .tgz
- Linux Tutorial: 40 Overview of the tar and gzip utilities
5. scp — копіювання на інший сервер
scp — це простий мережевий аналог cp через SSH.
Чи є команда scp вбудованою
scp не є builtin-командою shell. Зазвичай вона постачається разом з OpenSSH client.
- Debian / Ubuntu: пакет
openssh-client - RHEL / CentOS / Rocky / AlmaLinux: пакет
openssh-clients
Як встановити scp
Debian / Ubuntu
sudo apt update
sudo apt install -y openssh-client
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y openssh-clients
Таблиця аргументів scp
| Аргумент | Що означає | Навіщо використовувати |
|---|---|---|
-r |
Recursive | Копіювати директорії рекурсивно |
-P PORT |
SSH port | Використати нестандартний SSH порт |
-i FILE |
Identity file | Використати конкретний SSH ключ |
-p |
Preserve times and modes | Зберегти часові мітки і права |
-v |
Verbose | Дебаг і детальний вивід |
Приклади використання scp
Приклад 1. Передати файл на сервер
scp /home/user/file.txt [email protected]:/backup/
Розбір
scp— secure copy./home/user/file.txt— локальний файл.[email protected]:/backup/— користувач, хост і шлях на віддаленій машині.
Коли зручно
Коли треба один файл або кілька файлів перекинути швидко, без складної логіки.
Приклад 2. Передати папку рекурсивно
scp -r /home/user/project [email protected]:/backup/
Розбір параметра -r
-r= recursive.- Дозволяє копіювати директорію цілком.
Навіщо
Без -r папка не скопіюється, так само як і в cp.
Коли scp не найкращий вибір
Для регулярного backup краще rsync, тому що:
- він копіює лише зміни;
- підтримує dry-run;
- ефективніше працює з великими деревами файлів.
Скрипт: приклад для scp
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/home/user/project"
REMOTE_USER="admin"
REMOTE_HOST="10.10.10.20"
REMOTE_DIR="/backup/project"
# Перевіряємо, що локальна директорія існує
echo "[INFO] Checking that local directory exists: ${SRC_DIR}"
[ -d "${SRC_DIR}" ]
# Копіюємо директорію на віддалений сервер
echo "[INFO] Copying directory to remote server ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"
scp -r "${SRC_DIR}" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"
# Повідомляємо про успішне завершення
echo "[OK] Transfer completed successfully with scp"
Документація для scp
Офіційної україномовної сторінки для scp, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про scp
Україномовних якісних статей саме по scp майже немає, тому додаю перевірені англомовні матеріали:
YouTube-відео про scp
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
- Copy Files with SCP- Easy Command Line Tutorial
- Transferring files with the scp Command (Linux Crash Course …)
6. dd — поблочне копіювання дисків і розділів
dd — це вже не про “файли”, а про сире копіювання блоків. Дуже потужний і дуже небезпечний інструмент.
Чи є команда dd вбудованою
dd не є builtin-командою shell. Зазвичай це утиліта з пакета coreutils, яка майже завжди вже встановлена.
- Debian / Ubuntu: пакет
coreutils - RHEL / CentOS / Rocky / AlmaLinux: пакет
coreutils
Як встановити dd
Debian / Ubuntu
sudo apt update
sudo apt install -y coreutils
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y coreutils
Таблиця аргументів dd
| Аргумент | Що означає | Навіщо використовувати |
|---|---|---|
if=... |
Input file | Джерело: файл, диск або розділ |
of=... |
Output file | Призначення: файл, диск або розділ |
bs=SIZE |
Block size | Керує розміром блоку, може впливати на швидкість |
count=N |
Кількість блоків | Копіювати лише частину даних |
status=progress |
Показ прогресу | Зручно для великих копій |
conv=fsync |
Flush after write | Корисно, щоб бути впевненим, що дані реально скинуті на диск |
Приклади використання dd
Приклад 1. Зробити образ диска
sudo dd if=/dev/sdb of=/backup/usb.img bs=4M status=progress
Розбір параметрів
sudo— потрібен root-доступ до блочних пристроїв.dd— сама команда поблочного копіювання.if=/dev/sdb— input file, тобто джерело. Тут це диск або флешка.of=/backup/usb.img— output file, куди писати образ.bs=4M— block size, розмір блоку 4 мегабайти.status=progress— показувати прогрес.
Що означає if
Це не “input filename” у звичайному сенсі, а джерело байтів. Це може бути і файл, і диск, і розділ.
Що означає of
Це місце призначення. Якщо там вказати реальний диск, буде прямий запис на нього.
Навіщо bs=4M
Більший блок зазвичай прискорює копіювання порівняно з дуже дрібними блоками.
Навіщо status=progress
Без цього dd часто виглядає так, ніби нічого не робить.
Критично важливо
Переплутати if і of у dd — дуже погана помилка. Перед запуском обов’язково перевіряй диски через:
lsblk
Приклад 2. Відновити образ на диск
sudo dd if=/backup/usb.img of=/dev/sdb bs=4M status=progress
Що змінюється
Тепер джерело — файл образу, а ціль — диск.
Що робить команда
Повністю перезаписує /dev/sdb вмістом образу.
Коли так використовувати
Для відновлення флешки, SD-карти, bootable image тощо.
Приклад 3. Backup MBR
sudo dd if=/dev/sda of=/backup/mbr.img bs=512 count=1
Розбір додаткового параметра count=1
count=1— скопіювати лише один блок.
Чому тут bs=512
Тому що класичний MBR займає 512 байт, отже копіюємо тільки перший сектор.
Коли це корисно
Для низькорівневого backup boot record.
Скрипт: приклад для dd
#!/usr/bin/env bash
set -euo pipefail
INPUT_DISK="/dev/sdb"
OUTPUT_IMAGE="/backup/usb.img"
# Показуємо диски перед запуском небезпечної команди
echo "[WARN] Review disks carefully with lsblk before running dd"
lsblk
# Пояснюємо джерело і ціль копіювання
echo "[INFO] Reading from ${INPUT_DISK} and writing to ${OUTPUT_IMAGE}"
# Створюємо образ диска
echo "[INFO] Creating disk image"
sudo dd if="${INPUT_DISK}" of="${OUTPUT_IMAGE}" bs=4M status=progress conv=fsync
# Повідомляємо про успішне завершення
echo "[OK] Disk image creation completed successfully with dd"
Документація для dd
Офіційної україномовної сторінки для dd, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про dd
Україномовних якісних статей саме по dd майже немає, тому додаю перевірені англомовні матеріали:
YouTube-відео про dd
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
7. find — вибіркове копіювання і пошук потрібних файлів
Сам по собі find не бекапить, але він дуже корисний, коли треба знайти конкретні типи файлів і вже з ними щось зробити.
Чи є команда find вбудованою
find не є builtin-командою shell. У Linux це зазвичай утиліта з пакета findutils.
- Debian / Ubuntu: пакет
findutils - RHEL / CentOS / Rocky / AlmaLinux: пакет
findutils
Як встановити find
Debian / Ubuntu
sudo apt update
sudo apt install -y findutils
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y findutils
Таблиця аргументів find
| Аргумент | Що означає | Навіщо використовувати |
|---|---|---|
-name PATTERN |
Пошук за ім’ям | Знайти файли за шаблоном |
-type f |
Лише файли | Не показувати директорії |
-type d |
Лише директорії | Працювати тільки з папками |
-mtime N |
Зміна за N днів | Шукати старі або нові файли |
-size |
Пошук за розміром | Наприклад, великі логи |
-exec CMD {} \; |
Виконати команду над кожним файлом | Автоматизувати копіювання, видалення чи інші дії |
Приклади використання find
Приклад 1. Знайти всі .conf
find /etc -name "*.conf"
Розбір параметрів
find— команда пошуку по файловій системі./etc— де шукати.-name "*.conf"— умова: ім’я файлу закінчується на.conf.
Навіщо це потрібно
Щоб вибірково працювати з конфігами, логами, сертифікатами, дампами тощо.
Приклад 2. Скопіювати знайдені файли
find /etc -name "*.conf" -exec cp --parents {} /backup/etc-configs/ \;
Розбір
-exec— для кожного знайденого файлу виконати команду.cp— команда копіювання.--parents— зберігати батьківські каталоги.{}— підставляється поточний знайдений файл./backup/etc-configs/— каталог призначення.\;— завершення виразу-exec.
Навіщо --parents
Без нього всі файли можуть скластися в одну директорію, і структура шляхів втратиться.
Коли це корисно
Коли треба зібрати лише певний тип файлів з різних місць.
Скрипт: приклад для find
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/etc"
DST_DIR="/backup/etc-configs"
# Перевіряємо, що директорія для пошуку існує
echo "[INFO] Checking that source directory exists: ${SRC_DIR}"
[ -d "${SRC_DIR}" ]
# Створюємо директорію призначення
echo "[INFO] Creating destination directory: ${DST_DIR}"
mkdir -p "${DST_DIR}"
# Шукаємо конфігураційні файли і копіюємо їх зі структурою каталогів
echo "[INFO] Finding all *.conf files and copying them with directory structure preserved"
find "${SRC_DIR}" -name "*.conf" -exec cp --parents {} "${DST_DIR}" \;
# Повідомляємо про успішне завершення
echo "[OK] Search and copy completed successfully with find"
Документація для find
Офіційної україномовної сторінки для find, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про find
Україномовних якісних статей саме по find майже немає, тому додаю перевірені англомовні матеріали:
YouTube-відео про find
Відео українською не знайшов, тому додаю якісні англомовні варіанти:
8. Бекап баз даних: окремі утиліти, а не cp
Для робочої бази даних звичайне копіювання файлів каталогу з даними — зазвичай погана ідея. Правильніше робити дамп штатними інструментами.
Чи є команди для дампів БД вбудованими
mysqldump і pg_dump не є builtin-командами shell. Це окремі клієнтські утиліти для конкретних СУБД.
mysqldump- Debian / Ubuntu: пакет
mysql-client - RHEL / CentOS / Rocky / AlmaLinux: пакет
mysql
- Debian / Ubuntu: пакет
pg_dump- Debian / Ubuntu: пакет
postgresql-client - RHEL / CentOS / Rocky / AlmaLinux: пакет
postgresql
- Debian / Ubuntu: пакет
Як встановити утиліти для дампів БД
Debian / Ubuntu
sudo apt update
sudo apt install -y mysql-client postgresql-client
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y mysql postgresql
Таблиця аргументів для дампів БД
| Команда | Аргумент | Що означає | Навіщо використовувати |
|---|---|---|---|
mysqldump |
-u USER |
Користувач БД | Запуск від конкретного облікового запису |
mysqldump |
-p |
Запитати пароль | Безпечніше, ніж передавати пароль прямо в команді |
mysqldump |
--single-transaction |
Консистентний дамп InnoDB без lock table | Добре для live backup MySQL |
pg_dump |
-Fc |
Custom format | Краще для відновлення через pg_restore |
pg_dump |
-f FILE |
Вихідний файл | Явно задати файл дампу |
Приклади використання дампів БД
MySQL / MariaDB
mysqldump -u root -p mydb > /backup/mydb-$(date +%F).sql
Розбір
mysqldump— утиліта логічного бекапу MySQL/MariaDB.-u root— користувач БД.-p— запросити пароль.mydb— назва бази.>— перенаправити stdout у файл.$(date +%F)— підставити поточну дату у форматіYYYY-MM-DD.
Навіщо $(date +%F)
Так легко робити щоденні backup-файли без перезапису.
PostgreSQL
pg_dump mydb > /backup/mydb-$(date +%F).sql
Розбір
pg_dump— штатний логічний дамп PostgreSQL.mydb— база.>— запис у файл.
Чому це правильно
Такий дамп легше відновлювати, переносити між серверами і зберігати.
Скрипт: приклад для дампу БД
#!/usr/bin/env bash
set -euo pipefail
DB_NAME="mydb"
BACKUP_FILE="/backup/${DB_NAME}-$(date +%F).sql"
# Запускаємо логічний дамп бази даних
echo "[INFO] Creating logical database dump for ${DB_NAME}"
echo "[INFO] mysqldump will prompt for the database password"
mysqldump -u root -p "${DB_NAME}" > "${BACKUP_FILE}"
# Повідомляємо, де збережено дамп
echo "[INFO] Dump saved to ${BACKUP_FILE}"
# Повідомляємо про успішне завершення
echo "[OK] Database backup completed successfully"
Документація для дампів БД
Офіційної україномовної сторінки для mysqldump і pg_dump, як правило, немає, тому нижче — офіційна англомовна документація:
Блоги / статті про дампи БД
Україномовних якісних статей саме по mysqldump і pg_dump майже немає, тому додаю перевірені англомовні матеріали:
- DigitalOcean: How to back up MySQL databases with mysqldump
- DigitalOcean: How to back up, restore, and migrate a PostgreSQL database
YouTube-відео про дампи БД
Відео українською не знайшов, тому додаю англомовні варіанти для mysqldump і pg_dump:
- Backup MySQL database with mysqldump FAST (from the …)
- PostgreSQL Logical Backup & Restore | Explained by Ankush …
9. Автоматичний backup через cron
Команди мають реальну користь, коли вони запускаються регулярно.
Чи є команда cron вбудованою
cron не є builtin-командою shell. Це окремий сервіс планувальника задач. Для редагування розкладу зазвичай використовують команду crontab.
- Debian / Ubuntu: пакет
cron - RHEL / CentOS / Rocky / AlmaLinux: пакет
cronie
Як встановити cron
Debian / Ubuntu
sudo apt update
sudo apt install -y cron
sudo systemctl enable --now cron
RHEL / CentOS / Rocky / AlmaLinux
sudo dnf install -y cronie
sudo systemctl enable --now crond
Приклад backup-скрипта
#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="/backup/daily/$(date +%F)"
mkdir -p "$BACKUP_DIR"
rsync -aAX --delete /home/user/data/ "$BACKUP_DIR/data/"
tar -czf "$BACKUP_DIR/etc.tar.gz" /etc
Пояснення рядків
#!/usr/bin/env bash— запускати скрипт через Bash.set -euo pipefail— жорсткіший режим виконання:-e— завершити скрипт при помилці;-u— помилка, якщо використана неоголошена змінна;pipefail— якщо в пайпі впала команда, скрипт це побачить.
BACKUP_DIR=...— каталог backup на сьогодні.mkdir -p— створити каталог, і не падати якщо він уже існує.rsync -aAX --delete ...— backup даних.tar -czf ... /etc— архів конфігів.
Чому такий підхід хороший
Тут розділено:
- звичайні файли — через
rsync; - конфіги системи — через архів.
Це практичний і робочий базовий шаблон.
Додавання у cron
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Розбір cron-рядка
0 2 * * *— запуск щодня о 02:00./usr/local/bin/backup.sh— скрипт.>> /var/log/backup.log— дописувати stdout у лог.2>&1— stderr теж направити в той самий лог.
Навіщо 2>&1
Щоб мати і звичайний вивід, і помилки в одному місці.
Скрипт: приклад для cron backup
#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="/backup/daily/$(date +%F)"
SRC_DIR="/home/user/data/"
# Створюємо каталог для щоденного бекапу
echo "[INFO] Creating directory for daily backup: ${BACKUP_DIR}"
mkdir -p "${BACKUP_DIR}"
# Синхронізуємо дані через rsync
echo "[INFO] Synchronizing data with rsync"
rsync -aAX --delete "${SRC_DIR}" "${BACKUP_DIR}/data/"
# Архівуємо системні конфіги
echo "[INFO] Archiving system configuration from /etc"
tar -czf "${BACKUP_DIR}/etc.tar.gz" /etc
# Показуємо приклад рядка для cron
echo "[INFO] Example cron entry for running this script at 02:00"
echo '0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1'
# Повідомляємо про успішне завершення
echo "[OK] Daily backup script finished successfully"
Документація для cron
Офіційної україномовної сторінки для cron / crontab, як правило, немає, тому нижче — англомовна документація:
Блоги / статті про cron
Для cron є багато хороших англомовних матеріалів. Україномовні якісні гіди трапляються рідко, тому даю перевірені англомовні статті:
- DigitalOcean: How to use cron to automate tasks on Ubuntu
- DigitalOcean: How to use cron to automate tasks on CentOS 8
- DigitalOcean: How to schedule routine tasks with cron and anacron
YouTube-відео про cron
Знайшов переважно англомовні відео, тому додаю їх:
10. Як правильно обирати інструмент
Використовуй cp, якщо:
- треба швидко скопіювати файл або директорію локально;
- це разова операція;
- синхронізація і інкрементальність не потрібні.
Використовуй rsync, якщо:
- потрібен регулярний backup;
- треба передавати тільки зміни;
- потрібен backup на інший сервер;
- хочеш dry-run і контроль.
Використовуй tar, якщо:
- треба один архів;
- треба зберегти snapshot на момент часу;
- треба стиснення і зручне зберігання.
Використовуй scp, якщо:
- треба разово перекинути щось по SSH.
Використовуй dd, якщо:
- потрібен raw image диска або флешки;
- треба клонування блочного пристрою;
- розумієш, що саме робиш.
Для БД використовуй:
mysqldumppg_dump
А не просто cp по живому каталогу даних.
11. Найчастіші помилки
1. Переплутаний source і destination в rsync
Перед запуском небезпечних команд:
rsync -av --delete --dry-run source/ dest/
Це дозволяє побачити майбутні зміни без реального виконання.
2. Неправильний слеш у rsync
/source/
копіює вміст директорії.
/source
копіює саму директорію.
Це одна з найчастіших причин “чому структура вийшла не така”.
3. Запуск dd не на той диск
Перед dd завжди:
lsblk
І ще раз перевіряй:
- який саме диск джерело;
- який саме диск ціль.
4. Backup без перевірки restore
Сам факт створення архіву ще не означає, що він придатний до відновлення.
Мінімальна перевірка:
tar -tvf backup.tar.gz
Краща перевірка:
розпакувати у тестовий каталог і переконатися, що дані дійсно читаються.
12. Мінімальна практична шпаргалка
Просте копіювання
cp -a /source /dest
-a— найкращий базовий варіант для копії каталогу.
Синхронізація
rsync -avh --progress /source/ /dest/
-a— архівний режим;-v— показувати процес;-h— людський формат розміру;--progress— прогрес.
Безпечна перевірка перед mirror sync
rsync -av --delete --dry-run /source/ /dest/
--delete— дзеркало;--dry-run— нічого не змінювати, тільки показати.
Архів конфігів
tar -czvf /backup/etc-$(date +%F).tar.gz /etc
-c— створити;-z— gzip;-v— verbose;-f— файл архіву.
Копія на сервер
scp -r /source user@host:/backup/
-r— рекурсивно.
Образ диска
sudo dd if=/dev/sdb of=/backup/disk.img bs=4M status=progress
if— джерело;of— ціль;bs=4M— розмір блоку;status=progress— прогрес.
Висновок
Якщо стисло, то базова здорова практика така:
- для простого локального копіювання —
cp -a - для нормального backup і sync —
rsync - для архівів і довгого зберігання —
tar - для передачі на інший сервер —
rsyncабоscp - для дисків і флешок —
dd - для баз даних — лише штатні dump-утиліти
Якщо робити по-людськи, то найчастіше робоча схема така:
- дані копіюються через
rsync; - конфіги складаються в
tar.gz; - backup запускається через
cron; - відновлення періодично тестується.