ИМЯ
cp − копирование файлов и каталогов
ОБЗОР
cp
[опции]
файл
путь
cp [опции]
файл...
каталог
Опции POSIX: [−fiprR] [−−]
Дополнительные опции POSIX 1003.1-2003: [−HLP]
Опции
GNU file-utils 4.0
(краткая
форма):
[−abdfilprsuvxPR] [−S
СУФФИКС]
[−V {numbered,existing,simple}]
[−−backup=CONTROL]
[−−sparse=КОГДА]
[−−help] [−−version]
[−−]
Дополнительные
опции GNU file-utils 4.1
(краткая
форма):
[−HLP] [−−copy−contents]
[−−no−preserve]
[−−reply=HOW]
[−−remove−destination]
[−−strip−trailing−slashes]
[−−target−directory=DIR]
ОПИСАНИЕ
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 (другими словами, в новых правах будут сброшены биты sticky, 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 |
Если требуется, удаляет существующие файлы, в которые происходит копирование. (См. выше) | ||
−i |
Спрашивает, нужно ли перезаписывать существующие файлы, в которые происходит копирование. (Запрос выдается на стандартный вывод ошибок, а ответ читается со стандартного ввода. Копирование осуществляется только в случае положительного ответа). | ||
−p |
Сохраняет исходные параметры файла, такие как владелец, группа, права доступа (включая suid и sgid биты), время последней модификации и время последнего доступа к файлу. В случае, если установка владельца или группы приводит к ошибке, suid и sgid биты сбрасываются. (Заметим, что впоследствии исходный файл и его копия могут иметь разное время последнего доступа, так как операция копирования является доступом к исходному файлу). | ||
−R |
Копировать каталоги рекурсивно; правильно обрабатывать ситуации, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, копией FIFO или специального файла будет также являться FIFO или специальный файл). | ||
−r |
Копировать каталоги рекурсивно; выполнять какие-то, неопределенные стандартом действия, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, разрешается, и фактически одобряется, наличие опции −r как синонима для −R. Однако, глупое поведение, которое проявляет версия cp в GNU 4.0 не запрещается.) | ||
−− |
Завершает список опций. |
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ POSIX 2003
Стандарт POSIX 1003.1-2003 добавляет три опции, которые определяют как управлять символьными ссылками. Когда выполняется нерекурсивное копирование, символьные ссылки разименовываются (берутся те объекты на которые они указывают, вместо самой ссылки -- прим.пер.). Когда выполняется рекурсивное копирование с использованием опции −r, результаты зависят от реализации. Когда выполняется рекурсивное копирование с использованием опции −R:
−H |
Разименовывает символьные ссылки, указанные в списке параметров. Не разименовывает символьные ссылки, которые встречаются во время рекурсивного копирования, а просто копирует их. | ||
−L |
Разименовывает все символьные ссылки, как заданные в списке параметров так и встретившиеся во время рекурсивного копирования. | ||
−P |
Не разименовывает никакие символьные ссылки, ни заданные в списке параметров, ни встретившиеся во время рекурсивного копирования. Просто копирует их как символьные ссылки. |
Нет опции, работающей по умолчанию - необходимо указывать одну из опций для достижения нужного результата.
ПОДРОБНОСТИ ВЕРСИИ GNU
Обычно файлы записываются точно в том же виде, как и были прочитаны. См. ниже об опции −−sparse, который является исключением.
По умолчанию cp не копирует каталоги (см. опцию −r ).
cp обычно отвергает копирование файла в себя же, за следующим исключением: если заданы опции −−force −−backup и при этом исходный файл и файл, в который осуществляется копирование, идентичны и являются обычными файлами, то cp сделает резервную копию файла: обычную или нумерованную, как скажете. Это полезно, когда вы просто хотите сделать резервную копию существующего файла, перед тем как его изменить.
По умолчанию, символьные ссылки не разименовываются.
ОПЦИИ GNU
−a, −−archive
По возможности сохраняет структуру и атрибуты исходных файлов при копировании (но не сохраняет структуру каталогов). Эквивалентно заданию опций −dpPR.
−b |
Смотрите обсуждение резервных копий ниже. |
−−copy−contents (начиная с версии file-utils 4.1)
В file-utils 4.0 делаются глупые вещи, попытки копировать содержимое файлов устройств и FIFO во время рекурсивного копирования. Никогда не используйте эту опцию. С ней, ’cp’ может просто зависнуть, читая FIFO или /dev/tty или заполнить весь диск копируя /dev/zero.
−d |
Копирует символьные ссылки как символьные ссылки, а не файлы, на которые они указывают, и сохраняет жесткие ссылки между исходными файлами в копиях. |
В file-utils 4.0 длинная опция −−no−dereference была синонимом для опции −d, но в file-utils 4.1 она является синонимом для опции −P, в то время как опция −d эквивалентна опциям −−no−dereference −−preserve=links.
−f, −−force
Удаляет существующие файлы в случае возникновения ошибки при открытии их на чтение и никогда не спрашивает подтверждения перед тем как это сделать. (Такое поведение начинается с версии file-utils 4.1. В file-utils 4.0 эта опция была эквивалентна новой опции −−remove−destination.)
−H (начиная с версии file-utils 4.1)
См. описание POSIX выше.
−i, −−interactive
Спрашивает, нужно ли перезаписывать существующие обычные файлы.
−l, −−link
Делает жесткие ссылки вместо копирования обычных файлов (не каталогов).
−L, −−dereference (начиная с версии file-utils 4.1)
Смотрите описание POSIX выше.
−−no−preserve=АТРИБУТЫ (начиная с версии file-utils 4.1)
Не сохраняет заданные атрибуты. См. ниже опцию −−preserve.
−p, −−preserve
Защищает оригинальные параметры файла, такие как владелец, группа, права доступа и временные штампы.
−−preserve=АТРИБУТЫ (начиная с версии file-utils 4.1)
Здесь параметр АТРИБУТЫ может принимать одно из значений "mode" (права доступа), "ownership" (владелец и группа), "timestamps" (временные штампы), "links", "all" (всё перечисленное).
−P, −−no−dereference (начиная с версии file-utils 4.1)
См. выше описание POSIX. Эта опция заменяет опцию −P в file-utils 4.0, которая была синонимом опции −−parents. См. также опцию −d выше.
−−parents (начиная с версии file-utils 4.0 также −P)
Формирует
имя
каждого
копируемого
файла
путем
добавления
к имени
каталога,
в который
осуществляется
копирование,
символа
косой
черты (/) и
указанного
полного
имени
исходного
файла.
Последний
заданный
аргумент
cp должен
быть
именем
существующего
каталога.
Например,
команда
cp −−parents a/b/c existing_dir
копирует
файл a/b/c в
existing_dir/a/b/c,
создавая
отсутствующие
промежуточные
каталоги.
−r |
В file-utils 4.1: синоним опции −R. В file-utils 4.0: Копирует каталоги рекурсивно, копирует любые не-каталоги и не символьные ссылки (то есть FIFO и специальные файлы), как если бы они были обычными файлами. Это глупое поведение можно получить в file-utils 4.1 если указать опцию −−copy−contents. |
−R, −−recursive
Копирует каталоги рекурсивно, защищая не-каталоги.
−−reply=HOW (начиная с версии file-utils 4.1)
Здесь аргумент HOW может принимать одно из значений "yes", "no", "query", определяя какой ответ будет автоматически даваться на все вопросы: "да", "нет" или "запрос" пользователю соответственно.
−−remove−destination (начиная с версии file-utils 4.1)
Удаляет каждый существующий (в том месте куда происходит копирование) файл, перед копированием. В версии file-utils 4.0 эта опция неявно включалась при указании опции −f.
−−sparse=КОГДА
Разреженный (sparse) файл содержит дыры -- последовательности нулевых байт, которые не занимают физических блоков на диске; системный вызов read читает их как нули. Такой подход может как сохранить дисковое пространство, так и увеличить скорость работы, потому что многие бинарные файлы содержат много расположенных последовательно нулевых байт. По умолчанию, cp определяет дыры в исходном файле с помощью простой эвристики и делает соответствующий выходной файл также разреженным.
Параметр КОГДА может принимать следующие значения:
auto |
Поведение по умолчанию: выходной файл является разреженным, если входной файл также является разреженным. | ||
always |
Всегда делать выходной файл разреженным. Это полезно, когда входной файл расположен на файловой системе, которая не поддерживает разреженные файлы, а выходной файл будет располагаться на файловой системе, которая их поддерживает. | ||
never |
Никогда не делать выходные файлы разреженными. Если вы нашли применение для этой опции, дайте нам знать. |
−−strip−trailing−slashes (начиная с file-utils 4.1)
Удаляет все конечные символы ’´ из каждого аргумента. (Это может изменить интерпретацию аргумента, если он является символьной ссылкой на каталог.)
−s, −−symbolic−link
Делает символьные ссылки вместо копирования не-каталогов. Все имена исходных файлов должны быть полными, т. е. начинаться с символа /, за исключением случая, когда символьные ссылки будут создаваться в текущем каталоге. Эта опция генерирует сообщение об ошибке, если система не поддерживает символьные ссылки.
−S |
Суффикс резервной копии, см. ниже. |
−−target−directory=КАТАЛОГ (начиная с версии file-utils 4.1)
Задаёт каталог назначения, куда будет осуществляться копирование. Имеется в виду для использования с xargs(1), как, например, в "ls | xargs cp --target-directory=../d".
−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). Если данная опция не задана, то будет использовано значение переменной окружения VERSION_CONTROL. Если же не задано значение и этой переменной, то по умолчанию тип резервного копирования устанавливается в existing.
Данная
опция
соответствует
переменной
version-control в Emacs.
Допустимыми
значениями
МЕТОД
являются
(допускаются
однозначные
сокращения):
t, numbered
Всегда делать нумерованные резервные копии файлов.
nil, existing
Делать нумерованные резервные копии файлов для файлов, которые уже их имеют и простые резервные копии для остальных файлов.
never, simple
Всегда делать простые резервные копии.
СТАНДАРТНЫЕ ОПЦИИ GNU
−−help |
Выдать подсказку на стандартный вывод и успешно завершиться. |
−−version
Выдать информацию о версии на стандартный вывод и успешно завершиться.
−− |
Служит для обозначения конца списка опций. |
ОКРУЖЕНИЕ
При работе обычным образом используются значения переменных LANG, LC_ALL, LC_COLLATE, LC_CTYPE и LC_MESSAGES. Для GNU версии используются также переменные SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL, контролирующие создание резервных копий, как описано выше.
СОВМЕСТИМОСТЬ
POSIX 1003.2
ЗАМЕЧАНИЯ
Данная страница описывает версию cp пакета fileutils-4.1; другие версии могут иметь небольшие отличия. Исправления и дополнения присылайте по адресу aeb [AT] cwi.nl. Сообщения об ошибках в этой программе присылайте по адресу fileutils-bugs [AT] gnu.edu.
ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone [AT] perm.ru> 2003