Что такое файл каталога

Обновлено: 30.06.2024

Очень часто новички слышат фразу "В Linux/Unix все является файлом". Однако, что такое каталоги тогда? Чем они отличаются от файлов?

1 Ответ 1

Примечание: изначально это было написано для поддержки моего ответа на вопрос Почему текущий каталог в команде ls идентифицируется как связанный с самим собой? но я чувствовал, что эта тема заслуживает отдельного разговора, и, следовательно, эти вопросы и ответы .

Понимание файловой системы и файлов Unix/Linux: все является inode

По сути, директория — это просто специальный файл, содержащий список записей и их ID.

Прежде чем мы начнем обсуждение, важно провести различие между несколькими терминами и понять, что на самом деле представляют собой каталоги и файлы. Возможно, вы слышали выражение «Все является файлом» для Unix/Linux. Под файлом пользователи часто понимают следующее: /etc/passwd — объект с путем и именем. На самом деле имя (будь то каталог, файл или что-то еще) — это просто строка текста — свойство фактического объекта. Этот объект называется инодом или I-номером и хранится на диске в таблице инодов. В открытых программах также есть таблицы индексных дескрипторов, но пока это не наша забота.

Понятие каталога в Unix такое, как выразился Кен Томпсон в интервью 1989 года:

<блочная цитата>

. А затем некоторые из этих файлов были каталогами, которые просто содержали имя и I-номер.

Из выступления Денниса Ритчи в 1972 году можно сделать интересное наблюдение, в котором

". Каталог на самом деле не более чем файл, но его содержимое контролируется системой, а содержимое - это имена других файлов. (Каталог иногда называется каталогом в других системах.)"< /p>

<р>. но нигде в разговоре нет упоминания об инодах. Однако в руководстве 1971 года по формату каталогов говорится:

Тот факт, что файл является каталогом, указывается битом в флаговом слове его записи i-node.

Записи каталога имеют длину 10 байт. Первое слово - это i-узел файла, представленного записью, если он не равен нулю; если ноль, запись пуста.

Так было с самого начала.

Доступ ко всей этой информации, хранящейся в индексном узле, можно получить с помощью системных вызовов stat(), как в Linux man 7 inode:

Каждый файл имеет индексный дескриптор, содержащий метаданные о файле. Приложение может получить эти метаданные с помощью stat(2) (или связанных вызовов), который возвращает структуру statx, или statx(2), который возвращает структуру statx.

Можно ли получить доступ к файлу, зная его номер инода ( ref1 , ref2 )? В некоторых реализациях Unix это возможно, но обходит проверки разрешений и доступа, поэтому в Linux это не реализовано, и вам нужно пройтись по дереву файловой системы (например, через find -inum 1234), чтобы получить имя файла и соответствующий индекс.

На уровне исходного кода он определен в исходном коде ядра Linux, а также используется многими файловыми системами, работающими в операционных системах Unix/Linux, включая файловые системы ext3 и ext4 (по умолчанию в Ubuntu). Интересная вещь: поскольку данные представляют собой просто блоки информации, в Linux на самом деле есть функция inode_init_always, которая может определить, является ли индекс каналом (inode->i_pipe). Да, сокеты и каналы технически также являются файлами — анонимными файлами, которые могут не иметь имени файла на диске. FIFO и сокеты Unix-Domain имеют имена файлов в файловой системе.

Сами данные могут быть уникальными, но номера инодов не являются уникальными. Если у нас есть жесткая ссылка на foo с именем foobar, она также будет указывать на индекс 123. Сам этот индексный дескриптор содержит информацию о том, какие фактические блоки дискового пространства заняты этим индексным дескриптором. И это технически, как вы можете иметь . быть связанным с именем файла каталога. Ну, почти: вы не можете создавать жесткие ссылки на каталоги в Linux самостоятельно, но файловые системы могут разрешать жесткие ссылки на каталоги очень дисциплинированным образом, что ограничивает наличие только . и .. как жесткие ссылки.

Дерево каталогов

