С чего начать Первые шаги трек · 15 ступеней
Linux Labs

cp — копирование файлов и каталогов

5 мин Ubuntu 24.04 · GNU coreutils 9.4

Команда cp копирует файлы и каталоги: с подтверждением перезаписи, с сохранением прав и времени, рекурсивно.

Шпаргалка

10 команд Версия для печати
  • cp app.conf app.conf.bak копия рядом с другим именем
  • cp app.conf /tmp/ в каталог под тем же именем
  • cp a.txt b.txt docs/ несколько файлов в каталог
  • cp -r project project-copy каталог целиком
  • cp -a /etc/nginx ~/nginx-backup с правами, владельцем, временем
  • cp -i app.conf /etc/app.conf спросить перед перезаписью
  • cp -n app.conf /etc/app.conf не перезаписывать существующий
  • cp -u *.conf /srv/conf/ только если источник новее
  • cp -v a.txt b.txt печатать, что скопировано
  • cp -r project/. backup/ содержимое каталога, не сам каталог

Обзор

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

text
student@ubuntu:~$ cp -v app.conf app.conf.bak
'app.conf' -> 'app.conf.bak'

Без ключей cp копирует только файлы: каталог он пропустит. Каталог копируют с -r (рекурсивно) или -a (архивно — ещё и права, владелец, время, ссылки как ссылки).

Существующий файл назначения cp перезаписывает молча, без вопроса. Когда цена ошибки высока, добавляй -i или -n.

Ключи

10

Ключи cp и mv во многом общие: -i, -n, -u, -v, -b, -t. Полный список — man cp.

Ключ Что делает Пример
-r Копировать каталоги рекурсивно, со всем содержимым (то же — -R). cp -r project project-copy
-a Архивный режим — рекурсивно, с правами, владельцем, временем и ссылками. cp -a /etc/nginx ~/nginx-backup
-i Спрашивать перед перезаписью существующего файла. cp -i app.conf /etc/app.conf
-n Не перезаписывать существующие файлы. cp -n app.conf /etc/app.conf
-u Копировать, только если источник новее назначения или назначения нет. cp -u *.conf /srv/conf/
-v Печатать каждую копию — 'a' -> 'b'. cp -v a.txt b.txt
-p Сохранить права, владельца и время изменения. cp -p app.conf app.conf.bak
-b Перед перезаписью сохранить старый файл с ~ в конце имени. cp -b new.conf app.conf
-t dir Каталог назначения первым аргументом — удобно с find и xargs. cp -t /srv/www/ index.html style.css
--parents Воссоздать путь источника внутри каталога назначения. cp --parents etc/app.conf /backup/

Ничего не найдено. Попробуй запрос короче.

Рецепты

5

Резервная копия конфига перед правкой

bash
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
diff /etc/ssh/sshd_config.bak /etc/ssh/sshd_config   # что изменил

-a сохраняет владельца и права, поэтому копию можно вернуть на место как есть.

Каталог в существующий каталог и «внутрь»

bash
cp -r src dst        # dst есть → dst/src; нет → dst станет копией
cp -r src/. dst/     # содержимое src прямо в dst

Одна и та же команда даёт разный результат в зависимости от того, существует ли dst. Проверь итог: ls dst.

Скопировать много файлов в один каталог

bash
cp -t /srv/www/ index.html style.css app.js   # каталог — первым
find . -name '*.conf' -exec cp -t /tmp/conf/ {} +   # найденные find

Копия с запасом: оставить прежнюю версию

bash
cp -b new.conf app.conf      # старый app.conf станет app.conf~

Между машинами

cp работает только в пределах одной машины. По сети копируют rsync или scp (см. ssh-client).

Неполадки

6

cp: -r not specified; omitting directory

Источник — каталог, а -r не указан. Добавь -r или -a: cp -a src dst.

cp: cannot stat 'x': No such file or directory

Источника нет по этому пути. Проверь pwd и имя через ls; допиши путь клавишей Tab.

cp: cannot create regular file: Permission denied

Нет права записи в каталог назначения. Посмотри ls -ld каталог; системные каталоги — через sudo cp.

Копия принадлежит root, а не пользователю

sudo cp создаёт новые файлы от root. Сохрани владельца исходника ключом -a или поправь владельца: sudo chown student:student файл — см. chmod-chown.

Права или время у копии другие

Без -p или -a копия получает текущее время и права по маске umask. Для резервных копий бери cp -a.

No space left on device

Место кончилось на разделе назначения. df -h путь покажет, сколько свободно, — см. disk-usage.

Опасно

2

Молчаливая перезапись

cp new.conf /etc/app.conf заменит рабочий конфиг без вопроса, и прежний текст не вернуть. Сначала копия (cp -a … .bak), потом замена — или cp -i.

cp -r в существующий каталог

Если каталог назначения уже есть, cp -r src dst положит копию внутрь — dst/src. Сценарий, рассчитанный на «dst станет копией», при повторном запуске начнёт плодить вложенные каталоги.

См. также

  • mv — переместить или переименовать вместо копирования.
  • rm — удалить лишнюю копию.
  • ls — проверить результат копирования.
  • rsync — копирование больших деревьев и по сети.
  • chmod-chown — поправить права и владельца у копии.
  • files-basics — обзор базовых команд с файлами.
Загрузка…