<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Inode</id>
	<title>Inode - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Inode"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Inode&amp;action=history"/>
	<updated>2026-07-17T04:03:06Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=Inode&amp;diff=16877&amp;oldid=prev</id>
		<title>imported&gt;Gromolyak: /* Описание индексного дескриптора в POSIX */</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Inode&amp;diff=16877&amp;oldid=prev"/>
		<updated>2026-02-25T07:36:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Описание индексного дескриптора в POSIX&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lowercase|inode}}&lt;br /&gt;
В [[Информатика|информатике]] &amp;#039;&amp;#039;&amp;#039;inode&amp;#039;&amp;#039;&amp;#039; (произносится &amp;#039;&amp;#039;а́йнод&amp;#039;&amp;#039; или инод), &amp;#039;&amp;#039;&amp;#039;индексный дескриптор&amp;#039;&amp;#039;&amp;#039; — это [[структура данных]] в традиционных для ОС [[UNIX]] [[файловая система|файловых системах]] (ФС), таких как [[Unix File System|UFS]], [[ext4]]. В этой структуре хранится [[Метаданные|метаинформация]] о стандартных [[компьютерный файл|файлах]], [[каталог (файловая система)|каталогах]] или других объектах файловой системы, кроме непосредственно данных и имени.&lt;br /&gt;
&lt;br /&gt;
== Подробности ==&lt;br /&gt;
При создании файловой системы создаются также и структуры данных, содержащие информацию о файлах. Каждый файл имеет свой индексный дескриптор, идентифицируемый по уникальному номеру (часто называемому &amp;quot;i-номером&amp;quot; или &amp;quot;айнодом&amp;quot;), в файловой системе, в которой располагается сам файл.&lt;br /&gt;
&lt;br /&gt;
Индексные дескрипторы хранят информацию о файлах, такую, как принадлежность владельцу (пользователю и группе), режим доступа (чтение, запись, запуск на выполнение) и тип файла. Существует определённое число индексных дескрипторов, которое указывает максимальное количество файлов, допускаемое определённой файловой системой. Обычно при создании файловой системы примерно 1 % её объёма выделяется под индексные дескрипторы.&lt;br /&gt;
&lt;br /&gt;
Термин &amp;#039;&amp;#039;индексный дескриптор&amp;#039;&amp;#039; обычно указывает на айноды [[Блочные устройства|блочных устройств]], управляющие постоянными файлами, каталогами и, по возможности, [[символьная ссылка|символьными ссылками]]. Подобная концепция играет важную роль при восстановлении повреждённых файловых систем.&lt;br /&gt;
* Номер индексного дескриптора заносится в таблицу индексных дескрипторов в определённом месте устройства; по номеру индексного дескриптора ядро системы может считать содержимое айнода, включая указатели данных и прочий контекст&amp;lt;!--исправленно с контент--&amp;gt; файла.&lt;br /&gt;
* Номер индексного дескриптора файла можно посмотреть, используя команду &amp;lt;tt&amp;gt;[[ls]] -i&amp;lt;/tt&amp;gt;, а команда &amp;lt;tt&amp;gt;ls -l&amp;lt;/tt&amp;gt; покажет информацию, хранящуюся в индексном дескрипторе.&lt;br /&gt;
* Файловые системы, не относящиеся к традиционным ФС UNIX, такие как [[ReiserFS]], могут обходиться без таблицы индексных дескрипторов, но должны хранить аналогичную информацию схожим способом, обеспечивающим эквивалентную функциональность. Такие данные могут называться [[Статистическая информация|статистической информацией]], по аналогии со &amp;lt;code&amp;gt;[[Stat (Unix)|stat]]&amp;lt;/code&amp;gt; — [[Системный вызов|системным вызовом]], поставляющим информацию программам.&lt;br /&gt;
&lt;br /&gt;
Имена файлов и содержимое каталогов:&lt;br /&gt;
* индексные дескрипторы не хранят имена файлов, только информацию об их содержимом;&lt;br /&gt;
* каталоги в Unix являются списками &amp;#039;ссылочных&amp;#039; структур, каждая из которых содержит одно имя файла и один номер индексного дескриптора;&lt;br /&gt;
* ядро должно просматривать каталог в поисках имени файла, затем конвертировать это имя в соответствующий номер индексного дескриптора, в случае успеха;&lt;br /&gt;
* содержимое файлов располагается в &amp;#039;&amp;#039;блоках данных&amp;#039;&amp;#039;, на которые ссылаются индексные дескрипторы.&lt;br /&gt;
&lt;br /&gt;
Представление ядром этих данных в памяти называется &amp;lt;code&amp;gt;struct inode&amp;lt;/code&amp;gt; (структурным айнодом) (в ОС [[Linux]]). В [[BSD]] системах используется термин &amp;lt;code&amp;gt;vnode&amp;lt;/code&amp;gt;, буква &amp;#039;&amp;#039;&amp;#039;v&amp;#039;&amp;#039;&amp;#039; в котором указывает на [[виртуальная файловая система|виртуальную файловую систему]] уровня ядра.&lt;br /&gt;
&lt;br /&gt;
== Описание индексного дескриптора в POSIX ==&lt;br /&gt;
Стандарты [[POSIX]] описывают поведение файловой системы как потомка традиционных файловых систем UNIX — UFS. Регулярные файлы должны иметь следующие атрибуты:&lt;br /&gt;
* длину файла в [[байт]]ах;&lt;br /&gt;
* [[ID устройства|идентификатор (ID) устройства]] (это идентифицирует устройство, содержащее файл);&lt;br /&gt;
* [[идентификатор пользователя (Unix)|ID пользователя]], являющегося владельцем файла;&lt;br /&gt;
* [[идентификатор группы (Unix)|ID группы]] файла;&lt;br /&gt;
* [[доступ файловой системы|&amp;#039;&amp;#039;режим&amp;#039;&amp;#039; файла]], определяющий, какие пользователи могут считывать, записывать и запускать файл;&lt;br /&gt;
* [[Timestamp]] указывает дату последнего изменения айнода (&amp;lt;tt&amp;gt;ctime&amp;lt;/tt&amp;gt;, &amp;#039;&amp;#039;change time&amp;#039;&amp;#039;), последней модификации содержимого файла (&amp;lt;tt&amp;gt;mtime&amp;lt;/tt&amp;gt;, &amp;#039;&amp;#039;modification time&amp;#039;&amp;#039;), и последнего доступа (&amp;lt;tt&amp;gt;atime&amp;lt;/tt&amp;gt;, &amp;#039;&amp;#039;access time&amp;#039;&amp;#039;);&lt;br /&gt;
* [[счётчик ссылок]] указывает количество [[жесткая ссылка|жестких ссылок]], указывающих на индексный дескриптор;&lt;br /&gt;
* указатели на блоки диска, хранящие содержимое файла {{подробнее|структура указателя в айноде}}.&lt;br /&gt;
&lt;br /&gt;
Системный вызов &amp;lt;code&amp;gt;[[stat (Unix)|stat]]&amp;lt;/code&amp;gt; считывает номер индексного дескриптора файла и некоторую информацию из него.&lt;br /&gt;
&lt;br /&gt;
== Этимология &amp;#039;&amp;#039;inode&amp;#039;&amp;#039; ==&lt;br /&gt;
Что в названии «и-нод» обозначает «и» — неизвестно. В ответ на вопрос об этом один из создателей Unix [[Ритчи, Деннис|Деннис Ритчи]] ответил:&lt;br /&gt;
{{начало цитаты}}Честно говоря, я тоже не знаю. Это был всего лишь термин, который мы начали использовать. Из-за немного необычной структуры файловой системы, при которой информация о доступе к файлам хранится в виде плоского массива на диске, отдельно от всей информации об иерархии каталогов, лучшее, что я могу предположить (для «и») — это «индекс». Таким образом, и-номер являлся индексом в этом массиве, и-нод — выбираемым элементом массива. (Приставка «и-» использовалась в первой версии руководства; со временем дефис перестали употреблять).&lt;br /&gt;
{{oq|en|In truth, I don&amp;#039;t know either. It was just a term that we started to use. &amp;quot;Index&amp;quot; is my best guess, because of the slightly unusual file system structure that stored the access information of files as a flat array on the disk, with all the hierarchical directory information living aside from this. Thus the the i-number is an index in this array, the i-node is the selected element &lt;br /&gt;
of the array. (The &amp;quot;i-&amp;quot; notation was used in the 1st edition manual; its hyphen became gradually dropped).&lt;br /&gt;
}}&lt;br /&gt;
{{конец цитаты&lt;br /&gt;
 |источник={{cite web&lt;br /&gt;
 |url         = http://lkml.indiana.edu/hypermail/linux/kernel/0207.2/1182.html&lt;br /&gt;
 |title       = What does the &amp;quot;i&amp;quot; in inode stand for? Dennis Ritchie doesn&amp;#039;t know either.&lt;br /&gt;
 |access-date=2010-08-03&lt;br /&gt;
 |archive-url  = https://www.webcitation.org/619jSqQWH?url=http://lkml.indiana.edu/hypermail/linux/kernel/0207.2/1182.html&lt;br /&gt;
 |archive-date = 2011-08-23&lt;br /&gt;
 |url-status     = dead&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
То есть &amp;#039;&amp;#039;index node&amp;#039;&amp;#039; (индексный узел, элемент) → &amp;#039;&amp;#039;index-node&amp;#039;&amp;#039; → &amp;#039;&amp;#039;i-node&amp;#039;&amp;#039; → &amp;#039;&amp;#039;inode&amp;#039;&amp;#039; — постепенное укорочение и слияние словосочетания &amp;#039;&amp;#039;index node&amp;#039;&amp;#039;. По другим версиям, начальная буква &amp;#039;&amp;#039;i&amp;#039;&amp;#039; в &amp;#039;&amp;#039;i&amp;#039;&amp;#039;-node может происходить, в том числе, от слов information (информация), incore, indirection.&lt;br /&gt;
&lt;br /&gt;
== Значение ==&lt;br /&gt;
Файловые системы, использующие индексные дескрипторы, имеют несколько неочевидных особенностей:&lt;br /&gt;
* Если несколько имен указывают на один и тот же индексный дескриптор ([[Жёсткая ссылка|жёсткие ссылки]]), то все имена считаются эквивалентными. Первое созданное имя никаким особым положением не обладает. Это отличается от поведения похожих [[Символьная ссылка|символьных ссылок]], которые зависят от первоначального имени.&lt;br /&gt;
* Индексный дескриптор может совсем не иметь ссылок. Обычно такой файл должен быть удален с диска (именно поэтому программы типа [[undelete]] в [[Unix]] не позволяют установить точное имя удалённого файла), а его ресурсы должны освободиться (это нормальный процесс удаления файла), но если какие-либо процессы ещё не закрыли файл, то они могут удерживать доступ к нему, а файл будет окончательно удален только после того, как будет закрыто последнее обращение к нему. Это относится и к исполняемым копиям, которые удерживаются открытыми [[процесс (информатика)|процессами]], их выполняющими. По этой причине при обновлении программы рекомендуется удалять старую копию и создавать новый индексный дескриптор для обновлённой версии, чтобы никакие экземпляры старой версии не продолжали выполняться.&lt;br /&gt;
* Обычно нет возможности сопоставить открытый файл и [[Имя файла|его имя]], по которому он был открыт. Операционная система преобразует имя файла в номер индексного дескриптора при первом же удобном случае, а затем «забывает» про использованное имя файла. Таким образом, функции библиотек [[direct.h|&amp;lt;tt&amp;gt;getcwd()&amp;lt;/tt&amp;gt;]] и [[getwd|&amp;lt;tt&amp;gt;getwd()&amp;lt;/tt&amp;gt;]] начинают искать в [[Родительский каталог|родительском каталоге]] файл с индексным дескриптором, совпадающим с файлом [[Текущий каталог|«&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;» каталога]]; затем ищут родительский каталог для текущего, и так далее пока не достигнут [[Корневой каталог|«&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;» каталога]]. [[UNIX System V#SVR4|SVR4]] и [[Linux]] используют дополнительную информацию (поля) в индексных дескрипторах для избежания подобного неудобства.&lt;br /&gt;
* Ранее было возможно применять жёсткие ссылки на каталоги. Это делало структуру каталогов ориентированным [[граф (математика)|графом]] вместо [[Дерево (теория графов)|дерева]] (то есть [[Связный граф|связного графа]] с N-1 ребрами и N узлами). Например, каталог имел возможность быть собственным родителем. Современные файловые системы не допускают подобных двусмысленностей, за исключением корневого каталога, который считается собственным родителем.&lt;br /&gt;
* Номер индексного дескриптора файла остается неизменным при перемещении файла в другой каталог на том же устройстве или при [[Дефрагментация|дефрагментации]] диска. Поэтому перемещения или каталога, содержащего файл, или его содержимого (или и того и другого вместе) недостаточно для предотвращения доступа к нему из уже запущенного процесса, если у процесса есть возможность вычислить номер индексного дескриптора. Это также обусловливает то, что полностью управляемое поведение индексных дескрипторов невозможно реализовать на множестве файловых систем, не произошедших от стандартной файловой системы UNIX, таких как [[File Allocation Table|FAT]] и его преемников, которые не имеют возможности хранить подобную постоянную &amp;#039;неизменность&amp;#039;, когда каталог файла и его содержимое перемещается.&lt;br /&gt;
&lt;br /&gt;
== Практическое применение ==&lt;br /&gt;
Множество [[Компьютерная программа|программ]], используемых [[Системный администратор|системными администраторами]] в [[Операционная система|операционной системе]] (ОС) UNIX, часто использует номера индексных дескрипторов для обозначения файлов. Популярная встроенная программа проверки [[Жесткий диск|жестких дисков]] &amp;lt;code&amp;gt;[[fsck]]&amp;lt;/code&amp;gt; или команда &amp;lt;code&amp;gt;[[pfiles]]&amp;lt;/code&amp;gt; могут послужить в данном случае примерами, так как у них есть необходимость естественным образом конвертировать номера индексных дескрипторов в [[Путь (информатика)|пути]] [[Компьютерный файл|файлов]] и обратно. Это может быть дополнено использованием программы поиска файлов &amp;lt;code&amp;gt;[[find]]&amp;lt;/code&amp;gt; с ключом &amp;lt;code&amp;gt;-inum&amp;lt;/code&amp;gt; или командой &amp;lt;code&amp;gt;[[ls]]&amp;lt;/code&amp;gt; с соответствующим ключом (которым на большинстве платформ является &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Динамическое выделение inode ==&lt;br /&gt;
Одна из проблем — inode могут «закончиться». В этом случае нельзя будет создать новый файл или каталог на устройстве, даже если там достаточно свободного места. При этом уже имеющиеся файлы можно полноценно изменять.&lt;br /&gt;
&lt;br /&gt;
Таким образом, файловые системы можно разделить на две группы&lt;br /&gt;
* Статическое количество inode: ext2-ext4 …&lt;br /&gt;
* Динамическое количество inode: jfs, xfs, btrfs, zfs …&lt;br /&gt;
&lt;br /&gt;
=== Проблема [[Проблема 2038 года|Y2038]] ===&lt;br /&gt;
Некоторые файловые системы, основанные на индексных дескрипторах, защищены от проблемы Y2038 (известной как [[Unix time]]) с учётом предотвращения «переполнения» даты, но далеко не все. При настройке сервера отказ от использования подобных [[POSIX]]-несовместимых файловых систем становится более важным. Последняя версия POSIX поддерживает системное время и вызовы даты, устойчивые к [[Проблема 2038 года|проблеме Y2038]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Идентификатор]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* {{cite web&lt;br /&gt;
 |url         = http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs-7.html&lt;br /&gt;
 |title       = 7. Inodes and Operations&lt;br /&gt;
 |lang        = en&lt;br /&gt;
 |date        = 11.1999&lt;br /&gt;
 |access-date=2010-08-03&lt;br /&gt;
 |description = Уровень виртуальной файловой системы Linux: Иноды и Действия — Иноды в [[Linux]]&lt;br /&gt;
 |url-status     = dead&lt;br /&gt;
 |archive-url  = https://web.archive.org/web/20080207080004/http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs-7.html&lt;br /&gt;
 |archive-date = 2008-02-07&lt;br /&gt;
}}&lt;br /&gt;
* {{книга&lt;br /&gt;
 |автор        = Робачевский А. Н., Немнюгин С. А., Стесик О. Л.&lt;br /&gt;
 |часть        = Индексные дескрипторы / Базовая файловая система System V / Глава 4. Файловая система&lt;br /&gt;
 |заглавие     = Операционная система UNIX&lt;br /&gt;
 |издание      = 2-е изд&lt;br /&gt;
 |место        = СПб.&lt;br /&gt;
 |издательство = БХВ-Петербург&lt;br /&gt;
 |год          = 2008&lt;br /&gt;
 |страницы     = 334-&lt;br /&gt;
 |страниц      = 656&lt;br /&gt;
 |isbn         = 978-5-94157-538-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Аспекты операционных систем}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Файловые системы]]&lt;br /&gt;
[[Категория:Unix]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Gromolyak</name></author>
	</entry>
</feed>