Dlaczego „Wszystko jest plikiem” jest unikatowe dla systemów operacyjnych Unix?

70

Często słyszę, jak ludzie mówią: „Unikalną filozofią Uniksa jest to, że traktuje wszystko jak plik” lub „W Unixie wszystko jest plikiem”. Ale nigdy nie słyszałem, żeby ktokolwiek tłumaczył, dlaczego jest unikatowy dla Uniksa.

Dlaczego jest to unikatowe dla Uniksa? Czy inne systemy operacyjne, takie jak Windows i Mac, nie działają na plikach?

Czy jest wyjątkowy w porównaniu do innych systemów operacyjnych?

Jakiś student Noob
źródło
26
sidenote: macosx działa na Uniksie.
akira,
2
fwiw, podczas gdy rzeczy wyższego poziomu nie używają plików (tak jak dbus lub X w * nix) Windows niskiego poziomu jest zbudowany wokół uchwytów. Możesz zrobić z nimi wiele tego samego, co pliki na * nix (otwieranie, zamykanie, kontrola i zwykle wysyłanie / odbieranie), ale musisz być programistą, aby zobaczyć ten interfejs. To, czy to dobrze, zależy od preferencji.
Mark
1
wszystko jest plikiem, oprócz interfejsów sieciowych.
alvin,
8
@akira - OSX ma certyfikat Unix i nie działa „nad nim”.
Rob
1
@akira Nie na wierzchu Uniksa. OSX jest jednym z niewielu certyfikowanych systemów operacyjnych UNIX.
Let_Me_Be,

Odpowiedzi:

53

Dlaczego jest to unikatowe dla Uniksa?

Typowe systemy operacyjne przed Unixem traktowały pliki w jeden sposób i traktowały każde urządzenie peryferyjne zgodnie z charakterystyką tego urządzenia. Oznacza to, że jeśli dane wyjściowe programu zostały zapisane w pliku na dysku, było to jedyne miejsce, w którym dane wyjściowe mogły się udać; nie można wysłać go do drukarki lub napędu taśmowego. Każdy program musiał być świadomy każdego urządzenia używanego do wejścia i wyjścia oraz mieć opcje poleceń do obsługi alternatywnych urządzeń I / O.

Unix traktuje wszystkie urządzenia jak pliki, ale ze specjalnymi atrybutami. Aby uprościć programy, standardowe wejście i wyjście są domyślnymi urządzeniami wejścia i wyjścia programu. Tak więc wyjście programu normalnie przeznaczone na ekran konsoli może zostać przeniesione w dowolne miejsce, do pliku na dysku, drukarki lub portu szeregowego. Nazywa się to przekierowaniem we / wy .

Czy inne systemy operacyjne, takie jak Windows i Mac, nie działają na plikach?

Oczywiście wszystkie współczesne systemy operacyjne obsługują różne systemy plików i mogą „operować na plikach”, ale różnica polega na tym, jak obsługiwane są urządzenia? Nie wiem o Macu, ale Windows oferuje pewne przekierowanie I / O.

W porównaniu z innymi systemami operacyjnymi jest on wyjątkowy?

Już nie. Linux ma tę samą funkcję. Oczywiście, jeśli system operacyjny przyjmie przekierowanie I / O, wówczas zwykle używa innych funkcji Uniksa i ostatecznie kończy się na Uniksie.

trociny
źródło
29
OS X to w zasadzie Unix, więc nie ma dużej różnicy.
slhck
6
jest coś więcej we wszystkim, co jest w modelu pliku.
artistoex,
1
Pierwszy akapit po prostu nie jest prawdziwy. Przed Unixem istniały systemy operacyjne, które miały później funkcje w Unixie, w tym przekierowanie I / O.
Patrick Seymour,
3
Plan 9 ma tę samą koncepcję Wszystko jest pojęciem pliku, a nawet nazwano go „więcej unix niż unix”
William
2
Windows (od NT) idzie nieco dalej. Istnieje wiele urządzeń, które zachowują się jak pliki, takie jak porty szeregowe i nazwane potoki. Możesz pisać do wszystkich za pomocą WriteFile. Ale dodatkowo istnieje jeszcze większa kategoria „obiektów synchronizacji”, która obejmuje nie tylko pliki, ale także muteksy.
MSalters,
34

Pomysł, że „wszystko jest plikiem” pochodzi od Multics. Projektanci Uniksa oparli wiele swoich prac na poprzednikach, zwłaszcza Multics. Rzeczywiście, wiele rzeczy w informatyce opiera się na poprzednikach.

