Сколько записей создается при создании нового каталога в * nix?

В связи с вопросом, я думаю, что mkdir ~/a либо два, либо три:

  • 1 для каталога, в котором он находится ( ~/a )
  • 1 для себя ( cd a && ls . )
  • и / или 1 запись для себя снова ( cd a && ls .. )

Может ли кто-нибудь уточнить, если это два или три?

  • Типы разделов Linux
  • Значение дефрагментации и когда это необходимо
  • Разрешения меняются с mkdir на mount
  • Является ли каталог, на котором установлена ​​файловая система (точка монтирования), файл устройства типа файловой системы?
  • Каковы последствия наличия большого количества файлов в каталоге в файловой системе ext4?
  • ext4 или NTFS потеряли все файлы за последние 2 года. Как я могу их восстановить?
  • Как каталог является «особым типом файла»?
  • Смонтируйте файловые системы после загрузки, чтобы избежать задержки fsck для sshd
  • 2 Solutions collect form web for “Сколько записей создается при создании нового каталога в * nix?”

    В пустом каталоге:

     % stat . File: `.' Size: 6 Blocks: 0 IO Block: 4096 directory Device: fe04h/65028d Inode: 537317737 Links: 2 Access: (0750/drwxr-x---) Uid: ( 1000/stribika) Gid: ( 100/ users) Access: 2011-02-22 08:47:20.935036074 +0100 Modify: 2011-02-22 08:47:20.935036074 +0100 Change: 2011-02-22 08:47:20.935036074 +0100 Birth: - % mkdir foo % stat . File: `.' Size: 16 Blocks: 0 IO Block: 4096 directory Device: fe04h/65028d Inode: 537317737 Links: 3 Access: (0750/drwxr-x---) Uid: ( 1000/stribika) Gid: ( 100/ users) Access: 2011-02-22 08:47:20.935036074 +0100 Modify: 2011-02-22 08:47:57.465036072 +0100 Change: 2011-02-22 08:47:57.465036072 +0100 Birth: - % stat foo File: `foo' Size: 6 Blocks: 0 IO Block: 4096 directory Device: fe04h/65028d Inode: 509269 Links: 2 Access: (0750/drwxr-x---) Uid: ( 1000/stribika) Gid: ( 100/ users) Access: 2011-02-22 08:47:57.465036072 +0100 Modify: 2011-02-22 08:47:57.465036072 +0100 Change: 2011-02-22 08:47:57.465036072 +0100 Birth: - 

    Как видите, есть 2 ссылки на пустой каталог. Когда я создаю новый внутри, количество ссылок увеличивается до 3. Кроме того, есть 2 ссылки на новый каталог. Всего 3 новых ссылки.

    Это связано с тем, что каждый каталог имеет ссылку на себя (.) И его родительский (..).

    В исходной реализации Unix, чтобы сохранить код файловой системы внутри ядра простым, программы обработки каталогов сделали некоторую дополнительную работу: в частности, mkdir /parent/a создал запись для in /parent , а также вызванную запись . в a (указывая на себя) и запись, которая называется .. в a (указывая на /parent ¹).

    Довольно скоро код для mkdir и друзей все равно переместился в ядро, но формат файловой системы оставался явным . и .. записи, которые код обхода файловой системы найден по имени (в отличие от наличия двух указателей специального формата в каждом каталоге).

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

    ¹ По ссылке не по имени. Поэтому, если вы переименовываете /parent , a продолжает указывать на родительский каталог, где бы он ни перемещался в структуру файловой системы.

    Linux и Unix - лучшая ОС в мире.