Файловые системы реализуют дерево каталогов как одну из древовидных структур данных. В частности,

  • ext3 и ext4 используют HTree
  • xfs использует дерево B+
  • zfs использует хеш-дерево

Ключевым моментом здесь является то, что сами каталоги являются узлами дерева, а подкаталоги — дочерними узлами, причем каждый дочерний узел имеет обратную связь с родительским узлом. Таким образом, для ссылки на каталог количество инодов составляет минимум 2 для голого каталога (ссылка на имя каталога /home/example/ и ссылка на себя /home/example/. ), и каждый дополнительный подкаталог является дополнительной ссылкой/узлом: /p>

Схема, найденная на странице курса Яна Д. Аллена, представляет собой упрощенную очень четкую схему:

Единственное, что на ПРАВОЙ диаграмме неверно, это то, что файлы технически не считаются находящимися в самом дереве каталогов: добавление файла не влияет на количество ссылок:

Доступ к каталогам, как к файлам

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

Учитывая, что каталог — это всего лишь частный случай файла, естественно, должны быть API-интерфейсы, которые позволяют нам открывать/читать/записывать/закрывать их аналогично обычным файлам.

Именно здесь на помощь приходит библиотека C dirent.h, определяющая структуру dirent, которую вы можете найти в man 3 readdir:

Таким образом, в вашем коде C вы должны определить структуру dirent *entry_p, и когда мы открываем каталог с помощью opendir() и начинаем читать его с помощью readdir(), мы будем сохранять каждый элемент в этой структуре entry_p. Конечно, каждый элемент будет содержать поля, определенные в шаблоне, показанном выше.

Практический пример того, как это работает, можно найти в моем ответе о том, как составить список файлов и их номеров инодов в текущем рабочем каталоге.

Обратите внимание, что в руководстве POSIX по fdopen говорится, что «[t] записи каталога для точек и точка-точка являются необязательными», а в руководстве readdir указано, что struct dirent требуется только для полей d_name и d_ino.

Примечание относительно "записи" в каталоги: запись в каталог изменяет его "список" записей. Следовательно, создание или удаление файла напрямую связано с разрешениями на запись в каталог, а добавление/удаление файлов — это операция записи в указанный каталог.

Каталог дерева, отображаемый командой дерева MS-DOS.

Каталог – это место для хранения файлов на вашем компьютере. Каталоги находятся в иерархической файловой системе, такой как Linux, MS-DOS, OS/2 и Unix.

На рисунке показан пример вывода команды дерева Windows/DOS. Он показывает все локальные и подкаталоги (например, «большой» каталог в каталоге «cdn»). При просмотре этого обзора текущий каталог является корневым каталогом диска C:. Он называется «корневым» каталогом, потому что под ним ничего нет, а другие каталоги «ответвляются» от него. Если вы используете операционную систему с несколькими учетными записями пользователей, этот каталог также может называться домашним каталогом.

В графическом пользовательском интерфейсе, таком как Microsoft Windows, каталоги называются папками. Однако каталог и папка являются синонимами.

Обзор каталога и пути

Ниже приведен пример того, как путь к каталогу будет выглядеть в MS-DOS.

На рисунке C: – это буква диска, а текущим каталогом является System32, который является подкаталогом каталога Windows.

Обзор пути к каталогу Linux

Ниже приведен пример того, как путь к каталогу может выглядеть в варианте Linux или Unix.

В приведенном выше примере текущим каталогом является bin, и он является подкаталогом каталога usr. Косая черта в начале — это корневой каталог.

Как вывести список или просмотреть каталоги?

Чтобы просмотреть каталоги и файлы в текущем каталоге MS-DOS, используйте команду dir. В Linux для просмотра каталогов и файлов в текущем каталоге вы должны использовать команду ls.

  • Дополнительную информацию и примеры по этой команде см. на странице команды dir.
  • Информацию и примеры по этой команде см. на странице команды ls.

Обе вышеуказанные команды также имеют переключатели, которые можно добавить к ним, чтобы просматривать только каталоги, а не каталоги и файлы.

