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.