Почему «Все это файл» уникален для операционных систем Unix?


70

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

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

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


26
sidenote: macosx работает поверх unix.
Акира

2
Между прочим, в то время как высокоуровневые вещи не используют файлы (как dbus или X в * nix), низкоуровневая Windows построена вокруг дескрипторов. С ними вы можете делать то же самое, что и файлы в * nix (открывать, закрывать, контролировать и, как правило, отправлять / получать), но вы должны быть программистом, чтобы увидеть этот интерфейс. Является ли это хорошей вещью, является вопросом предпочтения.
Марк

1
все это файл, кроме сетевых интерфейсов.
Элвин

8
@akira - OSX является сертифицированным Unix и не работает поверх него.
Роб

1
@akira Не на вершине Unix. OSX - одна из немногих сертифицированных ОС UNIX.
Let_Me_Be

Ответы:


53

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

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

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

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

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

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

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


29
OS X в основном Unix, так что особой разницы нет.
Slhck

6
есть еще кое- что, что является файловой моделью.
artistoex

1
Первый абзац просто не соответствует действительности. До Unix существовали операционные системы, и позже в Unix были обнаружены функции, в том числе перенаправление ввода / вывода.
Патрик Сеймур

3
Plan 9 имеет ту же концепцию. Все это файловая концепция, и ее даже называют «больше unix, чем unix»
Уильям

2
Windows (начиная с NT) идет немного дальше. Есть много устройств, которые ведут себя как файлы, такие как последовательные порты и именованные каналы. Вы можете написать всем, используя WriteFile. Но, кроме того, есть еще большая категория «объектов синхронизации», которая включает в себя не только файлы, но и мьютексы.
MSalters

34

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

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


6
это не должен быть ответ с наибольшим количеством голосов, он не отвечает на вопрос, он просто просит людей задать еще один вопрос: «Почему« Все это файл »в Multics?»
Ли Райан

13
@LieRyan: На самом деле он отвечает на вопрос, почему он уникален : это не так.
Горан Йович

1
Люди Unix просто взяли свои идеи с собой, когда проект Multics был прекращен, и переименовали его. Unix просто игра слов - один против многих.
Fiasco Labs

2
@ Ли Райан - Вопрос был не в том, почему все это файл, а в том, почему он уникален. Как мы с Гораном указывали, это не так.
Патрик Сеймур

1
Вопрос действительно относится к «Unix операционной системы с », то есть в семье. Это семейство включает в себя Multics и Linux.
MSalters

28

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

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

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

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

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


1
Плюс 1 за упоминание плана 9. ИМХО Предохранитель приближает план 9 к реализации с помощью специальных и итераций.
Дэнни Стейпл

2
Ну, план 9 - это план 9, он уже работает. Предохранитель просто позволяет расширять файловую систему пользователя интересными способами. Мне нравится тот, где IRC рассматривается как FS.
Подмастерье Компьютерщик

Хм - вы знаете, я имел в виду искать это целую вечность с тех пор, как узнал об этом в книге Эрика Рэймонда несколько лет назад ... На самом деле вы наконец-то меня перепутали с горбом "давай-ка", я скачал ISO и опробовать его.
Дэнни Стейпл

2
Я полагаю, что есть и более новая версия, которая называется Inferno
Journeyman Geek

1
+1 за то, что вы заметили, что Darwin для OS X тоже «настоящий Unix».
calum_b

18

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

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

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

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

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

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

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


12

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

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

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

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


Именно так! В Unix все является файловым дескриптором (не обязательно файлом!), То есть все (кроме памяти) является вводом-выводом, даже файлами. Доступ к файлам должен осуществляться так, как если бы они были потоками ввода / вывода (хотя они доступны для поиска, поэтому они доступны в произвольном порядке, но это чрезмерная стоимость дополнительных системных вызовов). (за исключением того, что мало что можно сделать, mmap()конечно ....)
Грег А. Вудс

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, но ваш пробег может отличаться.


1
Что ж, в Multics все является памятью, кроме ввода / вывода (хотя это также может быть отображено на память). В Unix все (кроме памяти) является файловым дескриптором , включая файлы. Т.е. в Unix все есть I / O.
Грег А. Вудс

1
Кстати, теперь существует эмулятор, который будет загружать и запускать Multics.
Грег А. Вудс

3

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

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

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


1
Вы не предоставили ссылку. В ходе некоторых поисков я обнаружил yarchive.net/comp/linux/everything_is_file.html , цитируя ответы Торвальда в цепочке писем, в которой он неявно подтверждает, что модель должна быть «все является файлом».
bgvaughan

1
На самом деле @bgvaughan все наоборот: yarchive.net/comp/linux/everything_is_file.html приводит цитатуThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
LAFK говорит, что восстановите Монику

1
@LIttleAncientForestKami: и Unix традиционно рассматривает файлы как просто потоки байтов, в отличие от систем, которые обрабатывают файлы как потоки записей (или имеют как потоки байтов, так и потоки записей), как коллекции потоков (или вилок ресурсов), или имеют более сложные модели, где было несколько разных способов доступа к нескольким видам объектов.
ниндзя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.