> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/linux/cp-command-tutorial.md](https://docs.f3cloud.com/ru/linux/cp-command-tutorial.md).

# Команда cp в Linux: Копирование файлов и каталогов

Как копировать файлы и папки командой cp в Linux. Синтаксис и примеры, копирование с сохранением прав, без перезаписи, со скрытыми файлами, резервные копии при перезаписи, прогресс копирования и частые ошибки.

**cp** (от английского copy) – стандартная команда Linux для копирования файлов и папок. Она есть в любом дистрибутиве, поэтому ничего устанавливать не нужно.

Ниже разберём основные приёмы, которые пригодятся при работе с сервером, от копирования одного файла до переноса сайта с сохранением прав. Примеры проверены на Debian 12, на Ubuntu и других дистрибутивах с GNU coreutils они работают так же.

***

## Синтаксис

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

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

***

## Основные примеры

```bash
# Копируем файл в папку
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/
```

***

## Полезные ключи

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

***

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

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

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

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

***

## Не перезаписать нужные файлы

```bash
# Спрашивать перед перезаписью каждого файла
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
```

***

## Скопировать только изменённые файлы

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

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

***

## Как увидеть прогресс копирования

У `cp` нет индикатора прогресса, а ключ `-v` только печатает имена файлов. Для больших файлов и папок используйте `rsync`.

```bash
# Устанавливаем rsync, если его ещё нет
apt install -y rsync

# Копируем папку с общим индикатором прогресса
rsync -a --info=progress2 /var/www/site/ /root/backup/site/
```

Копировать файлы между серверами удобно через `scp` или `rsync`, примеры есть в статье [о резервных копиях](https://docs.f3cloud.com/ru/vps/security/rezervnye-kopii.md).

***

## Частые вопросы

<details>

<summary>Ошибка «-r not specified; omitting directory»</summary>

Вы пытаетесь скопировать папку без ключа `-r`. Добавьте `-r` или `-a`, например `cp -a /var/www/site /root/backup/`.

</details>

<details>

<summary>Ошибка «No space left on device»</summary>

На диске закончилось место. Посмотрите, сколько свободно, командой `df -h`, удалите лишнее или перейдите на тариф с большим диском. Частично скопированный файл в назначении лучше удалить.

</details>

<details>

<summary>Ошибка «Permission denied»</summary>

У вашего пользователя нет прав на чтение источника или на запись в папку назначения. Выполните команду через `sudo` или проверьте права командой `ls -l`.

</details>

<details>

<summary>Можно ли прервать копирование?</summary>

Да, нажмите <kbd>Ctrl</kbd> + <kbd>C</kbd>. Уже скопированные файлы останутся на месте, а последний файл может оказаться скопирован не полностью. Чтобы потом докопировать остальное, запустите команду заново с ключом `-u` или используйте `rsync`.

</details>

<details>

<summary>После копирования сайт перестал работать</summary>

Скорее всего, у копии сменился владелец, потому что вы копировали без ключа `-a`. Верните владельца командой `chown -R www-data:www-data /var/www/site-copy` на Ubuntu и Debian или скопируйте папку заново с `-a`.

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Сайт хостинга:** [https://f3cloud.com](https://f3cloud.com/ru)
