[Перевод] В UNIX все является файлом

задняя часть Операционная система Командная строка Программа перевода самородков

Чтобы спланировать разработку архитектурного дизайна, интерфейса, культуры и пути развития, система UNIX определила ряд унифицированных концепций и идей. Наиболее важным из этих пунктов является мантра «все есть файл», широко известная как одно из определений UNIX.

Основной принцип разработки заключается в предоставлении единой парадигмы доступа к широкому спектру ресурсов ввода/вывода, включая файлы, папки, жесткие диски, компакт-диски, модемы, клавиатуры, принтеры, дисплеи, терминалы и даже обмен данными между процессами и сетями. . Хитрость заключается в предоставлении абстрактного объекта всех этих ресурсов, которые отцы UNIX называли «файлами». Потому что к каждому «файлу» обращается один и тот же API[1]открыт, поэтому вы можете использовать один и тот же набор команд для чтения/записи/манипулирования дисками, клавиатурами, файлами или сетевыми устройствами.

Это основное понятие имеет два значения:

  • В UNIX все представляет собой поток байтов.
  • В UNIX файловая система используется как общее пространство имен.

В UNIX все представляет собой поток байтов.

Из чего состоит файл в UNIX? Файл на самом деле ничем не отличается от последовательности байтов, которые можно читать и записывать. Если у вас есть индекс файла (назовем его «дескриптор файла»,[2]»), то каналы ввода-вывода UNIX готовы, они имеют одинаковый набор операций и API — независимо от типа устройства или базового оборудования.

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

Для большинства программистов и пользователей UNIX предоставляет:

  • Файл на жестком диске

  • папка

  • Ссылка на сайт

  • Запоминающие устройства (например, жесткие диски, компакт-диски, ленты, USB-устройства)

  • Взаимодействие между процессами (например, конвейеры, разделяемая память, сокеты UNIX)

  • Телекоммуникации

  • интерактивный терминал

  • Почти все другие устройства (например: принтеры, видеокарты)

Для потоков байтов в этой форме вы можете:

  • read(читать)
  • write(Писать)
  • lseek(указатель движется)
  • close(закрытие)

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

Наконец, обратите внимание, что, хотя все файлы предоставляют единый API, некоторые операции могут не поддерживаться некоторыми особыми типами устройств. Как очевидный пример, вы не можете использовать устройства мышиlseekкоманду или использовать на устройстве CD-ROMwriteкоманда (при условии, что ваш компакт-диск доступен только для чтения).

Файловые системы имеют общие пространства имен

В UNIX файлы — это не просто потоки байтов с согласованным API, они могут индексироваться единым образом: файловая система имеет общее пространство имен.

Глобальное пространство имен и механизм монтирования

Пути файловой системы UNIX обеспечивают согласованную глобальную схему маркировки ресурсов, так что их физические адреса можно игнорировать. Чтобы привести несколько примеров, вы можете использовать/usr/localкоманда для доступа к локальной папке,/home/joe/memo.pdfкоманда для доступа к файлу,/mnt/cdromкоманда для доступа к CD-ROM,/usrкоманда для доступа к папке на сетевом диске,/dev/sda1команда для доступа к разделам жесткого диска,/tmp/mysql.sockкоманда для доступа к доменным сокетам UNIX,/dev/tty0команда для доступа к терминалу или даже использовать/dev/mouseкоманда для доступа к мыши. Эти общие пространства имен обычно выглядят как файловая иерархия или папка, но, как и в предыдущем примере, это просто удобная абстракция, путь к файлу может относиться ко всему: к файловой системе, устройству, сетевому ресурсу или каналу.

Пространства имен иерархичны, и все ресурсы доступны из корневой папки (/) для доступа. Вы можете использовать одно и то же пространство имен для доступа к нескольким файловым системам: вы просто указываете местоположение в пространстве имен (например,/backups) «подключен» к устройству или файловой системе (например, к внешнему жесткому диску). В терминологии UNIX эта операция называетсяустанавливать(mounting) файловая система, расположение пространства имен, в котором вы подключаете файловую систему, называетсяточка крепления(mount point). Вы можете получить доступ ко всем ресурсам в смонтированной файловой системе, указав перед ней имя точки монтирования, как если бы оно было частью общего пространства имен (например,/backups/myproject-Oct07.zipэтот файл).

Механизм монтирования, который я только что описал, имеет решающее значение для создания единообразного и однозначного пространства имен, когда очевидно, что разные ресурсы переопределяются. Сравните это пространство имен с пространством имен файловой системы в операционных системах Microsoft — MS-DOS и Windows рассматривают устройства как файлы, ноНе будуПоместите файловую систему в общее пространство имен, ее пространство имен будет разделено, и каждый адрес физического хранилища будет рассматриваться как уникальный объект.[3]:C:\это первый жесткий диск,E:\Устройство CD-ROM и т. д.

псевдо файловая система

В первые дни UNIX значительно улучшил интеграцию ресурсов ввода/вывода, предоставив глобальный API и функцию монтирования устройств в единое пространство имен файловой системы. Этот подход оказался настолько успешным, что с тех пор появилась тенденция предоставлять больше ресурсов и системных служб в виде глобального пространства имен файловой системы. Plan 9 был предшественником этой практики, и все новые системы UNIX делают это сейчас.

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

