Я часто слышу, как люди говорят: «Уникальная философия Unix заключается в том, что она рассматривает все как файл» или «В Unix все является файлом». Но я никогда не слышал, чтобы кто-нибудь объяснил, почему он уникален для Unix.
Итак, почему это уникально для Unix? Другие операционные системы, такие как Windows и Mac, не работают с файлами?
И это уникально по сравнению с другими операционными системами?
unix
operating-systems
Какой-то нуб студент
источник
источник
Ответы:
Типичные операционные системы, предшествующие Unix, обрабатывали файлы одним способом и обрабатывали каждое периферийное устройство в соответствии с характеристиками этого устройства. То есть, если выходные данные программы были записаны в файл на диске, это было единственное место, куда можно было перейти; Вы не могли бы отправить его на принтер или стример. Каждая программа должна была знать о каждом устройстве, используемом для ввода и вывода, и иметь параметры команды для работы с альтернативными устройствами ввода / вывода.
Unix рассматривает все устройства как файлы, но со специальными атрибутами. Чтобы упростить программы, стандартный ввод и стандартный вывод являются устройствами ввода и вывода программы по умолчанию. Таким образом, вывод программы, обычно предназначенный для экрана консоли, может идти куда угодно, на файл диска, на принтер или на последовательный порт. Это называется перенаправлением ввода / вывода .
Конечно, все современные операционные системы поддерживают различные файловые системы и могут «работать с файлами», но различие заключается в том, как обрабатываются устройства? Не знаю о Mac, но Windows действительно предлагает некоторое перенаправление ввода / вывода.
Больше нет. Linux имеет ту же функцию. Конечно, если ОС принимает перенаправление ввода / вывода, то она склонна использовать другие функции Unix и в конце концов становится Unix-подобной.
источник
WriteFile
. Но, кроме того, есть еще большая категория «объектов синхронизации», которая включает в себя не только файлы, но и мьютексы.Идея, что «все это файл» пришла от Multics. Дизайнеры Unix основали большую часть своей работы на предшественниках, особенно Multics. Действительно, многое в вычислительной технике основано на предшественниках.
Вы можете прочитать о работе покойного Денниса Ричи в дизайне Unix для получения дополнительной информации. Он ссылался на вещи, которые они «копировали» из Multics, такие как древовидная файловая система, командная оболочка и неструктурирование файлов. Я не имею в виду, что люди из Unix украли у людей из Multics. Для всех намерений и целей, это были те же самые люди.
источник
Уникальный? Нет. Определение? Абсолютно.
Наличие всего в виде файла или устройства в известной иерархии означает, что вы можете использовать один и тот же набор инструментов для всего. Plan 9 от Bell Labs продвигает это даже с аппаратными устройствами в виде файлов.
Что еще более важно, это учитывает две очень простые и мощные концепции. Основные утилиты, которые выполняют One Thing Well (tm), которые могут быть соединены вместе с трубами по мере необходимости. Хотите найти что-то в текстовом файле? Используйте,
cat
чтобы показать это, передать этоgrep
, и вы готовите с газом. В этом вся сила Unix - специализированные приложения, работающие вместе и обеспечивающие большую гибкость.Mac OS X также следует философии Unix, но она лучше скрыта (комплект «приложения» - это каталог, полный файлов), и на самом деле это правильный, сертифицированный Unix, произошедший от NeXT , который использовал биты FreeBSD .
В Windows есть некоторые бинарные компоненты, такие как просмотрщик событий и реестр, и в этом конкретном сценарии есть некоторые преимущества в скорости.
источник
Из-за специальных файлов. Когда люди говорят, что «все это файл в Unix», общие файлы и каталоги не то, что они имеют в виду. Специальные файлы уникальны для Unix-подобных ОС, которых много. Таким образом , это не только для в Unix.
Специальные файлы служат многим целям. Есть, например, трубы, сокеты и, что особенно важно, файлы устройств. Трубы и сокеты являются потоками связи между процессами. Большая часть функциональных возможностей подсистем сделана доступной для пространства пользователя через файлы устройств.
Трубы и розетки
Программы используют их так же, как и обычные файлы. Фактически, в большинстве случаев им даже не важно, какой тип файла они используют. Вот почему команды Unix можно так многократно комбинировать для формирования новых мощных систем. (См. Перенаправление ввода / вывода в ответе опилок)
Файлы устройств
Как упоминалось ранее, они действуют как интерфейсы для пользовательского пространства. Например, чтобы извлечь лоток для компакт-дисков, программист сначала должен открыть соответствующий файл устройства. Другой пример: вы хотите, чтобы ваша программа переключала виртуальный терминал. Сначала откройте / dev / console.
Что происходит дальше , не посылает простые символы в этих файлах, но выдавать IOCTL () «s на них. Отдельные ioctl, которые вы можете выдавать, зависят от устройства. Например, консоль документирована в console_ioctl (4)
источник
Я, вероятно, получу желание сказать это, но я думаю, что сказать, что все в Unix - это файл, на самом деле является ошибкой. Что это на самом деле это две вещи.
Файловая система реализует это пространство имен и реализует структуру, которая позволяет отправлять функции интерфейса этим объектам. Файловая система сначала была концептуализирована для размещения файлов, но затем была использована для организации других объектов в иерархии пространства имен. Примером полиморфизма до объектно-ориентированного было дело.
Нет ничего плохого в том, чтобы просто вызывать все файлы. Но на самом деле это более общие объекты (файл является одним из таких объектов). С этой точки зрения, эта идея не является уникальной для Unix вообще. Многие другие ОС реализуют такие иерархии полиморфных объектов.
источник
mmap()
конечно ....)Когда люди говорят: «В 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 не рассматривает устройства как файлы, что является частью того, что означает «все является файлом».
источник
Я вижу Multics, цитируемый как источник «все - файл», но я думаю, что вам нужно взглянуть немного глубже, чем просто файлы устройств, именованные каналы, обычные файлы и т. Д. И т. Д. Вы должны посмотреть на синтаксис именования файлов. Это имеет большое значение, даже если существуют AUX, CON и LP "магические имена файлов".
Смотрите « Ужасное имя » Роба Пайка. Он сравнивает синтаксис именования файлов Unix с парой других синтаксисов, особенно VMS. Обратите внимание, что операционные системы мэйнфреймов конца 60-х - начала 70-х годов, когда возникла Unix, имели то, что современный разум считал бы необычно синтаксисом именования файлов в стиле рококо. Прошло много лет с тех пор, как я использовал VM / CMS, или NOS, или NOS / VE, и я только смотрел через плечо на кого-то, кто использовал ОС Univac, но достаточно сказать, что причуды превосходили закономерности.
Я даже не видел, как работает Multics, но вы можете увидеть документ о его файловой системе . Похоже, что оригинальный Unix взял «все это файл» немного дальше, чем Multics, но ваш пробег может отличаться.
источник
Обратите внимание, что даже Линус Торвальдс не согласен с тем, что «все это файл». Если вы ищете "
«Вы найдете интересные философии о том, что мы имеем в виду, что все не является файлом, например, абстрактная структура данных в памяти или указатель, безусловно, не является файлом, ОК, конечно, все может быть представлено в виде файла, но представление и бытие - это два разных действия. ,
источник
The UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".