Обзор возможностей
Утилита cp представляет собой фундаментальный инструмент командной строки Linux, без которого не обходится ни одно управление файловыми объектами. Настоящее руководство охватывает не только элементарный перенос данных, но и ключевые приемы системного администрирования: рекурсивное копирование деревьев каталогов, сохранение метаданных и прав доступа с помощью ключа -a, выборочную синхронизацию обновленных версий через -u, а также создание автоматических номерных резервных копий при перезаписи.
Базовое копирование и визуализация процесса (-v, -i)
Для практической отработки создадим изолированное тестовое окружение с каталогами источника и назначения, после чего перейдем в рабочую папку командой mkdir -p ~/cp_practice/src ~/cp_practice/dest && cd ~/cp_practice:

Сформируем демонстрационный текстовый документ для дальнейших манипуляций, выполнив echo "Ubuntu cp command tutorial" > src/sample.txt:

Инструмент cp отвечает за дублирование файлов и каталогов по заданному пути в среде Linux. Добавление ключа -v включает детализированный режим, наглядно отображающий путь источника и целевую точку назначения для каждого скопированного объекта.
⚙️ [Ключевые параметры утилиты]
-v : включает подробный вывод сведений о ходе операции в терминал.-i : активирует интерактивный режим, запрашивающий подтверждение перед заменой существующего файла.-r : осуществляет рекурсивный перенос каталогов вместе со всей вложенной структурой.-p : гарантирует сохранение атрибутов оригинала (владельца, группы, прав доступа и времени модификации).-a : запускает архивный режим, комплексно сохраняющий метаданные, структуру папок и символические ссылки.-u : выполняет копирование только при отсутствии целевого файла либо если исходный файл новее.-b : создает резервную копию перезаписываемого файла в целевой папке.

Убедимся в успешном создании копии файла в папке назначения с помощью команды ls -l dest/sample_copy.txt:

Чтобы проследить за поведением утилиты при обновлении данных, перезапишем исходный файл новым текстом: echo "Updated content" > src/sample.txt.

Использование параметра -u предписывает утилите выполнять перезапись исключительно в случае, если источник содержит более свежие изменения. Поскольку наш файл действительно был отредактирован, терминал подтверждает успешное обновление целевого объекта.

Рекурсивный перенос каталогов и сохранение атрибутов (-r, -a)
Для удобной визуализации файловой иерархии установим консольную утилиту tree с помощью команды apt-get update -qq && apt-get install -y tree:

Развернем макет проекта project, включающий отдельные вложенные каталоги под конфигурации и логи:

Поместим в каталог конфигураций тестовый файл app.env, запустив следующую команду:

Аналогичным образом создадим файл журнала app.log внутри подкаталога logs:

Флаг -r обеспечивает рекурсивный обход директории, перенося каталог project со всем вложенным содержимым в project_backup:

При создании резервных копий критически важно сохранять исходные права доступа, сведения о владельцах и временные штампы. Для этих целей применяется флаг -a, создающий архивный дубликат в папке project_archive:

Проверим корректность переноса всей структуры каталогов на глубину трех уровней с помощью команды tree -L 3 ~/cp_practice:

Обновление файлов (-u) и создание версионных бэкапов
Подготовим отдельную директорию для демонстрации создания инкрементных копий: mkdir -p ~/cp_practice/backup_demo/dest.

Сгенерируем исходный конфигурационный файл config.json с начальной версией данных командой echo "Version 1.0" > ~/cp_practice/backup_demo/config.json:

Скопируем созданный config.json в целевой каталог, зафиксировав базовое состояние без дополнительных параметров:

Для имитации временного разрыва выдержим секундную паузу и обновим исходный файл содержимым новой версии:

Связка опций -u и -v позволяет безопасно перезаписать файл назначения только в том случае, если оригинал имеет более позднюю дату изменения. Терминал наглядно отражает операцию обновления:

Опция --backup=numbered полностью исключает случайную потерю данных при перезаписи: старый файл в точке назначения автоматически переименовывается с добавлением порядкового номера бэкапа ~1~, а на его место записывается актуальная копия:

Убедимся в наличии обоих файлов в целевой директории через ls -la ~/cp_practice/backup_demo/dest: рядом с обновленным config.json успешно сохранился предыдущий слепок config.json.~1~:

Групповое копирование файлов и параметр целевой папки (-t)
Создадим каталог назначения для группового переноса группы файлов с помощью команды mkdir -p ~/cp_practice/bulk_demo/target:

Быстро сформируем несколько тестовых файлов отчетов через вызов touch ~/cp_practice/bulk_demo/report1.log ~/cp_practice/bulk_demo/report2.log ~/cp_practice/bulk_demo/report3.log:

Опция -t позволяет явно указать целевую директорию в начале команды, что делает массовое копирование по шаблону (*.log) более читаемым и удобным для автоматизации в конвейерах:

Проверим содержимое целевого каталога командой ls -l ~/cp_practice/bulk_demo/target — все три файла отчетов успешно перенесены:

После завершения экспериментов наведем порядок в рабочей среде и удалим все временные структуры директорий командой rm -rf ~/cp_practice:

Мы разобрали ключевые сценарии использования команды cp в Ubuntu: от повседневного копирования одиночных файлов до архивного резервирования с защитой атрибутов и версионных бэкапов. Грамотный выбор опций гарантирует целостность данных и существенно повышает скорость администрирования файловой системы Linux.