Что такое файл, директория, жёсткие и символьные ссылки в Mac OS X

Mac OS X, Tips & Tricks ,

жёсткие и символьные ссылкиВ этой статье мы углубимся в понимание файловой системы OS X и рассмотрим, что такое файл, директория и псевдоним, жёсткие и символьные ссылки, чем они все отличаются друг от друга и что у них общего, а также как их можно создать и удалить. Для лучшего понимания материала, изложенного в этой статье, рекомендуется ознакомиться с тем, как устроена структура файловой системы Mac OS X, а поскольку предполагается работа в командной строке, то и с основами работы в командной строке Mac OS X в Terminal.

Жёсткие и символьные ссылки и псевдонимы

В Mac OS X существует всего три вида ссылок на файл или директорию:

  • жёсткая ссылка,
  • символьная ссылка, также называемая символическая, мягкая или симлинк,
  • псевдоним, он же alias.

Жёсткие и символьные ссылки относятся к устройству файловой системы и существуют также во всех UNIX-подобных системах. Псевдонимы (alias) специфичны именно для операционной системы OS X.

Чтобы лучше понять, что такое жёсткая ссылка, стоит сначала разобраться со строением файла и директорий в файловой системе.

Что такое файл

Иллюстрация того, как две жёсткие ссылки ссылаются на inode, а inode указывает на данные файлаВ файловой системе HFS+, которую использует Mac OS X, также как и во всех UFS-совместимых файловых системах, файл состоит из трёх сущностей:

Жёсткая ссылка
Это элемент каталога, который содержит имя файла и уникальный идентификатор inode файла.
Индексный дескриптор inode
Запись, хранящая метаданные файла:

  • размер файла в байтах,
  • Id устройства, содержащего файл,
  • Id пользователя владельца файла,
  • Id группы файла,
  • информация о правах доступа к файлу,
  • дополнительная мета-информация о файле,
  • даты последних изменений и доступа к файлу,
  • число жёстких ссылок на файл,
  • указатели на блоки на диске, которые содержат непосредственно данные файла.
Данные файла
Собственно, само содержимое файла

Что такое жёсткая ссылка

Таким образом, жёсткая ссылка — это запись об имени файла в файловой системе с указанием на сами данные этого файла через inode. У файла может быть несколько жёстких ссылок с разными именами, которые указывают на один и тот же inode и одни и те же данные, и файл будет удалён только после удаления последней жёсткой ссылки.

Чтобы узнать номер inode в Терминале надо выполнить команду ls ‑i, тогда рядом с именем каждого файла будет выведен номер inode.

А чтобы увидеть содержимое inode, надо выполнить stat имя_файла.

Что такое директория

Директория имеет точно такое же строение, как и файл, за исключением того, что вместо данных файла директория содержит таблицу, в которой хранится соответствие имён файлов, находящихся в этой директории, их номерам inode.

При создании директории, в ней автоматически создаются две жёсткие ссылки, скрытые от пользователя:

  • . — это ссылка директории на саму себя,
  • .. — это ссылка на родительскую директорию.

Иллюстрация двух жёстких ссылок, которые создаются вместе с созданием директории
Также, если вы выполните для только что созданной директории команду ls ‑l, то увидите, что на неё имеется уже две жёсткие ссылки:

  • одна ссылка — это ссылка директории на саму себя,
  • другая — это ссылка на эту директорию из родительской.

Иллюстрация того, что только что созданная папка имеет две жёсткие ссылки на неё указывающие
Эти жёсткие ссылки используются для навигации по файловой системе при перемещении между директориями, например, указывая относительный путь к файлу ../../Documents/Notes, выполняя команду cd .., чтобы переместиться в родительскую директорию или запуская файл на выполнение ./scripts/some_script.sh.

Создание жёсткой ссылки

Существует два ограничения на создание жёстких ссылок:

  • создаваемая жёсткая ссылка должна находиться на том же разделе диска, что и файл, на который ссылка создаётся,
  • нельзя создать жёсткую ссылку на директорию, это ограничение было введено, чтобы не создать циклическую связь между директориями и не нарушить связь в структуре вложенных (родительских и дочерних) директорий.

Чтобы создать жёсткую ссылку на файл, необходимо в командной строке выполнить команду: ln исходный_файл имя_жёсткой_ссылки. Без параметров ln (сокращение от link) создаёт жёсткую ссылку на файл.

Иллюстрация создания жёсткой ссылки командой ln

Символьная ссылка и её создание

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

Символьные ссылки удобней и предпочтительней использовать, потому что они имеют ряд преимуществ по сравнению с жёсткими:

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

Для создания символьной ссылки необходимо использовать параметр ‑s при выполнении команды: ln ‑s исходный_файл имя_символьной_ссылки.

Иллюстрация создания жёсткой ссылки командой ln

Псевдоним (alias) и как его создать

Псевдоним — это вид ссылки на файл или директорию специфичный для Mac OS X, но он имеет очень близкий, если не полный, аналог в Windows: ярлык (shortcut). Он похож на симлинк тем, что также является лишь ссылкой на исходный объект, но отличается тем, что может использоваться лишь как способ быстрого доступа к файлу или директории, потому что при открытии псевдонима он воспринимается системой просто как ссылка, а не сам файл или директорию. К примеру, Dropbox воспримет псевдоним папки не как исходную папку, а как простой файл, и синхронизирует только него.

Создать псевдоним легко: достаточно в Finder выделить файл или директорию и нажать Command+L или в меню File выбрать пункт Make Alias (Файл → Создать псевдоним).

6 комментариев к записи “Что такое файл, директория, жёсткие и символьные ссылки в Mac OS X”

  1. Отличная работа! Лаконично, четко, доступно! Обязательно пишите еще! Умение объяснять простым языком непростые вещи есть у мало кого, у Вас оно есть, не останавливайтесь. Спасибо.

Добавить комментарий