Skip to content

Inode and Descriptors

Inode ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы (file descriptors) β€” это Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… понятия Π² Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ находятся Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… уровнях взаимодСйствия с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой.

1. Inode (индСксный ΡƒΠ·Π΅Π»):

Inode (индСксный ΡƒΠ·Π΅Π») β€” это структура Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»Π΅, ΠΊΡ€ΠΎΠΌΠ΅ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ содСрТимого. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π° дискС ΠΈΠΌΠ΅Π΅Ρ‚ свой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ inode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ„Π°ΠΉΠ»Π΅.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ характСристики inode:

  • ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π°:
  • Π Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°.
  • ΠŸΡ€Π°Π²Π° доступа (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅).
  • Π’Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°.
  • ВрСмя послСднСго доступа, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ измСнСния (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²).
  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Тёстких ссылок Π½Π° Ρ„Π°ΠΉΠ».
  • Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ хранится содСрТимоС Ρ„Π°ΠΉΠ»Π°.

  • Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

  • Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ inode. Если Ρ„Π°ΠΉΠ» пСрСимСновываСтся, Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ inode остаётся Ρ‚Π΅ΠΌ ΠΆΠ΅.

  • ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ:

  • ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Π² Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах β€” это Ρ„Π°ΠΉΠ», содСрТащий список Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ inode. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΈΡ… inode.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ls -i example.txt

Π’Ρ‹Π²ΠΎΠ΄:

123456 example.txt

Π—Π΄Π΅ΡΡŒ 123456 β€” это Π½ΠΎΠΌΠ΅Ρ€ inode Ρ„Π°ΠΉΠ»Π° example.txt.

2. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы:

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор (file descriptor) β€” это Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опСрационная систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ», опСрационная систСма прСдоставляСт Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор для взаимодСйствия с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ характСристики Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов:

  • ЦСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:
  • Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы β€” это простыС Ρ†Π΅Π»Ρ‹Π΅ числа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опСрационная систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для отслСТивания ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… назначаСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор.

  • ΠŸΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ дСскрипторы:

  • Π’ любом Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ процСссС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ стандартных Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскриптора:

    1. 0 β€” стандартный Π²Π²ΠΎΠ΄ (stdin).
    2. 1 β€” стандартный Π²Ρ‹Π²ΠΎΠ΄ (stdout).
    3. 2 β€” стандартный ΠΏΠΎΡ‚ΠΎΠΊ ошибок (stderr).
  • ИспользованиС Π² систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ…:

  • Когда Ρ„Π°ΠΉΠ» открываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, open()), опСрационная систСма Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор. Π­Ρ‚ΠΎΡ‚ дСскриптор Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния, записи ΠΈΠ»ΠΈ закрытия Ρ„Π°ΠΉΠ»Π° (read(), write(), close()).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π² Python:

fd = open('example.txt', 'r')  # ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ», Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор
data = fd.read()               # Π§ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор
fd.close()                     # Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ inode ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ дСскрипторами:

Inode Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор
Π₯Ρ€Π°Π½ΠΈΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ„Π°ΠΉΠ»Π΅ (Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΡ€Π°Π²Π°, Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, ΠΈ Ρ‚.Π΄.). ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ собой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ процСссом.
Бвязан с Ρ„Π°ΠΉΠ»ΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Бвязан с Ρ„Π°ΠΉΠ»ΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСсса Π²ΠΎ врСмя Π΅Π³ΠΎ выполнСния.
Π£Π½ΠΈΠΊΠ°Π»Π΅Π½ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ назначаСтся ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°.
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ inode ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС, Π³Π΄Π΅ хранится содСрТимоС Ρ„Π°ΠΉΠ»Π°. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для взаимодСйствия с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ/записи Ρ„Π°ΠΉΠ»ΠΎΠ².
Один Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΈΠΌΡ‘Π½ (ТёсткиС ссылки), Π½ΠΎ всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ inode. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ свои собствСнныС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы, Π΄Π°ΠΆΠ΅ Ссли нСсколько процСссов Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

ВзаимодСйствиС inode ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов:

Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»: 1. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ„Π°ΠΉΠ» ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ inode, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π° ΠΈ указатСлям Π½Π° Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. 2. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ„Π°ΠΉΠ»ΠΎΠΌ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись ΠΈ Ρ‚.Π΄.).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, inode β€” это способ хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ„Π°ΠΉΠ»Π΅ Π½Π° дискС, Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ процСсс взаимодСйствуСт с ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ.