70

Я часто слышу, как люди говорят: «Уникальная философия Unix заключается в том, что все обрабатывается как файл» или "В Unix все является файлом". Но я никогда не слышал, чтобы кто-нибудь объяснил, почему он уникален для Unix.

Итак, почему это уникально для Unix? Другие операционные системы, такие как Windows и Mac, не работают с файлами?

И это уникально по сравнению с другими операционными системами?

8 ответов8

53

Итак, почему это уникально для Unix?

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

Unix рассматривает все устройства как файлы, но со специальными атрибутами. Чтобы упростить программы, стандартный ввод и стандартный вывод являются устройствами ввода и вывода программы по умолчанию. Таким образом, вывод программы, обычно предназначенный для экрана консоли, может идти куда угодно, на файл диска, на принтер или на последовательный порт. Это называется перенаправлением ввода / вывода.

Другие операционные системы, такие как Windows и Mac, не работают с файлами?

Конечно, все современные операционные системы поддерживают различные файловые системы и могут "работать с файлами", но различие заключается в том, как обрабатываются устройства? Не знаю о Mac, но Windows действительно предлагает перенаправление ввода / вывода.

И по сравнению с какими другими операционными системами он уникален?

Больше нет. Linux имеет ту же функцию. Конечно, если ОС принимает перенаправление ввода / вывода, то она склонна использовать другие функции Unix и в конце концов становится Unix-подобной.

34

Идея, что "все это файл" пришла от Multics. Дизайнеры Unix основали большую часть своей работы на предшественниках, особенно Multics. Действительно, многое в вычислительной технике основано на предшественниках.

Вы можете прочитать о работе покойного Денниса Ритчи в дизайне Unix для получения дополнительной информации. Он ссылался на вещи, которые они "копировали" из Multics, такие как древовидная файловая система, командная оболочка и неструктурирование файлов. Я не имею в виду, что люди из Unix украли у людей из Multics. Для всех намерений и целей, это были те же самые люди.

28

Уникальный? Нет. Определение? Абсолютно.

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

Что еще более важно, это учитывает две очень простые и мощные концепции. Основные утилиты, которые выполняют One Thing Well (tm), которые могут быть соединены вместе с трубами по мере необходимости. Хотите найти что-то в текстовом файле? Используйте cat чтобы показать это, пропустите через grep , и вы готовите с газом. В этом вся сила Unix - специализированные приложения, работающие вместе и обеспечивающие большую гибкость.

Mac OS X также следует философии Unix, но она лучше скрыта (комплект «приложения» - это каталог, полный файлов), и на самом деле это правильный, сертифицированный Unix, произошедший от NeXT, который использовал биты FreeBSD.

В Windows есть некоторые бинарные компоненты, такие как просмотрщик событий и реестр, и в этом конкретном сценарии есть некоторые преимущества в скорости.

18

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

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

Трубы и розетки

Программы используют их так же, как и обычные файлы. Фактически, в большинстве случаев им даже не важно, какой тип файла они используют. Вот почему команды Unix можно так многократно комбинировать для формирования новых мощных систем. (См. Перенаправление ввода / вывода в ответе опилок)

Файлы устройств

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

Что происходит дальше , не посылает простые символы в этих файлах, но выдавать IOCTL () «s на них. Отдельные ioctl, которые вы можете выдавать, зависят от устройства. Например, консоль документирована в console_ioctl (4)

11

Я, вероятно, получу желание сказать это, но я думаю, что сказать, что все в Unix - это файл, на самом деле является давней ошибкой. Что это на самом деле это две вещи.

  1. Файлы и устройства, а также множество других вещей - это объекты, которые можно моделировать с помощью интерфейса, который включает функции открытия, закрытия, чтения, записи и управления. Даже не заводите людей на то, как ioctl (для функций управления) - это нетипизированная кухонная раковина. Кроме того, дескрипторы этих объектов (fds) являются кандидатами для общего класса поведения, связанного с вводом / выводом, такого как блокирование / неблокирование, асинхронность, сигналы и другие.
  2. Пространство имен для этих объектов (файлы, устройства, другие вещи) является иерархическим. Реализация называется файловой системой, потому что это то, что большинство объектов.

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

9

Когда люди говорят: «В Unix все является файлом», они имеют в виду, что вещи, которые не являются файлами, рассматриваются как файлы.

Конечно, большинство операционных систем работают с файлами. Текстовые файлы, файлы изображений, звуковые файлы. Но не все операционные системы рассматривают устройства как файлы. Это важное различие. Если я перечислю содержимое своей папки /dev / в моей операционной системе Ubuntu (которая основана на Unix), я получу список из более чем 200 устройств. Некоторые из этих устройств являются аппаратными, но отображаются внутри папки. Например, жесткие диски, порты USB, мышь и клавиатура, аудиоустройства и принтеры и другие. Некоторые из устройств являются виртуальными, например /dev / urandom, который ведет себя как бесконечный файл, полный случайных чисел. Это не настоящий файл на моем жестком диске.

Все эти устройства рассматриваются как файлы. Я могу читать данные с этих устройств и / или записывать их. Здесь приведены примеры копирования данных с разных устройств на аудиоустройство. Это возможно, потому что они рассматриваются как файлы. Результатом (отвратительным) является способность прослушивать содержимое жесткого диска, движение мыши, память компьютера или пиксели изображения. Этого было бы гораздо труднее достичь, если бы устройства не рассматривались как файлы, потому что каждому устройству потребовались бы разные методы для чтения и записи данных.

При этом, что означает "все", варьируется от системы к системе. Например, OS X основана на Unix, но не имеет устройства /dev /audio. Он использует фирменную аудиосистему под названием CoreAudio. Так что в этом случае можно сказать «почти все - файл». Затем в таких системах, как Windows, где "все не является файлом", вы все равно можете делать такие вещи, как копирование содержимого файла на порт принтера (вводить что-то вроде copy mydocument.txt >lpt1: , что аналогично копированию документ на устройство принтера в системах Unix.

Другие операционные системы, такие как Windows и OS X, не работают с файлами? Да, они делают. Windows и OS X работают с файлами, но Windows не рассматривает устройства как файлы, что является частью того, что означает "все является файлом".

8

Я вижу, что Multics упоминается как источник «все - файл», но я думаю, что вам нужно взглянуть немного глубже, чем просто файлы устройств, именованные каналы, обычные файлы и т.д. И т.д. Вы должны посмотреть на синтаксис именования файлов. Это имеет большое значение, даже если существуют AUX, CON и LP "магические имена файлов".

Смотрите « Ужасное имя » Роба Пайка. Он сравнивает синтаксис именования файлов Unix с парой других синтаксисов, особенно VMS. Обратите внимание, что операционные системы мэйнфреймов конца 60-х - начала 70-х годов, когда возникла Unix, имели то, что современный разум считал бы необычно синтаксисом именования файлов в стиле рококо. Прошло много лет с тех пор, как я использовал VM/CMS, или NOS, или NOS/VE, и я только смотрел через плечо на кого-то, кто использовал ОС Univac, но достаточно сказать, что причуды превосходили закономерности.

Я даже не видел, как работает Multics, но вы можете увидеть документ о его файловой системе. Похоже, что оригинальный Unix взял "все это файл" немного дальше, чем Multics, но ваш пробег может отличаться.

3

Обратите внимание, что даже Линус Торвальдс не согласен с тем, что "все это файл". Если вы ищете "

все является потоком

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .