Команда cp: копирование файлов и папок с сохранением прав

Синтаксис cp, полезные ключи, копирование сайта вместе со скрытыми файлами и правами, защита от перезаписи и что делать, когда нужен прогресс. Ubuntu, Debian, AlmaLinux.

26 октября 2026 г.·3 мин чтения·cp, coreutils, linux, files

cp — стандартная команда копирования файлов и папок. Она есть в любом дистрибутиве, ставить ничего не нужно. Ниже — приёмы, которые нужны при работе с сервером: от резервной копии конфига перед правкой до переноса сайта с сохранением владельца и прав.

Если сервера ещё нет, VPS на tanaka.host создаётся за минуту с Ubuntu или Debian, а списание идёт по дням — удобно, чтобы просто попробовать.

Синтаксис

cp [ключи] источник назначение

Если назначение — существующая папка, файл попадёт в неё под тем же именем. Если такой папки нет, cp создаст копию с указанным именем.

1. Основные примеры

# Копируем файл в папку
cp config.yml /root/backup/

# Копия рядом под другим именем, например перед правкой конфига
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

# Несколько файлов в одну папку
cp file1.txt file2.txt /root/backup/

# Папку со всем содержимым
cp -r /var/www/site /root/backup/

2. Полезные ключи

Ключ Что делает
-r Копирует папки целиком, со всем содержимым
-a Режим архива: папки рекурсивно плюс права, владелец, даты и ссылки
-p Сохраняет права, владельца и даты изменения
-i Спрашивает перед перезаписью существующего файла
-n Никогда не перезаписывает существующие файлы
-u Копирует, только если источник новее или файла в назначении нет
-b Перед перезаписью сохраняет старый файл с ~ в конце имени
-v Печатает каждый скопированный файл

3. Скопировать сайт с сохранением прав

Для сайтов и конфигов используйте -a. У копии сохранятся владелец, права и даты, и веб-сервер сможет работать с ней без дополнительной настройки.

# Содержимое папки сайта вместе со скрытыми файлами
cp -a /var/www/site/. /var/www/site-copy/

Скрытые файлы. Точка в конце пути /var/www/site/. означает «всё содержимое папки», включая .htaccess и .env. Не используйте для этого шаблон .* — в старых версиях bash он захватывает и .., родительскую папку, и cp скопирует намного больше, чем вы хотели.

4. Не перезаписать нужное

# Спрашивать перед каждой перезаписью
cp -i new.conf /etc/app/app.conf

# Не трогать существующие файлы, добавить только недостающие
cp -rn /root/backup/site/. /var/www/site/

# Перезаписать, но сохранить старую версию как app.conf~
cp -b new.conf /etc/app/app.conf

5. Скопировать только изменённое

# Обновляем копию: переносятся только новые и изменённые файлы
cp -au /var/www/site/. /root/backup/site/

Для регулярных копий и больших папок удобнее rsync: он делает то же самое, передаёт только изменённые блоки и показывает прогресс.

Прогресс копирования

У cp индикатора нет, -v только печатает имена. Для больших объёмов — rsync:

sudo apt install -y rsync
rsync -a --info=progress2 /var/www/site/ /root/backup/site/

Между серверами — scp или тот же rsync, примеры в статье о резервных копиях VPS.

Частые ошибки

-r not specified; omitting directory. Папка без -r. Добавьте -r или -a: cp -a /var/www/site /root/backup/.

No space left on device. Диск кончился. df -h покажет, сколько есть; удалите лишнее или возьмите тариф с большим диском. Частично скопированный файл в назначении лучше удалить.

Permission denied. Нет прав на чтение источника или запись в назначение. Через sudo, либо проверьте права ls -l — подробнее в статье про chmod и chown.

Можно ли прервать. Ctrl+C. Скопированное останется, последний файл может оказаться неполным. Докопировать — та же команда с -u или rsync.

После копирования сайт перестал работать. У копии сменился владелец, потому что копировали без -a. Верните его: chown -R www-data:www-data /var/www/site-copy на Ubuntu и Debian (на AlmaLinux — nginx или apache), либо скопируйте заново с -a.