Как изменить каталог

Чтобы изменить каталог в MS-DOS, Linux, Unix и большинстве других операционных систем командной строки, используйте команду "cd".

Как создать каталог

Чтобы создать каталог в MS-DOS, Linux, Unix и большинстве других операционных систем командной строки, используйте команду "mkdir".

Как удалить каталог

Чтобы удалить каталог в MS-DOS, используйте команду "rmdir". В Linux и Unix используйте команду "rm -r".

Какова цель каталога?

Каталог используется для хранения, организации и разделения файлов и каталогов на компьютере. Например, у вас может быть каталог для хранения изображений и другой каталог для хранения всех ваших документов. Сохраняя определенные типы файлов в папке, вы можете быстро перейти к типу файла, который хотите просмотреть. Другими словами, если бы в каталоге изображений находились только изображения, найти изображение было бы проще, чем каталог, содержащий все типы файлов.

Каталоги также используются как место для хранения программ. Например, когда вы устанавливаете программу, ее файлы сохраняются в уникальном каталоге, который может содержать подкаталоги и десятки, сотни или тысячи файлов, связанных с этой программой. Сохранение программы в собственном каталоге помогает предотвратить перезапись, изменение или удаление файлов с тем же именем другими программами.

Файлы какого типа можно хранить в каталоге?

Каталог может содержать один или несколько файлов любого типа и даже может содержать другие каталоги, содержащие файлы.

Недопустимые символы каталога

Ниже приведен список зарезервированных символов, которые нельзя использовать при создании файла или каталога в большинстве операционных систем. Если при создании каталогов используется какой-либо из этих символов, вы получите сообщение об ошибке или столкнетесь с другими проблемами.

Чем файлы отличаются от каталога?

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

Тим Фишер имеет более чем 30-летний опыт работы в сфере технологий. Он пишет о технологиях более двух десятилетий и является вице-президентом и генеральным директором Lifewire.

Файл с расширением DIRECTORY является файлом параметров папки KDE или иногда называется файлом View Properties папки KDI.

Каждая папка в операционных системах на базе Linux, использующих файлы .DIRECTORY, будет иметь свой собственный файл .DIRECTORY, в котором указаны параметры для этой конкретной папки, включая имя, значок и другие сведения.

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

Как открыть файл DIRECTORY

Операционная система, использующая этот тип файла, будет использовать его как есть — вам не нужно устанавливать какие-либо сторонние программы, чтобы открыть его. В Linux то, что открывается, называется KDE, что означает K Desktop Environment.

Иллюстрация руки, использующей контрольный список на цифровом планшете

Однако вы должны иметь возможность использовать бесплатный текстовый редактор, такой как Notepadqq, чтобы открыть файл .DIRECTORY для отображения (и, возможно, редактирования) его содержимого.

Вы пытаетесь открыть папку в терминале или командной строке, а не файл .DIRECTORY? В терминале используйте команду open, как показано в этом примере Stackoverflow. См. руководство iSunshare, если вам нужна помощь в использовании команды запуска для открытия каталога в командной строке.

Как преобразовать файл DIRECTORY

Не должно быть никаких причин для преобразования файла .DIRECTORY в другой формат, потому что это просто сделает файл непригодным для использования.

Если вы хотите преобразовать каталог (папку), полный файлов, а не файл .DIRECTORY, существует множество бесплатных конвертеров файлов. Вы можете использовать их для преобразования изображений, аудиофайлов, видео и многого другого.

Что-то немного другое, что вам может понадобиться, — это преобразование списка каталогов в текстовый файл, чтобы у вас был список всех файлов, которые находятся в этой папке. Это можно сделать в Windows с помощью команды dir.

Многие программы могут преобразовывать каталог файлов в формат ISO: WinCDEmu, MagicISO и IsoCreator — это лишь несколько примеров. Подобные утилиты сжатия файлов, такие как 7-Zip и PeaZip, могут преобразовывать папки в ZIP, RAR, 7Z и другие подобные форматы.

