# Source

Repo: https://github.com/oleksdovz/oleks-dov.work


Копіювання і бекап у Linux: базові команди, параметри та практичні приклади

У Linux є кілька базових інструментів для копіювання файлів, директорій, архівації та резервного копіювання. На практиці найчастіше використовують cp, rsync, tar, scp, dd, а для баз даних — окремі утиліти на кшталт mysqldump або pg_dump.

Цей матеріал — не просто список команд, а практична база: що робить кожна команда, що означає кожен параметр, навіщо він використовується саме так, і в яких випадках цей підхід доречний.

Зміст

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 майже немає, тому додаю перевірені англомовні матеріали:

YouTube-відео про rsync

Відео українською не знайшов, тому додаю якісні англомовні варіанти:

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

Відео українською не знайшов, тому додаю якісні англомовні варіанти:

4. Стиснуті архіви: tar.gz, tar.bz2, tar.xz

Чи є команди для стиснутих архівів вбудованими

Для tar.gz, tar.bz2 і tar.xz базова команда — це все той самий tar, але для деяких форматів потрібні додаткові утиліти стиснення.

  • gzip для -z
  • bzip2 для -j
  • xz для -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-відео про стиснуті архіви

Відео українською не знайшов, тому додаю якісні англомовні варіанти:

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

Відео українською не знайшов, тому додаю якісні англомовні варіанти:

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
  • pg_dump
    • Debian / Ubuntu: пакет postgresql-client
    • RHEL / CentOS / Rocky / AlmaLinux: пакет postgresql

Як встановити утиліти для дампів БД

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 майже немає, тому додаю перевірені англомовні матеріали:

YouTube-відео про дампи БД

Відео українською не знайшов, тому додаю англомовні варіанти для mysqldump і pg_dump:

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 є багато хороших англомовних матеріалів. Україномовні якісні гіди трапляються рідко, тому даю перевірені англомовні статті:

YouTube-відео про cron

Знайшов переважно англомовні відео, тому додаю їх:

10. Як правильно обирати інструмент

Використовуй cp, якщо:

  • треба швидко скопіювати файл або директорію локально;
  • це разова операція;
  • синхронізація і інкрементальність не потрібні.

Використовуй rsync, якщо:

  • потрібен регулярний backup;
  • треба передавати тільки зміни;
  • потрібен backup на інший сервер;
  • хочеш dry-run і контроль.

Використовуй tar, якщо:

  • треба один архів;
  • треба зберегти snapshot на момент часу;
  • треба стиснення і зручне зберігання.

Використовуй scp, якщо:

  • треба разово перекинути щось по SSH.

Використовуй dd, якщо:

  • потрібен raw image диска або флешки;
  • треба клонування блочного пристрою;
  • розумієш, що саме робиш.

Для БД використовуй:

  • mysqldump
  • pg_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;
  • відновлення періодично тестується.