Możesz przeczytać więcej na temat pracy Dennisa Ritchiego w projektowaniu Uniksa, aby uzyskać więcej. Odniósł się do rzeczy, które „skopiowali” z Multics, takich jak drzewiasty system plików, powłoka poleceń i brak strukturyzacji plików. Nie sugeruję, że ludzie z Uniksa ukradli ludziom z Multics. Pod każdym względem byli to ci sami ludzie.

Patrick Seymour
źródło
6
to nie powinna być najwyższa głosowana odpowiedź, nie odpowiada na pytanie, po prostu błaga ludzi, aby zadali kolejne pytanie: „Dlaczego„ wszystko jest plikiem ”w Multics?”
Lie Ryan,
13
@LieRyan: W rzeczywistości odpowiada na pytanie, dlaczego jest wyjątkowy : nie jest.
Goran Jovic,
1
Ludzie uniksowi zabrali ze sobą swoje pomysły, kiedy projekt Multics został przerwany i zmieniono jego nazwę. Unix to po prostu gra słów - jedna VS wiele.
Fiasco Labs,
2
@Lie Ryan - Pytanie nie brzmiało: dlaczego wszystko jest plikiem, tylko dlaczego jest wyjątkowe. Jak zauważyliśmy z Goranem, tak nie jest.
Patrick Seymour,
1
Pytanie naprawdę odnosi się do systemu operacyjnego Unix „ s ”, czyli rodziny. Ta rodzina rozsądnie obejmuje Multics i Linux.
MSalters,
28

Wyjątkowy? Nie. Definiowanie? Absolutnie.

Posiadanie wszystkiego jako pliku lub urządzenia w znanej hierarchii oznacza, że ​​możesz używać tego samego zestawu narzędzi do wszystkiego. Plan 9 firmy Bell Labs przenosi to dalej nawet na urządzenia sprzętowe jako pliki.

Co ważniejsze, pozwala to na dwie bardzo proste i potężne koncepcje. Podstawowe narzędzia, które wykonują One Thing Well (tm), które można w razie potrzeby łączyć ze sobą za pomocą rur. Chcesz znaleźć coś w pliku tekstowym? Użyj, cataby to pokazać, przepuścić grep, a gotujesz na gazie. To prawdziwa potęga „uniksowego” sposobu - wyspecjalizowane aplikacje współpracujące ze sobą, zapewniające ogromną elastyczność.

Mac OS X również działa zgodnie z filozofią Unix, ale jest lepiej ukryty (pakiet „aplikacji” to tak naprawdę katalog pełen plików), a właściwie jest to właściwy, certyfikowany Unix, wywodzący się z NeXT , który korzystał z bitów FreeBSD .

W systemie Windows istnieją pewne komponenty binarne, takie jak przeglądarka zdarzeń i rejestr, oraz pewne zalety szybkości w tym konkretnym scenariuszu.

Journeyman Geek
źródło
1
Plus 1 za wzmiankę o planie 9. Bezpiecznik IMHO przybliża plan 9 do wdrożenia poprzez ad-hoc i iterację.
Danny Staple,
2
Cóż, plan 9 to plan 9, to już działa. Fuse pozwala tylko na rozbudowę systemu plików w przestrzeni użytkownika na ... ciekawe sposoby. Podoba mi się ten, w którym IRC jest traktowany jak FS.
Journeyman Geek
Hmm - wiesz, chciałem to sprawdzić od wieków, odkąd dowiedziałem się o książce Erica Raymonda lata temu ... W końcu przeszedłeś mnie przez garb „podejdź do tego”, pobrałem ISO i wypróbowanie go.
Danny Staple,
2
Sądzę, że jest też nowsza wersja, zwana piekłem
Journeyman Geek
1
+1 za zauważenie, że Darwin z OS X jest również „prawdziwym Uniksem”.
calum_b
18

Z powodu specjalnych plików. Kiedy ludzie mówią „wszystko w Uniksie”, zwykłe pliki i katalogi nie mają na myśli. Pliki specjalne są unikatowe dla systemów uniksopodobnych, których jest wiele. Więc to nie jest unikalny w systemie Unix.

Pliki specjalne służą wielu celom. Istnieją np. Rury, gniazda i, co najważniejsze, pliki urządzeń. Rury i gniazda są strumieniami komunikacji między procesami. Wiele funkcji podsystemów jest udostępnianych przestrzeni użytkownika za pomocą plików urządzeń.

