Связь (link)
Связь. Как уже говорилось, каталог содержит имена файлов и указатели на их метаданные. В то же время сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе2. Такая связь имени файла с его данными называется жесткой связью (hard link). Например, с помощью команды 1п(1) мы можем создать еще одно имя (second) файла, на который указывает имя first (рис. 1.2). $ pwd /home/andrei $ In first /home/sergey/second Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls(l), файлы first и second будут отличаться только именем. Все остальные атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя — это два разных файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они ссылаются на одни и те же данные файла. Вы можете переместить один из файлов в другой каталог — все равно эти имена будут связаны жесткой связью с данными файла. Легко проверить, что удаление одного из файлов (first или second) не приведет к удалению самого файла, т.е. его метаданных и данных (если это не специальный файл устройства). Рис. 1.2. Структура файловой системы после выполнения команды ln(1). Жесткая связь имен с данными файла По определению жесткие связи указывают на один и тот же индексный дескриптор inode. Поэтому проверить, имеют ли два имени файла жесткую связь, можно, вызвав команду ls(l) с ключом -/: $ Is -i /home/andrei/first /home/sergey/second 12567 first 12567 second Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями, можно получить, просмотрев подробный листинг файлов с помощью команды Is - /: $ Is - 1 /home/sergey —rw-r—г— 2 andrei staff 7245 Jan 17 8:05 second Во второй колонке листинга указано число жестких связей данного файла. Сразу оговоримся, что жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файла. Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресует файл, который, в свою очередь, ссылается на другой файл. В результате, последний файл адресуется символической связью косвенно (рис. 1.3). Данные файла, являющегося символической связью, содержат только имя целевого файла. Проиллюстрируем эти рассуждения на примере. Команда ln(1) с ключом s позволяет создать символическую связь: $ pwd /home/andrei $ In -з first /home/sergey/symfirst $ cd /home/sergey $ Is -1 lrwxrwxrwx 1 andrei staff 15 Jan 17 8:05 symfirst->../andrei/first Как видно из вывода команды ls(l), файл symfirst (символическая связь) существенно отличается от файла second (жесткая связь). Во-первых, фактическое содержимое файла symfirst отнюдь не то же, что и у файла first или second, об этом говорит размер файла — 15 байт. На самом деле в этом файле хранится не что иное как имя файла, на которую символическая связь ссылается —../andrei/first — ровно 15 байт. Во-вторых, файл symfirst не содержит никаких ограничений на доступ (2—10 символы в первой колонке). Символическая связь является особым типом файла (об этом свидетельствует символ 'Г в первой позиции вывода ls(l)), и операционная система работает с таким файлом не так, как с обычным. Например, при выводе на экран содержимого файла symfirst появятся данные файла /home/andrei/first. $ Is -i /home/andrei/first /home/sergey/second 12567 first 12567 second Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями, можно получить, просмотрев подробный листинг файлов с помощью команды Is - /: $ Is - 1 /home/sergey —rw-r—г— 2 andrei staff 7245 Jan 17 8:05 second Во второй колонке листинга указано число жестких связей данного файла. Сразу оговоримся, что жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файла. Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресует файл, который, в свою очередь, ссылается на другой файл. В результате, последний файл адресуется символической связью косвенно (рис. 1.3). Данные файла, являющегося символической связью, содержат только имя целевого файла. Проиллюстрируем эти рассуждения на примере. Команда ln(1) с ключом s позволяет создать символическую связь: $ pwd /home/andrei $ In -з first /home/sergey/symfirst $ cd /home/sergey $ Is -1 lrwxrwxrwx 1 andrei staff 15 Jan 17 8:05 symfirst->../andrei/first Как видно из вывода команды ls(l), файл symfirst (символическая связь) существенно отличается от файла second (жесткая связь). Во-первых, фактическое содержимое файла symfirst отнюдь не то же, что и у файла first или second, об этом говорит размер файла — 15 байт. На самом деле в этом файле хранится не что иное как имя файла, на которую символическая связь ссылается —../andrei/first — ровно 15 байт. Во-вторых, файл symfirst не содержит никаких ограничений на доступ (2—10 символы в первой колонке). Символическая связь является особым типом файла (об этом свидетельствует символ 'Г в первой позиции вывода ls(l)), и операционная система работает с таким файлом не так, как с обычным. Например, при выводе на экран содержимого файла symfirst появятся данные файла /home/andrei/first. Рис. 1.3. Символическая связь Сокеты Сокеты предназначены для взаимодействия между процессами. Интерфейс сокетов часто используется для доступа к сети TCP/IP. В системах, ветви BSD UNIX на базе сокетов реализована система межпроцессного взаимодействия, с помощью которой работают многие системные сервисы, например, система печати. Мы подробнее познакомимся с сокетами в разделе "Межпроцессное взаимодействие в BSD UNIX" главы 3.
|