Копирование файлов
Обеспечение идентичности копии и оригинала
Внимательно присмотревшись к созданным копиям, нетрудно заметить, что некоторые их характеристики имеют мало общего с аналогичными характеристиками оригиналов. Среди этих характеристик – владелец файла, разрешения на доступ, дата и символические ссылки. Рассмотрим каждую из них подробно.
Владельцем копии файла обычно становится пользователь, выполнивший копирование, а не создатель файла-оригинала. Предположим, файл TheFile был создан пользователем user1 и помещен в каталог /tmp, чтобы пользователь user2 смог копировать его оттуда в свой исходный каталог. В списке файлов этот файл выглядит примерно так:
-rw-r-r – 1 userl users 16992 Apr 5 12:10 TheFile
После того, как пользователь user2 скопирует этот файл командой:
$ ср /tmp/TheFile – /NewFile
…он становится владельцем файла-копии.
-rw-rw-r – I user2 users 16992 Apr 5 13:10 NewFile
Файлу, созданному в некотором каталоге, назначается набор разрешений по умолчанию. Но его копия наследует не эти разрешения, а разрешения, назначенные каталогу, в который выполнялось копирование. Обратите внимание на различия в разрешениях файла-оригинала и копии в приведенном примере. Если для оригинала определено разрешение только чтения группами пользователей, то для копии разрешена запись. Изменению подверглась и дата. В копии она совпадает со временем копирования, а с датой оригинала.
Иногда в копии необходимо сохранить все атрибуты файла-оригинала. Предположим, что корневой пользователь создает на съемном диске резервную копию некоторого набора файлов. В отличие от обычного архивирования на магнитную ленту, требующего других средств, в этом случае можно воспользоваться командой ср. Но резервные копии должны полностью соответствовать оригиналам. Самое время вспомнить о флажке – р, установка которого позволяет сохранить в копии все атрибуты оригинала. Если, возвращаясь к предыдущему примеру, вести команду:
$ ср – р /tmp/TheFile
…копия будет неотличима от оригинала:
-rw-r--r – I userl users 16992 Apr 5 12:10 TheFile
Еще одна проблема, связанная с копированием файлов – копирование символических ссылок. Как было сказано в предыдущей главе, символическая ссылка – это указатель на файл из другого каталога. При помощи логических ссылок создается ситуация, при которой файл находится как бы одновременно в нескольких местах. При обращении к ссылке происходит фактически обращение к файлу, на который она указывает.
При обычном копировании символической ссылки происходит копирование не ее самой,,а файла, на который она указывает. Например, если бы в предыдущем примере TheFile было именем символической ссылки:
Irwxrwxrwx 1 userl users 16992 Apr 5 12:10 TheFile OtherFile
…то результат ввода команды:
$ ср /tmp/TheFile – /NewFile
…был бы следующим:
-rw-rw-r – 1 user2 users 16992 Apr 5 13:10 NewFile
Но что. делать, если надо копировать ссылку, а не файл, на который она указывает, чтобы результат выглядел, как в следующем примере?
Irwxrwxrwx 1 user2 users 2 Apr 5 13:10 NewFile /tmp/OtherFile
В команде ср для этого предусмотрен флажок. Флажок -d отменяет разыменование ссылки. Команда копирования принимает вид:
S ср – d /tmp/TheFile – /NewFile
Попробуем подытожить сказанное. Как создать командой ср резервную копию существующего каталога со всеми подкаталогами? Это можно сделать при помощи сочетания двух рассмотренных флажков и рекурсивного копирования. Например, по команде:
$ ср – pdR TheDirectory /backups
…создается точная копия каталога TheDirectory в каталоге /backups /TheDirectory.
$ ср -a. TheDirectory /backups