Все еще не можете открыть?

Если ваш файл не открывается в соответствии с приведенными выше предложениями, еще раз проверьте расширение файла, чтобы убедиться, что оно действительно читается как «.DIRECTORY», а не что-то похожее на «.DIR». Файлы с суффиксом .DIR — это файлы Adobe Director Movie, которые открываются с помощью программного обеспечения Adobe Director, которое больше не поддерживается, и никак не связаны с файлами DIRECTORY.

Другим примером является формат файла Rich Text Format Directory, в котором используется расширение файла RTFD. Это текстовые файлы, используемые в macOS, которые могут содержать изображения, шрифты и другие файлы, такие как PDF-файлы, но они также не связаны с файлами DIRECTORY и вместо этого открываются с помощью программы Apple TextEdit, Bean или theLibrarian.

В среде рабочего стола щелкните правой кнопкой мыши и перетащите файл, а затем выберите параметр копирования в контекстном меню. Другой вариант — использовать команду cp для копирования файлов в Linux. Используйте этот синтаксис: cp исходный файл целевой.

Используйте командную строку и mkdir для создания новых каталогов в Linux. Откройте окно терминала > перейдите в папку, в которую вы хотите поместить новый каталог > и введите mkdir имя каталога.

Используйте команду mv для перемещения файлов. Откройте окно терминала > откройте файл, который хотите переместить > и введите mv назначение исходного файла.

Каталог – это контейнер, который используется для хранения папок и файлов. Он организует файлы и папки в иерархическом порядке.


    Одноуровневый каталог.
    Одноуровневый каталог представляет собой простейшую структуру каталогов. В нем все файлы содержатся в одном каталоге, что упрощает поддержку и понимание.


Преимущества:

  • Поскольку это один каталог, его реализация очень проста.
  • Если файлы меньше по размеру, поиск ускорится.
  • Операции, такие как создание файлов, поиск, удаление, обновление, очень просты в такой структуре каталогов.

  • Возможен конфликт имен, так как два файла могут иметь одинаковые имена.
  • Поиск займет много времени, если каталог большой.
  • Это не может группировать файлы одного типа вместе.
  • Двухуровневый каталог.
    Как мы видели, одноуровневый каталог часто приводит к путанице в именах файлов у разных пользователей. решение этой проблемы заключается в создании отдельного каталога для каждого пользователя.


  • Можно указать полный путь, например /имя_пользователя/имя_каталога/.
  • У разных пользователей может быть один и тот же каталог и имя файла.
  • Поиск файлов упрощается благодаря пути и группировке пользователей.
  • Пользователь не может делиться файлами с другими пользователями.
  • Тем не менее, это не очень масштабируемо, два файла одного типа не могут быть сгруппированы вместе в одном пользователе.
  • Каталог с древовидной структурой.
    После того, как мы увидели двухуровневый каталог в виде дерева высоты 2, естественным обобщением будет расширение структуры каталогов до дерева произвольной высоты.
    Это обобщение позволяет пользователю создавать свои собственные подкаталоги и соответствующим образом организовывать свои файлы.


Древовидная структура является наиболее распространенной структурой каталогов. У дерева есть корневой каталог, и каждый файл в системе имеет уникальный путь.

  • Очень общий, поскольку можно указать полный путь.
  • Высокая масштабируемость, вероятность конфликта имен меньше.
  • Поиск становится очень простым, мы можем использовать как абсолютные, так и относительные пути.

  • Каждый файл не вписывается в иерархическую модель, файлы могут быть сохранены в нескольких каталогах.
  • Мы не можем обмениваться файлами.
  • Это неэффективно, поскольку доступ к файлу может происходить из нескольких каталогов.
  • Каталог ациклического графа.
    Ациклический граф — это граф без цикла, который позволяет нам совместно использовать подкаталоги и файлы. Один и тот же файл или подкаталоги могут находиться в двух разных каталогах. Это естественное обобщение каталога с древовидной структурой.