Rury i gniazda

Programy używają ich tak, jak zwykłych plików. W rzeczywistości przez większość czasu nie dbają nawet o to, jakiego rodzaju pliku używają. Właśnie dlatego komendy Unix można tak różnorodnie łączyć, aby tworzyć nowe potężne systemy. (Patrz przekierowanie we / wy w odpowiedzi na trociny)

Pliki urządzeń

Jak wspomniano wcześniej, działają one jak interfejsy dla przestrzeni użytkownika. Na przykład, aby wysunąć tacę cd, programista najpierw otworzy odpowiedni plik urządzenia. Kolejny przykład: chcesz, aby Twój program zmienił terminal wirtualny. Najpierw otwórz / dev / console.

Co dzieje się dalej nie wysyła zwykłe znaki do tych plików, ale wydawanie ioctl () „s na nich. Poszczególne ioctl, które możesz wydać, zależą od urządzenia. Np. Konsola jest udokumentowana w konsoli_ioctl (4)

artistoex
źródło
12

Prawdopodobnie zostanę oskarżony o to, ale myślę, że powiedzenie, że wszystko w Unixie jest plikiem, jest w rzeczywistości błędem. Tak naprawdę to dwie rzeczy.

  1. Pliki i urządzenia (i wiele innych rzeczy) to obiekty, które można modelować za pomocą interfejsu zawierającego funkcje otwierania, zamykania, odczytu, zapisu i sterowania (ioctl).
  2. Przestrzeń nazw dla tych obiektów jest hierarchiczna, tzn. Obiekty te są zorganizowane w hierarchię.

System plików implementuje tę przestrzeń nazw i implementuje strukturę, która umożliwia wysyłanie funkcji interfejsu do tych obiektów. System plików był początkowo konceptualizowany do przechowywania plików, ale następnie kooptowano go do organizowania innych obiektów w hierarchii przestrzeni nazw. Przykładem polimorfizmu sprzed zorientowania obiektowego była rzecz.

Wywoływanie wszystkich plików nie jest szkodliwe. Ale w rzeczywistości są to bardziej ogólne obiekty (plik jest jednym z takich obiektów). Z tej perspektywy ten pomysł w ogóle nie jest unikalny dla Uniksa. Wiele innych systemów operacyjnych implementuje takie hierarchie obiektów polimorficznych.

Ziffusion
źródło
Dokładnie! W Uniksie wszystko jest deskryptorem pliku (niekoniecznie plik!), Tzn. Wszystko (oprócz pamięci) to We / Wy, nawet pliki. Pliki muszą być dostępne tak, jakby były strumieniami we / wy (chociaż można je wyszukiwać, więc są one losowo dostępne, ale to ekstremalny koszt dodatkowych wywołań systemowych). (z wyjątkiem tego, co niewiele można mmap()oczywiście zrobić ...)
Greg A. Woods
9

Kiedy ludzie mówią: „W Uniksie wszystko jest plikiem”, to znaczy, że także rzeczy, które nie są plikami, są traktowane jak pliki.

Oczywiście większość systemów operacyjnych działa z plikami. Pliki tekstowe, pliki graficzne, pliki dźwiękowe. Ale nie wszystkie systemy operacyjne traktują urządzenia jak pliki. To ważna różnica. Jeśli wymienię zawartość mojego folderu / dev / w moim systemie operacyjnym Ubuntu (który jest oparty na Uniksie), otrzymam listę ponad 200 urządzeń. Niektóre z tych urządzeń są sprzętowe, ale są wyświetlane w folderze. Na przykład dyski twarde, porty USB, mysz i klawiatura, urządzenia audio i drukarki. Niektóre urządzenia są wirtualne, na przykład / dev / urandom, który zachowuje się jak nieskończony plik pełen losowych liczb. To nie jest prawdziwy plik na moim dysku twardym.

Wszystkie te urządzenia są traktowane jako pliki. Potrafię czytać dane i / lub zapisywać dane na tych urządzeniach. Oto przykłady kopiowania danych z różnych urządzeń do urządzenia audio. Jest to możliwe, ponieważ są traktowane jak pliki. (Naukowy) wynik to zdolność do słuchania zawartości dysku twardego, ruchu myszy, pamięci komputera lub pikseli obrazu. Byłoby to znacznie trudniejsze do osiągnięcia, gdyby urządzenia nie były traktowane jak pliki, ponieważ każde urządzenie wymagałoby różnych metod odczytu i zapisu danych.

