Документация по LinuxLinuxDoc.Ru 🔍

cp - копирует файлы и каталоги

НАЗВАНИЕ
cp - копирует файлы и каталоги

СИНТАКСИС
cp [опции] файл путь
cp [опции] файл... каталог

Опции POSIX: [-fipRr] [--]

Опции GNU (краткая форма): [-abdfilprsuvxPR] [-S СУФФИКС]
[-V {numbered,existing,simple}] [--backup=CONTROL]
[--sparse=КОГДА] [--help] [--version] [--]

ОПИСАНИЕ
cp копирует файлы или, если их указать, каталоги. Вы
можете либо копировать один файл в другой заданный файл,
либо копировать несколько файлов в заданный каталог.

Если последний аргумент является существующим каталогом,
то cp копирует каждый исходный файл в этот каталог
(сохраняя имена). В противном случае, если задано только
два файла, то cp копирует первый файл во второй. Если
задано более двух аргументов, которые не являются опциями,
а последний аргумент не является именем какого-либо
каталога, это приведет к ошибке.

(Так, если /a - это каталог, то cp -r /a /b будет
копировать /a в /b/a и /a/x в /b/a/x в случае, если
каталог /b уже существует, но эта же команда будет
копировать /a в /b и /a/x to /b/x, если /b не существует.
Но если /b - обычный файл, то это копирование приведет к
ошибке.)

Права доступа к файлам и каталогам будут совпадать с теми,
что были у исходных файлов, логически умноженными (AND) на
0777 (другими словами, в новых правах будут сброшены биты
принадлежности, setuid и setgid - прим. пер.), учитывая
umask(1) пользователя (за исключением случая, когда задана
опция -p). (Но во время рекурсивного копирования
каталогов вновь создаваемые каталоги будут временно
получать права, логически сложенные (OR) со значением
S_IRWXU (0700) для того, чтобы разрешить чтение, запись и
поиск информации во вновь созданных каталогах).

При попытке файла скопировать себя ничего не произойдет
(за исключением возможного появления сообщения об ошибке).
Когда происходит копирование файла в другой существующий
файл, то он открывается с помощью вызова open(path,
O_WRONLY | O_TRUNC). Когда копирование осуществляется во
вновь создаваемый файл, то этот файл создается с помощью
вызова open(path, O_WRONLY | O_CREAT, mode). Если эти
вызовы завершаются неудачно, то считается, что файл
существует. Чтобы cp попытался его перезаписать (удалив
при помощи unlink), необходима ссылка на опцию -f. Если
удаление проходит успешно, то далее все происходит, как в
случае с новым файлом.

ОПЦИИ POSIX
POSIX имеет четыре с половиной опции:

-f Если требуется, удаляет существующие файлы, в
которые происходит копирование (cм. выше)

-i Спрашивает у пользователя, нужно ли перезаписывать
существующие файлы, в которые происходит
копирование. Выдается запрос на стандартный вывод
ошибок, а ответ читается со стандартного ввода.
Копирование осуществляется только в случае
положительного ответа.

-p Сохраняет исходные параметры файла, такие, как:
владельца, группу, права доступа (включая биты suid
и sgid), время последней модификации и время
последнего доступа к файлу. В случае, если
установка владельца или группы приводит к ошибке,
биты suid и sgid сбрасываются. (Заметим, что
впоследствии исходный файл и его копия могут иметь
указания на разное время последнего доступа, так
как операция копирования является доступом к
исходному файлу).

-R Копирует каталоги рекурсивно, правильно
обрабатывает ситуации, если попадаются объекты, не
являющиеся обычными файлами или каталогами. Т.о.,
копией FIFO или специального файла будет также
являться FIFO или специальный файл.

-r Копирует каталоги рекурсивно, выполняет какие-либо
не определенные стандартом действия (если
встречаются объекты, не являющиеся обычными файлами
или каталогами). Так, разрешается и фактически
одобряется наличие опции -r, как синонима для -R.
Однако, неверное выполнение операций, которые
производит текущая GNU версия cp (см. ниже) не
запрещается.

-- Используется для обозначения конца списка опций.

ПОДРОБНОСТИ ВЕРСИИ GNU
Обычно файлы записываются точно в том же виде, в каком
были прочитаны. См. ниже опцию --sparse, являющуюся
исключением.

По умолчанию функция не копирует каталоги (см. опцию -r).

cp обычно не позволяет производить копирование файла в
себя, если только не заданы опции --force --backup (и при
этом исходный файл и файл, в который осуществляется
копирование, идентичны и являются обычными файлами), то cp
сделает резервную копию файла, обычную или пронумерованую.
Это полезно, когда вы просто хотите сделать резервную
копию существующего файла, перед тем как его изменить.

ОПЦИИ GNU
-a, --archive
По возможности сохраняет структуру и атрибуты
исходных файлов при копировании (но не сохраняет
структуру каталогов). Эквивалентно заданию опций
-dpR.

-d, --no-dereference
Копирует сами символьные ссылки, а не файлы, на
которые они указывают, и сохраняет жесткие ссылки
между исходными файлами в копиях.

-f, --force
Удаляет существующие файлы, в которые происходит
копирование, и никогда не выводит запрос на
перезапись файлов.

-i, --interactive
Выводит запрос о перезаписи существующих файлов.

-l, --link
Делает жесткие ссылки вместо копирования файлов (не
каталогов).

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

