Чому "Все - це файл" унікальний для операційних систем Unix?


70

Я часто чую, як люди говорять: «Унікальна філософія Unix - це те, що він ставиться до всього як до файлу» або «У Unix все є файлом». Але я ніколи не чув, щоб хтось пояснював, чому це унікально для Unix.

Отже, чому це унікально для Unix? Чи інші операційні системи, такі як Windows та Macs, не працюють над файлами?

І це унікально порівняно з іншими операційними системами?


26
sidenote: macosx працює на вершині Unix.
акіра

2
fwiw, тоді як матеріали вищого рівня не використовують файли (як dbus або X у * nix) Windows низького рівня побудований навколо ручок. Ви можете зробити те ж саме з ними, як ви можете файли на * nix (відкривати, закривати, контролювати і зазвичай надсилати / отримувати), але вам потрібно бути програмістом, щоб побачити цей інтерфейс. Чи це добре, це питання переваги.
Марк

1
все - це файл, крім мережевих інтерфейсів.
Альвін

8
@akira - OSX сертифікована Unix і не працює "поверх".
Роб

1
@akira Не на вершині Unix. OSX - одна з небагатьох сертифікованих ОС UNIX.
Let_Me_Be

Відповіді:


53

Отже, чому це унікально для Unix?

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

Unix розглядає всі пристрої як файли, але зі спеціальними атрибутами. Для спрощення програм стандартні пристрої введення та виводу програми є типовими пристроями введення та виведення програми. Таким чином, вихід програми, звичайно призначений для екрана консолі, може переходити куди завгодно, до файлу диска, принтера чи послідовного порту. Це називається перенаправленням вводу / виводу .

Чи інші операційні системи, такі як Windows та Macs, не працюють над файлами?

Звичайно, всі сучасні ОС підтримують різні файлові системи і можуть "працювати з файлами", але різниця полягає в тому, як обробляються пристрої? Не знаю про Mac, але Windows пропонує деякі перенаправлення вводу-виводу.

І порівняно з якими іншими операційними системами вона унікальна?

Насправді вже не. Linux має таку ж особливість. Звичайно, якщо ОС приймає перенаправлення вводу / виводу, воно, як правило, використовує інші функції Unix і в кінцевому підсумку виявляється подібним до Unix.


29
OS X в основному є Unix, тому різниці не так багато.
slhck

6
є трохи більше всього, що стосується файлової моделі.
artistoex

1
Вступний параграф просто не відповідає дійсності. До Unix були операційні системи, і вони мали функції, знайдені пізніше в Unix, включаючи перенаправлення вводу / виводу.
Патрік Сеймур

3
План 9 має таку ж концепцію. Все є файловою концепцією і навіть називається "більше unix ніж unix"
Вільям

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

34

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

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


6
це не має бути найвищою оцінкою, вона не відповідає на запитання, вона просто благає людей задати ще одне запитання: "Чому" Все є файлом "у мультимедіа?"
Лже Раян

13
@LieRyan: Насправді він відповідає на питання, чому він унікальний : це не так.
Горан Йович

1
Люди Unix просто взяли з собою свої ідеї, коли проект Multics був припинений та перейменований на нього. Unix - просто гра на словах - один VS багато.
Лабораторії Фіаско

2
@Lie Ryan - Питання не в тому, чому все є файлом, а в чому він унікальний. Як ми з Гораном зазначили, це не так.
Патрік Сеймур

1
Питання справді стосується "операційної системи Unix s ", тобто сім'ї. Ця сім'я розумно включає мультимедіа та Linux.
MSalters

28

Унікальний? Ні. Визначення? Абсолютно.

Маючи все як файл або пристрій у відомій ієрархії, ви можете використовувати один і той же набір інструментів для всього. План 9 від Bell Labs займає це ще більше, навіть апаратними пристроями як файлами.

Що ще важливіше, це дозволяє дві дуже прості та потужні концепції. Основні утиліти, які роблять One Thing Well (tm), які можна з'єднати з трубами за потребою. Хочете знайти щось у текстовому файлі? Використовуйте catдля показу, пропустіть його grep, і ви готуєте газ. У цьому справжня сила способу "Unix" - спеціалізовані програми, які працюють разом для величезної гнучкості.

Mac OS X також дотримується філософії Unix, але вона краще прихована (пакет "застосунків" - це справді каталог, повний файлів), а насправді це належний, сертифікований Unix, походить від NeXT , який використовував біти FreeBSD .

У Windows є деякі бінарні компоненти, такі як переглядач подій та реєстр, і в цьому конкретному сценарії є деякі переваги швидкості.


1
Плюс 1 для згадування плану 9. IMHO Fuse наближає план 9 до впровадження за допомогою ad-hoc та ітерації.
Danny Staple

2
Ну, план 9 - це план 9, сорта вже працює. Запобіжник просто дозволяє розширити файлову систему файлів простору цікавими способами. Мені подобається той, де IRC трактується як ФС.
Подорожник Geek

Хм - знаєте, я мав на увазі шукати це протягом століть з часу, коли дізнався через книгу Еріка Реймонда років тому ... Ви насправді нарешті перебрали мене через горб "обходьте його", я завантажив ISO та випробування.
Danny Staple

2
Я вважаю, що є і новіша версія, яка називається inferno
Journeyman Geek

1
+1 за те, що зазначив, що Дарвін OS X теж "справжній Unix".
calum_b

18

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

Спеціальні файли служать багатьом цілям. Є, наприклад, труби, розетки та, особливо, файли пристроїв. Труби та розетки - це потоки зв'язку між процесами. Значна частина функцій підсистем надається користувальницькому простору через файли пристроїв.

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

Програми використовують їх так само, як і звичайні файли. Насправді, більшість часу їх навіть не цікавить, який тип файлу вони використовують. Ось чому команди Unix можна настільки різноманітно поєднувати, щоб утворювати потужні нові системи. (Дивіться перенаправлення вводу-виводу у відповідь тирси)

Файли пристроїв

Як було сказано раніше, вони діють як інтерфейси для користувальницького простору. Наприклад, щоб витягнути лоток CD, програміст спочатку відкрив відповідний файл пристрою. Ще один приклад: ви хочете, щоб ваша програма перемикала віртуальний термінал. Першим відкрийте / 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
BTW, зараз існує емулятор, який буде завантажувати та запускати Multics.
Грег А. Вудс

3

Зверніть увагу, що навіть Лінус Торвальдс не згоден з тим, що "все є файлом". Якщо ви шукаєте "

все - це байстрик

"Ви знайдете цікаві філософії , як ми маємо в виду , що все це не файл, наприклад , абстрактна структура даних в пам'яті або покажчик, безумовно , не є файлом, добре , звичайно , все , що може бути представлена у вигляді файлу , але представляє і бути 2 різних дії .


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".
LITTLE стародавнього лісу Кі

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