Biorąc to pod uwagę, to, co oznacza „wszystko”, różni się w zależności od systemu. Na przykład OS X jest oparty na Uniksie, ale nie ma urządzenia / dev / audio. Wykorzystuje zastrzeżony system audio o nazwie CoreAudio. W takim przypadku można powiedzieć „prawie wszystko jest plikiem”. Następnie w systemach takich jak Windows, w których „wszystko nie jest plikiem”, możesz nadal wykonywać takie czynności, jak kopiowanie zawartości pliku do portu drukarki (wpisywanie czegoś podobnego copy mydocument.txt >lpt1:), co jest podobne do kopiowania dokumentu na drukarkę w systemie Unix systemy.

Czy inne systemy operacyjne, takie jak Windows i OS X, nie działają na plikach? Tak, robią. Windows i OS X działają na plikach, ale Windows nie traktuje urządzeń jak plików, co jest częścią tego, co znaczy „wszystko jest plikiem”.

Abe
źródło
8

Widzę, że Multics jest cytowany jako źródło „wszystko jest plikiem”, ale myślę, że musisz spojrzeć nieco głębiej niż tylko pliki urządzeń, nazwane potoki, zwykłe pliki itp. Itp. Musisz spojrzeć na składnię nazewnictwa plików. To duża różnica, nawet jeśli istnieją „magiczne nazwy plików” AUX, CON i LP.

Zobacz „ The Hideous Name ” Rob Pike. Porównuje uniksową składnię nazewnictwa plików z kilkoma innymi składniami, w szczególności VMS. Zauważ, że systemy operacyjne komputerów mainframe z przełomu lat 60. i 70., kiedy powstał Unix, miały to, co współczesny umysł uznałby za wyjątkowo rokokową składnię nazewnictwa plików. Minęły lata, odkąd korzystałem z VM / CMS, NOS lub NOS / VE i patrzyłem tylko przez ramię kogoś używającego systemu operacyjnego Univac, ale wystarczy powiedzieć, że dziwactwa przewyższały liczebność prawidłowości.

Nigdy nie widziałem, żeby Multics działał, ale w systemie plików widać papier . Wygląda na to, że oryginalny Unix zabrał „wszystko jest plikiem” nieco dalej niż Multics, ale przebieg może się różnić.

Bruce Ediger
źródło
1
Cóż, w Multics wszystko jest pamięcią, z wyjątkiem I / O (choć można to również odwzorować na pamięć). W Uniksie wszystko (oprócz pamięci) to deskryptor pliku , w tym pliki. Tj. W Uniksie wszystko jest we / wy.
Greg A. Woods,
1
BTW, teraz istnieje emulator, który uruchomi i uruchomi Multics.
Greg A. Woods,
3

Pamiętaj, że nawet Linus Torvalds nie zgadza się z tym, że „wszystko jest plikiem”. Jeśli szukasz „

wszystko jest strumieniem

„znajdziesz interesujące filozofie, jak rozumiemy, że wszystko nie jest plikiem, na przykład abstrakcyjna struktura danych w pamięci lub wskaźnik na pewno nie jest plikiem, OK, na pewno wszystko może być reprezentowane jako plik, ale reprezentowanie i bycie to 2 różne akcje .

Niklas Rosencrantz
źródło
1
Nie podałeś linku. Podczas niektórych poszukiwań znalazłem yarchive.net/comp/linux/everything_is_file.html , cytując odpowiedzi Torvalda w wątku e-mail, w którym pośrednio potwierdza, że ​​model powinien brzmieć „wszystko jest plikiem”.
bgvaughan,
1
W rzeczywistości @bgvaughan jest odwrotnie: yarchive.net/comp/linux/everything_is_file.html podaje cytatThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
LIttle Ancient Forest Kami
1
@LIttleAncientForestKami: i Unix tradycyjnie traktuje pliki jako zwykłe strumienie bajtów, w przeciwieństwie do systemów, które traktują pliki jako strumienie rekordów (lub miały oba strumienie bajtów i strumienie rekordów), jako kolekcje strumieni (lub rozwidlenia zasobów) lub miały bardziej złożone modele, w których istnieje kilka różnych sposobów dostępu do kilku różnych rodzajów obiektów.
ninjalj