Знакомство с Linux

Александр Соловьев
Оглавление

10.Управление связями файлов

Связи позволяют давать одному физическому файлу много имен. Системой файлы распознаются по индексам файлов, которые являются уникальными идентификаторами в рамках системы. Команда ls -i выдаст вам индексы файлов. На самом деле каталог - это перечень индексов файлов с соответствующими этим индексам номерами. Каждое имя файла в каталоге привязано к конкретному индексу.

10.1 Жесткие связи

Команда ln используется для создания множества связей для одного файла. Например, скажем, что у вас есть файл foo. Используя ls -i можно посмотреть индекс этого файла.

    # ls -i foo
    22192 foo
    #

Здесь файл foo имеет в файловой системе индекс 22192. Мы можем создать новую связь для этого файла под именем bar:

    # ln foo bar

С помощью ls -i можно убедиться, что оба файла имеют один и тот же индекс.

    # ls -i foo bar
    22192 bar   22192 foo
    #

Теперь, обращаясь к foo или bar мы фактически обратимся к одном у тому же файлу. Поэтому, если мы меняем что-то в файле foo, эти же самые изменения произойдут в файле bar.

Эти связи известны, как жесткие связи (hard links), поскольку они реализуются прямой ссылкой на индекс файла. Обратите внимание, что в рамках одной файловой системы вы можете организовать только жесткие связи; символические связи (смотрите ниже) не имеют этого ограничения.

Когда вы удаляете файл командой rm, на самом деле вы удаляете только одну ссылку на файл. Если вы введете команду

    # rm foo

Удалаяется только связь, имеющая имя foo; bar будет как и прежде существовать. Файл только тогда действительно удаляется, когда на него больше нет связей. Обычно файлы имеют только одну связь, так что команда rm действительно приведет к удалению файла. Однако, если файл имеет много ссылок, применение rm приведет только к удалению одной связи; для того, чтобы удалить файл, вы должны удалить все связи на этот файл.

Команда ls -l покажет число ссылок на файл (кроме прочей информации)

    # ls -l foo bar
    -rw-r--r--   2 root     root          12 Aug  5 16:51 bar
    -rw-r--r--   2 root     root          12 Aug  5 16:50 foo
    #

Вторая колонка с цифрой ``2'' показывает число связей файла.

Самом деле оказывается, что каталоги представляют из себя справочник типа "имена-индексы". Кроме прочего, каждый каталог имеет минимум две жесткие ссылки: ``.'' (ссылка, указывающая на самого себя) и ``..'' (ссылка, указывающая на родительский каталог). В корневом каталоге (/) ссылка ``..'' указывает на сам же каталог /.

В начало страницы

10.2 Символические связи

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

Команда ln -s создаст символическую ссылку на указанный файл. Например, если мы воспользуемся командой

    # ln -s foo bar

мы создадим символьную ссылку bar, указывающую на файл foo. Если теперь используем команду ls -i, то увидим, что два файла имеют различные индексы.

    # ls -i foo bar
    22195 bar   22192 foo
    #

Однако, используя ls -l, мы видим, что файл bar имеет символический указатель на foo.

    # ls -l foo bar
    lrwxrwxrwx   1 root     root           3 Aug  5 16:51  bar -> foo
    -rw-r--r--   1 root     root          12 Aug  5 16:50 foo
    #

При символической ссылке не используются биты прав доступа (они всегда отображаются, как rwxrwxrwx). Вместо этого, права доступа к файлу, полученному символической ссылкой, определяются правами доступа к файлу, на который он ссылается (в нашем примере определяется правами файла foo).

Функционально, жесткие ссылки и символические ссылки похожи, но есть некоторые различия. Например, вы можете создать символическую ссылку на файл, который не существует; так нельзя сделать применительно к жесткой ссылке. Символические ссылки обрабатываются ядром иным образом, чем жесткие. Это скорее техническое отличие, но иногда важное. Символические ссылки полезны, поскольку они позволяют идентифицировать файл, на который они указывают; для жестких ссылок нет простого способа определить, какие файлы привязаны к одному и тому же индексу.

Ссылки используются во многих местах системы Linux. Символические ссылки особенно важны для образов разделяемых библиотек в /lib. Смотри дополнительную информацию в Разделе 4.7.2.


<<< Оглавление Страницы: 10  11 >>>