Как пустые файлы могут занимать ноль байтов в Linux?

Как пустые файлы могут занимать ноль байтов в Linux?

Я также спросилродственный вопрос для Windows.


В Linux (я только что проверил):

  • Размер пустой папки составляет 4 КБ (независимо от ее имени).
  • Размер пустого файла равен 0 байт.

Однако файлы и папки, очевидно, имеют имена, которые должны где-то храниться.

  • Где, примерно, они хранятся?
  • Является ли максимальный объем памяти, доступный для хранения этих данных, предопределенным значением или он зависит от доступного места на диске?
  • Занимает ли пустой файл с коротким именем меньше места, чем пустой файл с длинным именем? (или, возможно, структура данных, в которой хранятся эти имена, имеет фиксированное количество байтов для каждого файла, которое, возможно, заполняет оставшиеся байты \0?)
  • Занимает ли пустая папка с коротким именем меньше места, чем пустая папка с длинным именем?
  • Пустая папка с именем foobarзанимает меньше места, столько же места или больше места, чем пустой файл с именем foobar?
  • Пустой файл по адресу /etc/empty.txtзанимает меньше места, столько же места или больше места, чем пустой файл по адресу /etc/long/nested/path/until/the/empty/file/is/reached/empty.txt?

решение1

Имена файлов хранятся в каталоге. Каталог состоит из записей каталога, и каждая запись каталога содержит имя файла и номер инода для этого файла. Инод содержит различные метаданные, такие как идентификатор пользователя и идентификатор группы, владеющей файлом, время последнего изменения инода и т. д. Файл с более длинным именем файла займет больше места в каталоге. Может быть несколько записей каталога (в одном и том же или разных каталогах), которые ссылаются на один и тот же номер инода. Когда создается дополнительная запись каталога, указывающая на тот же инод, это называется созданием жесткой ссылки.

В таблице инодов имеется фиксированное количество инодов, поэтому если вы создадите большое количество инодов, в конечном итоге в таблице инодов может закончиться место. (Вы можете увидеть, сколько инодов используется, с помощью "df -i". Вы также можете создать файловую систему с большим количеством инодов, если предполагаете, что средний размер инодов в файловой системе будет меньше значения по умолчанию.)

Каталоги также состоят из inodes и работают во многом как файлы, за следующим исключением. Во-первых, даже "пустой" каталог будет иметь записи каталога для '.' (сам каталог) и ".." (родительский каталог), поэтому даже "пустой" каталог займет 4k места. Во-вторых, каталог не может иметь жестких ссылок. То есть (игнорируя записи '.' и '..'), может быть только запись каталога, ссылающаяся на inode каталога. Это означает, что каталоги образуют дерево, а не обобщенный граф.

решение2

Команда ls отображает, помимо прочего, размер файла:

  1. Если файл является каталогом, отображается размер, выделенный ему системой.(На блок размером 4 КБ: 4096 бит для файловой системы ext4) даже если в нем 0 байт.

  2. Если файл обычный, то отображается размер его содержимого, а не размер, занимаемый файлом.

Чтобы узнать размер, занимаемый файлом, будь то обычный файл или каталог, используйте команду «du file_name»

Связанный контент