Примеры псевдо файловых систем:

  • procfs (/proc): файловая система proc содержит специальный файловый уровень, который можно использовать для запроса или управления запущенными процессами или для просмотра внутренних файлов ядра через стандартные записи файлов (в основном текстовые).
  • devfs (/dev or /devices): devfs представляет все устройства в системе как пространство имен динамической файловой системы. devfs также может управлять этими пространствами имен и интерфейсами напрямую через драйверы устройств ядра, чтобы обеспечить интеллектуальное управление устройствами, включая регистрацию и отмену регистрации устройств.
  • tmpfs (/tmp): содержимое временной файловой системы исчезает при перезагрузке, tmpfs разработан для скорости и эффективности, с такими функциями, как динамический размер файловой системы, явный резерв для очистки пространства и т. д.
  • portalfs (/p): через файловую систему портала BSD вы можете присоединить серверный процесс к общему пространству имен файловой системы. Это обеспечивает явный доступ к сетевым службам через файловую систему. Например, приложение может открыть совместимый файл,/p/tcp/ph7spot.com/smtpприйти иph7spot.comдля взаимодействия с SMTP-сервером на Файловая система портала удивительна, потому что она обеспечивает семантику сокетов в файловой системе и может быть перенесена и использована системными инструментами UNIX (например:cat, grep, awkд.) - хоть из оболочки!
  • ctfs (/system/contract): Контрактирует файловую систему как файловый интерфейс к контрактной подсистеме Solaris. Соглашения Solaris определяют представление процесса или группы процессов для различных событий и сбоев, например перезапуск процесса после его остановки. Контракты Solaris предоставляют расширенные возможности для управления программным обеспечением и мониторинга в таких средах, как программное обеспечение аварийного переключения кластера, системы пакетной обработки очередей и механизмы распределенных вычислений.

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

в заключении

В современных операционных системах UNIX все устройства и большинство взаимодействий между процессами рассматриваются и управляются как файлы или псевдофайлы на уровне файловой системы. Основополагающее видение UNIX и принципы проектирования «все есть файл» являются ключом к успеху и долговечности UNIX. Он обеспечивает мощную и простую абстракцию, на основе которой могут строиться системы, инструменты и сообщества. Что еще более важно, он решает проблему запатентованным способом, который обеспечивает надежную интеграцию и базовый механизм композиции для связывания инструментов и приложений.

Несмотря на успех метафоры «все есть документ», некоторые люди более или менее скептически относятся к ее универсальности. Одним из последствий того, что каждый файл рассматривается как поток байтов, является отсутствие стандартной поддержки метаданных: для правильной обработки файла каждое приложение должно найти способ вычислить тип файла, схему и семантику. И, чтобы сохранить метаданные,каждыйИнструменты, обрабатывающие потоки данных, должны сохранять метаданные нетронутыми (например, информацию XMP на фотографиях). Таким образом, хотя UNIX-файлы в виде набора байтов чрезвычайно эффективны для компоновки программ с текстовым интерфейсом, они также сильно ограничивают сочетание мультимедийных и бинарных приложений.

Несмотря на ее ограничения, многие также признают влияние метафоры и ее влияние на интеграцию операционной системы. С момента первого выпуска UNIX исследователи продолжали развивать эту центральную идею. Например, операционная система Plan 9 выступает за полностью интегрированный подход к системным ресурсам: в основе видения Plan 9 лежит эта цель — не только устройства и каналы, но ивсеСистемный интерфейс представлен файловой системой. Например, разработчики Plan 9 заметили, что в UNIX сетевые устройства не могутполностьюРассматриваются как квалифицирующие файлы: доступ к ним осуществляется через сокеты, которые имеют определенную открытую семантику и принадлежат другому пространству имен (хост и порт для интернет-сокетов). Plan 9 реализует и доказывает, что вы можете успешно объединить все локальные и удаленные устройства в одном глобальном пространстве имен. Эта идея заканчиваетсяportalfsФорма реализована в UNIX.

Другие инновационные концепции, полученные из Plan 9, также были созданы на основе принципа «В UNIX все является файлом». Например, Plan 9 предоставляет еще один уровень абстракции поверх унифицированного дизайна пространства имен: пространство имен файловой системы может быть настроено для каждого пользователя, для каждого процесса и даже динамически.[4]. Наконец, Plan 9 доказывает, что метафора «В UNIX все является файлом» может быть реализована в более широком масштабе. Фактически, эта фундаментальная концепция продолжает процветать в современных операционных системах UNIX.[5].

использованная литература

  • Удивительная книга - "Искусство программирования UNIX" Эрика С. Рэймонда.
  • В этой статье были полезны главы "Элементы стиля операционной системы" и "Проблемы проектирования UNIX".
  • 10 вещей, которые я ненавижу в (U)NIX, Дэвид Чиснолл.
  • Определения монтирования из Linux Intelligence Project.
  • Типы файлов UNIX в Википедии.
  • Понимание концепций UNIX, USAIL (Независимое обучение системному администрированию UNIX).
  • Стандарт иерархии файловой системы.
  • Файловая система proc от Redhat.
  • Модульная файловая система пользовательского режима для систем BSD.
  • Самовосстановление в современных операционных системах, Майкл У. Помогает глубже понять подсистему протокола Solaris.

  1. Дополнительные сведения об операционной системе UNIX см. в Википедии.Вход(Примечание переводчика: требуется научный доступ в Интернет).
  2. Дескриптор файла — это просто абстрактный ключ для доступа к файлу, дескриптор файла обычно представляет собой целочисленное значение и связан с открытым файлом.
  3. Для получения подробной информации, пожалуйста, проверьте Википедию
  4. Эта концепция в конечном итоге была реализована в UNIX в форме unionfs.
  5. Некоторые примеры текущей деятельности в этой области см. в примерах unionfs, portalfs и objfs.

Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. начало статьиПостоянная ссылка на эту статьюЭто ссылка MarkDown этой статьи на GitHub.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из ИнтернетаНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.