Cp

Программа cp предназначена для копирования файлов.

cp [параметры] файл_источник файл_назначения
cp [параметры] файл_источник... директория_назначения

Существую два варианта использования программы. В первом случае указывается файл и путь, куда это файл необходимо скопировать. Например:

cp test test.bak

В этом примере содержимое файла с именем test копируется в файл с именем test.bak. Причем, если файл test.bak существовал — он создается снова. То есть старые данные, которые находились в нем теряются.

Во втором варианте, в качестве последнего аргумента используется директория. Тогда указанный файл или файлы будут скопированы с тем же самым именем в указанную директорию:

cp test test.bak anydir

Если копируется один файл, то можно указать его новое имя в этой директории:

cp test anydir/newtest

Если необходимо скопировать содержимое директории, следует использовать опцию –R или –r. В GNU реализации программы cp — эти опции являются синонимами.

Например, необходимо скопировать директорию dir1 со всем содержимым в директорию dir2. Командная строка будет выглядеть следующим образом:

cp -R dir1 dir2

Свои действия программы в Linux обычно выполняют без вывода лишней информации на экран. То есть при написании программ предусматривается, что пользователь, выполняющий ее, сначала подумал о последствиях, прежде чем запустил программу. Как уже говорилось выше, cp переписывает файл назначения. При этом на экран не выводится никаких предупреждений.

Если Вы хотите, что бы программа выводила предупреждение о том, что файл назначения существует, при ее вызове следует использовать параметр –i.

В некоторых дистрибутивах при вызове, программе по умолчанию передается параметр –i. При копировании большого количества файлов приходится отвечать на вопрос программы о каждом файле. Если Вам не хочется этого делать можно воспользоваться параметром –f. В этом случае параметр –i, если он был определен, игнорируется. Предположим, что Вам требуется произвести замену жесткого диска. В этом случае сначала необходимо скопировать все данные, находящиеся на нем во временную директорию:

cp -R hddir tmpdir

Затем происходит замена диска, его форматирование и подключение файловой системы к прежней точке монтирования. После чего данные копируются обратно:

cp -R tmpdir hddir

И Вы обнаруживаете, что программы, хранящие свои данные на этом диске, перестали работать. Для того, что бы понять почему это произошло, следует разобраться с тем «чьи в лесу шишки».

Вы работаете в системе как пользователь user1 и копируете файл, принадлежащий пользователю user2:

cp file_user2 newfile

Вопрос заключается в следующем: кому принадлежит вновь созданный файл newfile? Пользователю user1 или user2?

Ответ на этот вопрос очень простой. В Linux пользователь может создавать файлы принадлежащие только ему. То есть все создаваемые пользователем user1 файлы будут принадлежать ему. Соответственно, у файла newfile хозяином будет user1. Теперь вернемся к случаю, когда мы копировали содержимое диска. Эту операцию мог делать только суперпользователь root, так как на диске файлы принадлежали различным пользователям с различными правами доступа.

Внимание! В Linux только пользователь root имеет право доступа к любым файлам любых пользователей системы.

После того, как файлы были скопированы, все файлы в новой директории стали принадлежать пользователю root, так как при копировании именно он их создавал. Более того, всем создаваемым файлам в Linux присваиваются права доступа по умолчанию. Получается, что после копирования, все файлы принадлежат пользователю root и имеют права доступа по умолчанию. С другой стороны, программы, работающие с этими файлами, будут выполняться с правами других пользователей системы. И после копирования эти программы не смогут получить доступ к файлам.

Для того, что бы при копировании у файлов не изменялись их атрибуты: хозяин, группа, права доступа и т.д. При выполнении программы cp надо использовать опцию –p. Но учтите, что если Вы копируете файлы нескольких пользователей, эту опцию может использовать только пользователь root. Потому что — это единственный пользователь в системе кому разрешено создавать файлы, принадлежащие другим пользователям. Обыкновенные пользователи системы опцию –p могут использовать только когда они копируют файлы принадлежащие им.