• Иллюстрированный самоучитель по Linux

    Копирование файлов

    Обеспечение идентичности копии и оригинала

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

    Владельцем копии файла обычно становится пользователь, выполнивший копирование, а не создатель файла-оригинала. Предположим, файл 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
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.