Используется в ситуации, когда два программиста работают над совместным проектом и им нужен доступ к файлам. Связанные файлы хранятся в подкаталоге, отделяя их от других проектов и файлов других программистов, поскольку они работают над совместным проектом, поэтому они хотят, чтобы подкаталоги находились в их собственных каталогах. Общие подкаталоги должны быть общими. Поэтому здесь мы используем ациклические каталоги.

Каталог дерева, отображаемый командой дерева MS-DOS.

Каталог – это место для хранения файлов на вашем компьютере. Каталоги находятся в иерархической файловой системе, такой как Linux, MS-DOS, OS/2 и Unix.

На рисунке показан пример вывода команды дерева Windows/DOS. Он показывает все локальные и подкаталоги (например, «большой» каталог в каталоге «cdn»). При просмотре этого обзора текущий каталог является корневым каталогом диска C:. Он называется «корневым» каталогом, потому что под ним ничего нет, а другие каталоги «ответвляются» от него. Если вы используете операционную систему с несколькими учетными записями пользователей, этот каталог также может называться домашним каталогом.

В графическом пользовательском интерфейсе, таком как Microsoft Windows, каталоги называются папками. Однако каталог и папка являются синонимами.

Обзор каталога и пути

Ниже приведен пример того, как путь к каталогу будет выглядеть в MS-DOS.

На рисунке C: – это буква диска, а текущим каталогом является System32, который является подкаталогом каталога Windows.

Обзор пути к каталогу Linux

Ниже приведен пример того, как путь к каталогу может выглядеть в варианте Linux или Unix.

В приведенном выше примере текущим каталогом является bin, и он является подкаталогом каталога usr.Косая черта в начале — это корневой каталог.

Как вывести список или просмотреть каталоги?

Чтобы просмотреть каталоги и файлы в текущем каталоге MS-DOS, используйте команду dir. В Linux для просмотра каталогов и файлов в текущем каталоге вы должны использовать команду ls.

  • Дополнительную информацию и примеры по этой команде см. на странице команды dir.
  • Информацию и примеры по этой команде см. на странице команды ls.

Обе вышеуказанные команды также имеют переключатели, которые можно добавить к ним, чтобы просматривать только каталоги, а не каталоги и файлы.

Как изменить каталог

Чтобы изменить каталог в MS-DOS, Linux, Unix и большинстве других операционных систем командной строки, используйте команду "cd".

Как создать каталог

Чтобы создать каталог в MS-DOS, Linux, Unix и большинстве других операционных систем командной строки, используйте команду "mkdir".

Как удалить каталог

Чтобы удалить каталог в MS-DOS, используйте команду "rmdir". В Linux и Unix используйте команду "rm -r".

Какова цель каталога?

Каталог используется для хранения, организации и разделения файлов и каталогов на компьютере. Например, у вас может быть каталог для хранения изображений и другой каталог для хранения всех ваших документов. Сохраняя определенные типы файлов в папке, вы можете быстро перейти к типу файла, который хотите просмотреть. Другими словами, если бы в каталоге изображений находились только изображения, найти изображение было бы проще, чем каталог, содержащий все типы файлов.

Каталоги также используются как место для хранения программ. Например, когда вы устанавливаете программу, ее файлы сохраняются в уникальном каталоге, который может содержать подкаталоги и десятки, сотни или тысячи файлов, связанных с этой программой. Сохранение программы в собственном каталоге помогает предотвратить перезапись, изменение или удаление файлов с тем же именем другими программами.

Файлы какого типа можно хранить в каталоге?

Каталог может содержать один или несколько файлов любого типа и даже может содержать другие каталоги, содержащие файлы.

Недопустимые символы каталога

Ниже приведен список зарезервированных символов, которые нельзя использовать при создании файла или каталога в большинстве операционных систем. Если при создании каталогов используется какой-либо из этих символов, вы получите сообщение об ошибке или столкнетесь с другими проблемами.

Чем файлы отличаются от каталога?

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

Читайте также: