Где хранятся имена файлов в файловой системе?
Это не inode или с фактическим содержимым файла, так как у нас есть жесткая ссылка, что два имени файла могут указывать на один и тот же inode.
Строго говоря, это полностью зависит от того, о какой файловой системе вы говорите. Не все из них имеют inode (или даже каталоги).
Многие файлы имеют более одного имени в нескольких каталогах. Все файлы типа directory имеют как минимум 2 имени, одно из которых находится . внутри себя.
@ LưuVĩnhPhúc, ntfs делает .. он просто называет это MFT-записью, но это в значительной степени инод.
Я не нашел подходящего дубликата, поэтому вот ответ на ваш вопрос.
Имена файлов и каталоги
- Иноды не содержат имен файлов, только другие метаданные файла.
- Каталоги Unix представляют собой списки структур ассоциаций, каждая из которых содержит одно имя файла и один номер индекса.
- Драйвер файловой системы должен найти каталог, ищущий определенное имя файла, а затем преобразовать имя файла в правильный соответствующий номер индекса.
Таким образом, имя файла хранится в информационной структуре каталогов. Например:
Структура каталога
- inode — Inode для этой записи каталога. Это индекс в массиве inode, хранящихся в таблице Inode группы блоков. На рисунке 9.3 запись каталога для файла с именем file имеет ссылку на номер индекса i1,
- длина имени — длина этой записи каталога в байтах,
- name — имя этой записи каталога.
Вот ссылки на рисунке 9.3 выше:
Ссылки
Имя файла хранится в соответствующем каталоге («файл каталога»). Эта запись указывает на индекс.
Я не вижу, как цели символической ссылки могут попасть в записи каталога. Цель символической ссылки может быть найдена в inode символической ссылки, но не в (любой из) записи каталога, с которой связана символическая ссылка, что не имеет смысла.
@ StéphaneChazelas, сама символическая ссылка просто содержит другое имя, которое должно быть открыто вместо этого. Поиск имени начинается снова с нового имени, которое (если оно вообще существует) является записью каталога.
Имя файла хранится в структуре данных «directory», которая имеет «(string) filename» и соответствующий «(int) inode». каталог отвечает за отображение имени файла -> inode. и в ode отвечает за отображение inode -> сектора на диске.
Файл и его имена: ссылки
Каждый файл представляет собой область данных на жёстком диске компьютера или на другом носителе информации, которую можно найти по имени. В файловой системе Linux содержимое файла связывается с его именем при помощи жёстких ссылок. Создание файла с помощью любой программы означает, что будет создана жёсткая ссылка — имя файла, и открыта новая область данных на диске. Причём количество ссылок на одну и ту же область данных (файл) не ограничено, т. е. у файла может быть несколько имён.
Пользователь Linux может добавить файлу ещё одно имя (создать ещё одну жёсткую ссылку на файл) при помощи утилиты ln сокращение от англ. «link» — «соединять, связывать»). Первый параметр — это имя файла, на который нужно создать ссылку, второй — имя новой ссылки. По умолчанию ссылка будет создана в текущем каталоге.
[methody@localhost methody]$ ln examples/text text-hardlink [methody@localhost methody]$ ls -lR ./: . . . drwxr-xr-x 3 methody methody 4096 Окт 16 04:45 examples -rw-r--r-- 2 methody methody 653 Окт 6 10:31 text-hardlink ./examples: итого 92 -rw-r--r-- 1 methody methody 84718 Окт 6 10:31 -filename-with- -rw-r--r-- 2 methody methody 653 Окт 6 10:31 text
Пример 12. Создание жёстких ссылок
Мефодий создал в своём домашнем каталоге жёсткую ссылку с именем « text-hardlink » на файл « text », который находится в подкаталоге « examples ». Выведя подробный список файлов текущего каталога и его подкаталогов (« ls -lR »), Мефодий обратил внимание, что у файлов « text » и « text-hardlink » совпадают и размер (« 653 »), и время создания. Это его совершенно не удивило, поскольку он знает, что теперь « /home/methody/text-hardlink » и « /home/methody/examples/text » — это два имени одного и того же файла. В подробном описании, выведенном командой « ls -l », Мефодию остались непонятны только два первых поля. Как объяснил Гуревич, первое «слово», состоящее из знаков « -drwx », — это обозначение прав доступа к файлу, о которых речь пойдёт в лекции Права доступа. А следующее за ним число — количество жёстких ссылок на данный файл или каталог. У « text » и « text-hardlink » стоит число « 2 » — у этого файла два имени.
Доступ к одному и тому же файлу при помощи нескольких имён может понадобиться в следующих случаях:
- Одна и та же программа известна под несколькими именами.
- Доступ пользователей к некоторым каталогам в системе может быть ограничен из соображений безопасности. Однако если всё же нужно организовать доступ пользователей к файлу, который находится в таком каталоге, можно создать жёсткую ссылку на этот файл в другом каталоге.
- Современные файловые системы даже на домашних персональных компьютерах могут насчитывать до нескольких десятков тысяч файлов и тысячи каталогов. Обычно у таких файловых систем сложная многоуровневая иерархическая организация — в результате пути ко многим файлам становятся очень длинными. Чтобы организовать более удобный доступ к файлу, который находится очень «глубоко» в иерархии каталогов, также можно использовать жёсткую ссылку в более доступном каталоге.
- Полное имя некоторых программ может быть весьма длинным (например, i586-alt-linux-gcc-3.3), к таким программам удобнее обрщаться при помощи сокращённого имени (жёсткой ссылки) — gcc-3.3.
Индексные дескрипторы
Поскольку благодаря жёстким ссылкам у файла может быть несколько имён, понятно, что вся существенная информация о файле в файловой системе привязана не к имени. В файловых системах Linux вся информация, необходимая для работы с файлом, хранится в индексном декрипторе. Для каждого файла существует индексный дескриптор: не только для обычных файлов, но и для каталогов, файлов-дырок и т. д. Каждому файлу соответствует ровно один индексный дескриптор.
Каталоги в Linux — тоже файлы особого типа, см. раздел Filesystem..Система файлов: каталоги
Индексный дескриптор — это описание файла, в котором содержится:
- тип файла (обычный файл, каталог, файл-дырка и т. д.);
- права доступа к файлу;
- информация о том, кому принадлежит файл;
- отметки о времени создания, модификации, последнего доступа к файлу;
- размер файла;
- указатели на физические блоки на диске, принадлежащие этому файлу — в этих блоках хранится «содержимое» файла.
Все индексные декрипторы пронумерованы, поэтому номер индексного дескриптора — это уникальный идентификатор файла в файловой системе — в отличие от имени файла (жёсткой ссылки на него), которых может быть несколько. Узнать номер индексного дескриптора любого файла можно при помощи всё той же утилиты ls с ключом -i :
[methody@localhost methody]$ ls -i ./text-hardlink examples/text 127705 examples/text 127705 ./text-hardlink
Пример 13. Информация об индексных дескрипторах файлов
Мефодий решил поинтересоваться номерами индексных дескрипторов файла « text » и жёсткой ссылки на него « text-hardlink » — он обнаружил, что эти номера совпадают (« 127705 »), то есть этим двум именам соответствует один индексный дескриптор, т. е. один и тот же файл.
Все операции с файловой системой — создание, удаление и перемещение файлов — производятся на самом деле над индексными дескрипторами, имена нужны только для того, чтобы пользователь мог легко ориентироваться в файловой системе. (Было бы очень неудобно запоминать многозначный номер каждого нужного файла или каталога.) Более того, имя (или имена) файла не указаны в его индексном дескрипторе. В файловой системе Ext2 имена файлов хранятся в каталогах: каждый каталог представляет собой список имён файлов и номеров их индексных дескрипторов. Жёсткую ссылку (имя файла, хранящееся в каталоге) можно представлять как каталожную карточку, на которой указан номер индексного дескриптора — идентификатор файла.
жёсткая ссылка Запись вида имя файла+номер индексного дескриптора в каталоге. Жёсткие ссылки в Linux — основной способ обратиться к файлу по имени.
Символьные ссылки
У жёстких ссылок есть два существенных ограничения:
- Жёсткая ссылка может указывать только на файл, но не каталог, потому что в противном случае в файловой системе могут возникнуть циклы — бесконечные пути.
- Жёсткая ссылка не может указывать на файл на другой файловой системе. Например, невозможно создать на жёстком диске жёсткую ссылку на файл, расположенный на дискете.
Причина этого ограничения в том, что номер индексного дескриптора уникален только в рамках одной файловой системы. В разных файловых системах могут оказаться два разных файла с одинаковым номером индексного дескриптора, в результате будет невозможно установить, на какой из них указывает жёсткая ссылка.
Чтобы избежать этих ограничений, были разработаны символьные ссылки. Символьная ссылка — это просто файл, в котором содержится имя другого файла. Символьные ссылки, как и жёсткие, предоставляют возможность обращаться к одному и тому же файлу по разным именам. Кроме того, символьные ссылки могут указывать и на каталог, чего не позволяют жёсткие ссылки. Символьные ссылки называются так потому, что содержат символы — путь к файлу или каталогу.
символьная ссылка Файл особого типа (« l »), в котором содержится путь к другому файлу. Если на пути к файлу встречается символьная ссылка, система выполняет подстановку: исходный путь заменяется на тот, что содержится в ссылке.
Символьную ссылку можно создать при помощи команды ln с ключом « -s » (сокращение от «symbolic»):
[methody@localhost methody]$ ln -s examples/text text-symlink [methody@localhost methody]$ ls -li . . . 127699 drwxr-xr-x 2 methody methody 4096 Окт 4 17:12 examples 127705 -rw-r--r-- 2 methody methody 653 Сен 30 10:04 text-hardlink 3621 lrwxrwxrwx 1 methody methody 13 Окт 4 18:05 text-symlink -> examples/text [methody@localhost methody]$
Пример 14. Создание символьных ссылок
Теперь Мефодий решил создать в своём домашнем каталоге и символьную ссылку на файл text и назвать её text-symlink . Команда ls -li отобразила этот файл совсем не так, как остальные: стрелочка («->») указывает, куда направлена ссылка. Кроме того, Мефодий обратил внимание, что номер индексного дескриптора (первое поле), размер и время создания файла text-symlink отличаются text-hardlink , а также во втором поле (количество жёстких ссылок на файл) text-symlink указано « 1 ». Все эти признаки недвусмысленно свидетельствуют о том, что text-symlink и text — это разные файлы. Однако если выполнить команду cat text-symlink , то на экран будет выведено содержимое файла text .
Символьная ссылка вполне может содержать имя несуществующего файла, в этом случае ссылка будет существовать, но не будет «работать»: например, если попробовать вывести содержимое такой «битой» ссылки при помощи команды cat , будет выдано сообщение об ошибке.
Узнать, куда указывает символьная ссылка, можно при помощи утилиты realpath :
[methody@localhost methody]$ realpath text-symlink /home/methody/examples/text
Пример 15. Раскрытие символьных ссылок