Копирование файлов в Linux: команда cp — руководство

Что такое команда cp в Linux?
cp — это утилита командной строки в Unix/Linux для копирования файлов и каталогов. Она установлена практически во всех дистрибутивах и часто встречается в руководствах по управлению файлами.
Определение: cp копирует содержимое файла или дерева каталогов в новую позицию. Простая синтаксическая модель делает её доступной даже новичкам.
Важно: работа с cp выполняется в текущем каталоге терминала или в том, куда вы перейдёте командой cd.
Синтаксис cp
Общий синтаксис прост:
cp [опции] <источник>... <назначение>Можно указать несколько источников, но только одно назначение. Назначение может быть каталогом (куда поместятся копии), новым именем файла или и тем, и другим.
Копирование отдельных файлов
Чтобы создать копию файла в той же папке с другим именем:
cp file.txt newfile.txtЧтобы скопировать файл в подкаталог:
cp file.txt Backup/newfile.txtЕсли не нужно переименовывать файл, укажите только каталог назначения:
cp file.txt BackupДля копирования нескольких файлов перечислите все источники перед назначением:
cp file1.txt file2.txt file3.txt BackupУдобно использовать подстановочные символы (wildcards), например, чтобы скопировать все .txt файлы:
cp *.txt BackupПодстановки работают, когда у файлов есть общая часть имени или расширение.
Копирование каталогов
Чтобы скопировать каталог со всем содержимым, используйте ключ -R (рекурсивно):
cp -R Files BackupЭто создаст в Backup копию папки Files.
Если нужно скопировать только содержимое каталога, без самой папки, используйте -T вместе с -R:
cp -RT Files BackupПолезные опции cp
Ниже перечислены часто используемые параметры:
- -v — verbose, выводит подробности о совершаемых действиях.
cp -v file.txt newfile.txt- -i — interactive, спрашивает подтверждение перед перезаписью существующих файлов.
cp -i file.txt newfile.txt- -p — preserve, сохраняет атрибуты: права, владельца и временные метки.
cp -p file.txt newfile.txt- -a — archive, эквивалентно -dR –preserve=all; полезно для точного зеркалирования, включая символьные ссылки и права.
cp -a SourceDir DestDir- -u — update, копирует только если источник новее или целевой файл отсутствует.
cp -u *.txt BackupЧастые ошибки и когда cp не подходит
- Символьные ссылки: простое cp без -a скопирует содержимое ссылок, а не сами ссылки. Чтобы сохранить ссылки как ссылки, используйте -a.
- Специальные файлы: устройства и FIFO могут быть неправильно скопированы без специальных опций, лучше использовать tar или rsync при переносе системных деревьев.
- Большие объёмы данных и сеть: при копировании по сети или для инкрементных бэкапов rsync предпочтительнее — он экономит пропускную способность и время.
- ACL и расширенные атрибуты: для сохранения xattr используйте cp –preserve=xattr или rsync -X.
Альтернативные инструменты
- rsync — для зеркалирования, инкрементных копий и копий по сети. Очень гибкий и эффективный.
- tar — упаковка в архив и распаковка подходит для переноса дерева файлов как единицы.
- scp/sftp — простые средства для копирования по SSH (scp устарела, лучше использовать sftp или rsync по ssh).
- dd — побитовая копия устройств и разделов.
Когда выбрать:
- Для локальных простых копий достаточно cp.
- Для резервных копий и сетевых переносов — rsync.
- Для точного клонирования разделов — dd.
Методика безопасного копирования (мини-SOP)
- Оцените объём и тип данных (много мелких файлов, большие файлы, символьные ссылки).
- Выберите инструмент: cp для простого, rsync для большого/инкрементного, tar для единой упаковки.
- Выполните тестовый прогон на небольшой выборке с -v и -n (для rsync) или -i для cp.
- Проверьте права и владельца целевых файлов (ls -l).
- При необходимости используйте -p или -a, чтобы сохранить метаданные.
- Документируйте команду и время операции.
Критерии приёмки
- Все необходимые файлы существуют в целевой директории.
- Размеры и временные метки совпадают с источником, если это важно.
- Права и владельцы сохранены при необходимости.
Чек-листы для ролей
Системный администратор:
- Использовать rsync для системных бэкапов.
- Проверить права и xattr (–preserve=xattr).
- Тестировать на staging перед продакшеном.
Разработчик:
- Для простых копий локальных файлов использовать cp -v.
- Для синхронизации проектов применять rsync –exclude .git.
Оператор резервного копирования:
- Автоматизировать с проверкой контрольных сумм.
- Логи и уведомления об ошибках.
Шпаргалка команд
# Копировать файл в той же папке с новым именем
cp file.txt newfile.txt
# Копировать в подкаталог
cp file.txt Backup/
# Копировать несколько файлов в папку
cp a.txt b.txt c.txt Backup/
# Рекурсивно копировать папку
cp -R SourceDir DestDir
# Сохранить атрибуты и ссылки
cp -a SourceDir DestDir
# Подтверждение при перезаписи
cp -i file.txt Dest/
# Показать, что делает команда
cp -v file.txt Dest/
# Копировать только если источник новее
cp -u *.txt Backup/
# Сохранить расширенные атрибуты (если поддерживается)
cp --preserve=xattr -a SourceDir DestDirСравнение cp и rsync (кратко)
- cp: простая локальная копия, быстрое понимание, неэффективен при больших объёмах и по сети.
- rsync: инкрементная синхронизация, поддержка сети, экономит трафик, сложнее в настройке.
Таблица сравнения (кратко):
- Скорость на локальном диске: cp ≈ rsync (без компрессии).
- Инкремент: cp — нет, rsync — да.
- Сохранение xattr/ACL: rsync поддерживает -X/–acls, cp имеет –preserve.
- По сети: rsync лучше.
Примеры реальных команд
Копирование каталога с сохранением всех атрибутов и выводом процесса:
cp -a -v /var/www /backup/www-$(date +%F)Копирование только новых или обновлённых файлов:
cp -u *.log /backup/logsИнкрементная синхронизация с удалённым сервером (альтернатива cp для сети):
rsync -avz --delete /local/dir/ user@remote:/backup/dir/Безопасность и права доступа
- Операции копирования выполняются с правами текущего пользователя. Для доступа к файлам другого пользователя используйте sudo.
- Проверяйте и корректируйте права после копирования: chmod и chown.
- Для чувствительных данных думайте о шифровании при передаче по сети.
Частые сценарии отказа и обходные решения
- Файлы меняются во время копирования: остановите сервис или используйте снапшоты/LVM.
- Недостаток места на диске: проверяйте df -h перед запуском массовых копий.
- Плохая производительность из-за большого числа мелких файлов: упакуйте в tar, затем распакуйте на месте назначения.
Короткая памятка (cheat sheet)
- Простая копия: cp src dst
- Рекурсивно: cp -R
- Сохранить права: cp -p или cp -a
- Подтверждение: cp -i
- Показать действия: cp -v
Полезные советы и эвристики
- Для безопасных бэкапов автоматизируйте rsync + проверку контрольных сумм.
- Используйте -n или –dry-run (для rsync) при настройке сложных операций.
- Предпочитайте -a для клонирования папок, чтобы минимизировать потерю метаданных.
Important: Перед массовыми операциями всегда делайте тестовую прогонку и резервную копию важных данных.
Итог
Команда cp — быстрый и прямой инструмент для копирования файлов в Linux. Она отлично подходит для локальных и мелкообъёмных задач. Для более сложных, сетевых или инкрементных сценариев используйте rsync или tar. Следуйте методике: тест > копия > проверка прав и целостности.
Ключевые шаги:
- Понимайте объём и тип данных.
- Выбирайте правильный инструмент (cp, rsync, tar).
- Тестируйте и проверяйте метаданные.
Похожие материалы
Как включить iCloud Photos и синхронизировать фото
Aitum Vertical Plugin для OBS — вертикальный стриминг
Как отформатировать SD‑карту на Mac
Перенос чатов WhatsApp с iPhone на Android
Как снимать ночью: избавляемся от смаза