Ответ
Inode (сокращение от index node) — это фундаментальная структура данных в Unix-подобных файловых системах (Linux, macOS). Она хранит всю метаинформацию о файле или каталоге, кроме его имени и содержимого.
Что хранится в inode:
- Тип файла: обычный файл, каталог, символическая ссылка и т.д.
- Права доступа (read, write, execute).
- ID владельца (пользователя и группы).
- Размер файла в байтах.
- Временные метки: время создания (ctime), последнего доступа (atime), последней модификации (mtime).
- Количество жестких ссылок на этот inode.
- Указатели на блоки данных, где хранится содержимое файла.
Имя файла хранится отдельно в структуре каталога и просто ссылается на номер inode. Это позволяет создавать жесткие ссылки (hard links) — несколько имен в файловой системе могут указывать на один и тот же inode (и, следовательно, на одни и те же данные).
Отношение к Go
В Go вы не работаете с номерами inode напрямую через стандартную библиотеку, так как это платформо-зависимая деталь. Вместо этого вы получаете доступ к метаданным из inode через структуру os.FileInfo
, которую возвращает функция os.Stat()
.
package main
import (
"fmt"
"log"
"os"
)
func main() {
fileInfo, err := os.Stat("myfile.txt")
if err != nil {
log.Fatal(err)
}
// fileInfo предоставляет доступ к данным из inode
fmt.Printf("Размер файла: %d байтn", fileInfo.Size())
fmt.Printf("Права доступа: %sn", fileInfo.Mode())
fmt.Printf("Время последней модификации: %sn", fileInfo.ModTime())
}
Таким образом, для Go-разработчика inode — это скрытая под капотом ОС концепция, с которой он взаимодействует через кросс-платформенные абстракции пакета os
.