-P, --parents
Формирует имя каждого копируемого файла путем
добавления к имени каталога (в который
осуществляется копирование), косой черты (/) и
полного имени исходного файла. Последний заданный
аргумент cp должен быть именем существующего
каталога. Например, команда
cp --parents a/b/c existing_dir
копирует файл a/b/c в existing_dir/a/b/c, создавая
отсутствующие промежуточные каталоги.

-r Копирует каталоги рекурсивно, копирует любые
не-каталоги и не- символьные ссылки (то есть FIFO и
специальные файлы), как если бы они были обычными
файлами. Это приводит к попытке прочитать данные из
каждого исходного файла и записать их в файл, в
который осуществляется копирование. Так, имея эту
опцию, функция может легко считывая FIFO или
/dev/tty. (Это ошибка. Она означает, что Вы должны
отказаться от -r и использовать -R, если не знаете,
какие файлы могут встретиться в дереве каталогов,
которое копируется. Открытие файла неизвестного
устройства, такого, как сканер, может иметь
непредсказуемые последствия в работе аппаратного
обеспечения).

-R, --recursive
Копирует каталоги рекурсивно, сохраняя специальные
файлы (см.
опцию -r выше).

--sparse=ТИП
Разреженный (sparse) файл содержит

блоков на диске; системный вызов read читает их,
как нули. Это помогает сохранить дисковое
пространство и увеличить скорость работы системы,
потому что большое количество бинарных файлов
содержат много расположенных последовательно
нулевых байтов. По умолчанию cp находит и делает
соответствующий выходной файл также разреженным.

Параметр ТИП может принимать следующие значения:

auto (по умолчанию выходной файл является
разреженным, если входной файл также
является разреженным);

always (всегда делать выходной файл разреженным.
Это полезно, когда входной файл расположен в
файловой системе, которая не поддерживает
разреженные файлы, а выходной файл будет
располагаться в файловой системе, которая их
поддерживает);

never (никогда не делать выходные файлы
разреженными. Если Вы нашли применение этой
опции, сообщите нам об этом);

-s, --symbolic-link
(делает символьные ссылки вместо копирования
не-каталогов. Все имена исходных файлов должны быть
полными, т.е. начинаться с символа /, за
исключением случая, когда символьные ссылки будут
создаваться в текущем каталоге. Эта опция
генерирует сообщение об ошибке, если система не
поддерживает символьные ссылки);

-u, --update
(запрещает копироваание не-каталогов, если они уже
существуют в том месте, куда осуществляется
копирование, и имеют такое же или более раннее
время модификации);

-v, --verbose
(выводит имя каждого файла перед его копированием);

-x, --one-file-system
(пропускает подкаталоги, которые расположены в
файловых системах, отличных от той, где начиналось
копирование).

ОПЦИИ РЕЗЕРВНОГО КОПИРОВАНИЯ GNU
Делать резервные копии файлов, которые будут перезаписаны,
изменены или уничтожены, можно с помощью GNU-версий таких
программ, как: cp, mv, ln, install и patch. При желании,
резервные копии файлов создаются с помощью опции -b. Опция
-V отвечает за то, как они будут называться. В случае,
если имя файла резервной копии создается с помощью
добавления суффикса к имени исходного файла, то суффикс
указывается с помощью опции -S.

-b, --backup
Делает резервные копии файлов, которые будут
перезаписаны или удалены.

--backup=CONTROL
(с версии fileutils-4.1.)

-S СУФФИКС, --suffix=СУФФИКС
Добавляет СУФФИКС к имени файла при создании его
резервной копии. Если данная опция не задана, то
суффикс можно задать, используя переменную
окружения SIMPLE_BACKUP_SUFFIX Если не задана ни
опция, ни переменная, то по умолчанию используется
суффикс "~".

-V МЕТОД, --version-control=МЕТОД
Определяет, как будут называться резервные копии
файлов. Аргумент МЕТОД может принимать значения
numbered (или t), existing (или nil) и never (или
simple). Если данная опция не задана, то будет
использовано значение переменной окружения VER-
SION_CONTROL. Если же не задано значение и этой
переменной, то по умолчанию тип резервного
копирования устанавливается в existing.

Данная опция соответствует переменной version-con-
trol в Emacs. Допустимыми значениями МЕТОД
являются (допускаются однозначные сокращения):

t, numbered
Всегда создавать нумерованые резервные копии
файлов.

nil, existing
Создавать нумерованые резервные копии файлов
для файлов, у которых они уже есть, и
обычные резервные копии для остальных
файлов.

never, simple
Всегда создавать обычные резервные копии.

СТАНДАРТНЫЕ ОПЦИИ GNU
--help Выводит подсказку на стандартный вывод и завершает
свою работу.

--version
Выводит информацию о версии программы на
стандартный вывод и завершает свою работу.

-- Служит для обозначения конца списка опций.

ОКРУЖЕНИЕ
" Переменные LANG, LC_ALL, LC_CTYPE и LC_MESSAGES
используются обычным образом. В GNU-версии используются
переменные SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL,
контролирующие создание резервных копий, как описано выше.

СООТВЕТСТВИЕ
POSIX 1003.2

ЗАМЕЧАНИЯ

Данная страница описывает версию cp из пакета fileu-
tils-4.0; другие версии могут немного отличаться от данной
версии. Исправления и дополнения присылайте по адресу:
aeb@cwi.nl. Отчеты об ошибках в этой программе присылайте
по адресу: fileutils-bugs@gnu.ai.mit.edu.
Читать новости Linux в Telegram
Linux - cp - копирует файлы и каталоги
Мы в соцсетях ✉