Neden “Her şey bir dosya” Unix işletim sistemlerine özgüdür?


70

İnsanların "Unix'in benzersiz felsefesi, her şeyi bir dosya olarak ele alması" veya "Unix'te her şey bir dosyadır" dediğini sık sık duyuyorum. Ama neden Unix'e özgü olduğunu hiç kimsenin açıklayacağını hiç duymadım.

Peki, bu neden Unix'e özgü? Windows ve Mac gibi diğer işletim sistemleri dosyalarda çalışmıyor mu?

Ve diğer işletim sistemlerine kıyasla benzersiz mi?


26
sidenote: macosx bir unix'in üstüne çıkar.
akira

2
fwiw, daha üst düzeydeki dosyalar dosya kullanmazken (tıpkı dbus veya X in * nix'te olduğu gibi) düşük seviyeli Windows tutamaçların etrafında kuruludur. * Nix'deki (aç, kapat, kontrol et ve genellikle gönder / al) dosyalarında olduğu gibi, birçok şeyi yapabilirsiniz, ancak bu arayüzü görmek için bir programcı olmanız gerekir. Bunun iyi bir şey olup olmaması bir tercih meselesidir.
Mark

1
ağ arayüzleri hariç her şey bir dosyadır.
Alvin

8
@akira - OSX, Unix sertifikasına sahiptir ve "üstünde" çalışmaz.
Rob,

1
@akira Bir Unix'in tepesinde değil. OSX sertifikalı az sayıda UNIX OS'den biridir.
Let_Me_Be

Yanıtlar:


53

Peki, bu neden Unix'e özgü?

Unix'ten önceki tipik işletim sistemleri, dosyalara tek yönlü işlem yaptı ve her çevresel cihaza o cihazın özelliklerine göre işlem yaptı. Yani, bir programın çıktısı diskteki bir dosyaya yazılmışsa, çıktının gidebileceği tek yer orasıydı; yazıcıya veya teyp sürücüsüne gönderemediniz. Her programın giriş ve çıkış için kullanılan her bir cihazın farkında olması ve alternatif I / O cihazları ile ilgilenmek için komut seçeneklerine sahip olması gerekiyordu.

Unix, tüm cihazları dosya olarak ele alır, ancak özel niteliklere sahiptir. Programları basitleştirmek için, standart giriş ve standart çıkış , bir programın varsayılan giriş ve çıkış cihazlarıdır. Bu nedenle, normalde konsol ekranı için tasarlanan program çıkışı herhangi bir yere, bir disk dosyasına veya bir yazıcıya veya bir seri bağlantı noktasına gidebilir. Buna G / Ç yönlendirme denir .

Windows ve Mac gibi diğer işletim sistemleri dosyalarda çalışmıyor mu?

Tabii ki tüm modern işletim sistemleri çeşitli dosya sistemlerini destekler ve "dosyalar üzerinde çalışabilir", ancak buradaki ayrım cihazların nasıl kullanıldığı? Mac'i bilmiyorum, ancak Windows bazı G / Ç yönlendirmeleri sunuyor.

Ve diğer işletim sistemlerine göre benzersiz olan nedir?

Artık değil. Linux aynı özelliğe sahiptir. Elbette, bir işletim sistemi G / Ç yönlendirmesini benimserse, diğer Unix özelliklerini kullanma eğiliminde olur ve sonunda Unix benzeri biter.


29
OS X temel olarak Unix'tir, bu yüzden fazla bir fark yoktur.
slhck

6
her şey bir dosya modeli için biraz daha var .
artistoex

1
Açılış paragrafı sadece doğru değil. Unix'ten önce işletim sistemleri vardı ve daha sonra Unix'te G / Ç yönlendirmesi de dahil olmak üzere bulunan özelliklere sahiplerdi.
Patrick Seymour

3
Plan 9 aynı konsepte sahiptir Her şey bir dosya konseptidir ve hatta "daha fazla unix'ten sonra unix" olarak da adlandırılmıştır
William

2
Windows (NT’den beri) biraz daha ileri gidiyor. Seri portlar ve adlandırılmış yöneltmeler gibi dosya gibi davranan birçok cihaz var. Tüm kullanarak yazabilirsiniz WriteFile. Ancak ek olarak, sadece dosyaları değil aynı zamanda muteksleri içeren daha büyük bir "senkronizasyon nesneleri" kategorisi vardır.
MSalters,

34

"Her şey bir dosyadır" fikri Multics'ten geldi. Unix tasarımcıları çalışmalarının çoğunu öncüllere, özellikle de Multics'e dayandırdı. Nitekim, hesaplamada bir çok şey öncüllere dayanıyor.

Geç Dennis Ritchie'nin Unix'in tasarımındaki çalışmalarını daha fazlası için okuyabilirsiniz. Ağaç benzeri dosya sistemi, komut kabuğu ve dosyaların yapılandırılmaması gibi Multics'ten "kopyaladıkları" şeyleri referans aldı. Unix milletinin Multics milletinden çaldığını ima etmiyorum. Tüm niyet ve amaçlar için, aynı millet oldu.


6
bu, en yüksek oyu alan cevap olmamalı, soruyu cevaplamıyor, başka bir soru sormak için insanlara soruyor: "Neden Multics'te 'Her Şey Dosyadır?"
Yalan Ryan

13
@LieRyan: Aslında neden benzersiz olduğu sorusuna cevap veriyor: değil.
Goran Joviç,

1
Unix halkı, Multics projesi sonlandırılıp yeniden adlandırıldığında fikirlerini de yanlarına aldılar. Unix sadece kelimeler üzerinde bir oyun olmak - bir tane VS çok.
Fiasco Labs,

2
@Lie Ryan - Soru neden her şeyin bir dosya olmadığı, neden benzersiz olduğu değildi. Goran ve ben işaret ettiğimiz gibi değil.
Patrick Seymour

1
Asıl soru, “Unix işletim sistemi s ” anlamına geliyor, yani aile. Bu aile makul Multics ve Linux içerir.
MSalters,

28

Benzersiz? Hayır. Tanımlamak? Kesinlikle.

Bilinen bir hiyerarşide her şeyin bir dosya veya aygıt olması, her şey için aynı araç setini kullanabileceğiniz anlamına gelir. Bell Labs'tan Plan 9, dosya olarak donanım aygıtlarıyla daha da ileri götürür.

Daha da önemlisi, bu iki çok basit ve güçlü kavram sağlar. Gerektiği gibi borularla birlikte asılabilen One Thing Well (tm) yapan temel uygulamalar. Bir metin dosyasında bir şey bulmak ister misiniz? Kullanım catgöstermek için, onu geçmesine grepve gaz ile pişiriyoruz. Bu , 'Unix' yolunun gerçek gücü - muazzam esneklik için birlikte çalışan özel uygulamalar.

Mac OS X, Unix felsefesini de izler, ancak daha iyi gizlenir (bir 'uygulama' paketi gerçekten dosyalarla dolu bir dizindir) ve aslında FreeBSD parçalarını kullanan NeXT'den türetilmiş , uygun ve sertifikalı bir Unix'tir .

Windows'da, o zamandan beri olay görüntüleyicisi ve kayıt defteri gibi bazı ikili bileşenler vardır ve bu senaryoda bazı hız avantajları vardır.


1
Plan 9'dan bahsetmek için Artı 1. IMHO Sigorta, geçici ve yineleme yoluyla bir uygulamaya 9. planı daha da yakınlaştırıyor.
Danny Staple,

2
Plan 9, plan 9, zaten işe yarıyor. Sigorta sadece kullanıcı alanı dosya sisteminin genişlemesini sağlar .. ilginç şekillerde. IRC'nin bir FS olarak algılandığı yeri seviyorum.
Journeyman Geek

Hmm - Yıllar önce bir Eric Raymond kitabında öğrendiğimden beri uzun zamandır araştırmak istemiştim. ISO ve denemek.
Danny Staple,

2
Ben de daha yeni bir sürümü olduğuna inanıyorum, inferno
Journeyman Geek

1
OS X’in Darwin’inin de “gerçek bir Unix” olduğunu belirtti.
calum_b

18

Özel dosyalar yüzünden. İnsanlar "her şey Unix'teki bir dosyadır" derken, ortak dosyalar ve dizinler aklında olan şey değildir. Özel dosyalar, birçoğu bulunan Unix benzeri işletim sistemlerine özgüdür. Bu yüzden özgü değildir Unix.

Özel dosyalar birçok amaca hizmet eder. Borular, soketler ve en önemlisi cihaz dosyaları var. Borular ve soketler, işlemler arasındaki iletişim akışlarıdır. Alt sistemlerin işlevselliğinin çoğu, kullanıcı alanı için cihaz dosyaları aracılığıyla kullanıma sunulur.

Borular ve Soketler

Programlar onları sıradan dosyalar kullandıkları gibi kullanırlar. Aslında çoğu zaman ne tür bir dosya kullandıklarını bile umursamıyorlar. Bu nedenle Unix komutları güçlü yeni sistemler oluşturmak için bu kadar çok şekilde birleştirilebilir. (Talaş cevabında I / O yönlendirmesine bakınız)

Aygıt Dosyaları

Daha önce de belirtildiği gibi, bunlar kullanıcı alanı için arayüzlere benzerler. Örneğin, cd tepsisini çıkarmak için, bir programcı ilk başta ilgili cihaz dosyasını açacaktır. Başka bir örnek: Programınızın sanal terminali değiştirmesini istiyorsunuz. Önce / dev / konsolunu açın.

Daha sonra ne olacağı sadece karakterleri göndermiyor için bu dosyaların ancak veren ) (ioctl 'ın üzerine kendilerine. Özel ioctl'lerin verebileceği aygıta göre değişir. Örneğin, konsol console_ioctl (4) belgesinde belgelenmiştir.


12

Muhtemelen bunu söylediğim için oyuna gireceğim, ama sanırım Unix’teki her şeyin bir dosya olduğunu söylemenin bir yanlışlık olduğunu düşünüyorum. Gerçek olan şey iki şey.

  1. Dosyalar ve aygıtlar (ve diğer birçok şey), açık, yakın, oku, yaz ve kontrol (ioctl) işlevlerinden oluşan bir arabirim ile modellenebilen nesnelerdir.
  2. Bu nesnelerin ad alanı hiyerarşiktir, yani bu nesneler bir hiyerarşide düzenlenir.

Bir dosya sistemi bu ad alanını uygular ve arayüz işlevlerinin bu nesnelere gönderilmesine izin veren çerçeveyi uygular. Bir dosya sistemi ilk önce dosyaları depolamak için kavramsallaştırıldı, ancak daha sonra ad alanı hiyerarşisindeki diğer nesneleri düzenlemek için işbirliği yapıldı. Nesne yönelimli olandan önceki polimorfizm örneği bir şeydi.

Sadece dosyaları çağırırken hiçbir zararı yoktur. Fakat gerçekte, bunlar daha genel nesnelerdir (böyle bir nesne olan bir dosya). Bu açıdan bakıldığında, bu fikir Unix'e özgü değil. Birçok başka işletim sistemi bu tür polimorfik nesnelerin hiyerarşilerini uygular.


Kesinlikle! Unix'te her şey bir dosya tanıtıcısıdır (mutlaka bir dosya değildir!), Yani her şey (bellek hariç) I / O, hatta dosyalardır. Dosyalara G / Ç akışları gibi erişilmesi gerekir (aranabilmelerine rağmen, rastgele erişilebilmelerine rağmen, bu ilave sistem çağrıları için aşırı maliyet). ( mmap()elbette neyle yapılabilecekler dışında ....)
Greg A. Woods

9

İnsanlar "Unix'te her şey bir dosyadır" derken, kastedilen, aynı zamanda dosya olmayan şeylerin de dosya olduğu anlamına gelir.

Elbette çoğu işletim sistemi dosyalarla çalışır. Metin dosyaları, görüntü dosyaları, ses dosyaları. Ancak, tüm işletim sistemleri aygıtları dosya olarak değerlendirmez. Bu önemli bir fark. / Dev / klasörümün içeriğini Ubuntu işletim sistemimde (Unix tabanlı) listeleyebilirsem, 200'den fazla cihazın listesini alırım. Bu cihazların bazıları donanımlıdır, ancak bir klasör içinde gösterilir. Örneğin sabit diskler, USB portları, fare ve klavye, ses aygıtları ve diğerleri arasında yazıcılar. Cihazların bazıları sanaldır, örneğin / dev / urandom, rasgele sayılarla dolu sonsuz bir dosya gibi davranır. Sabit diskimdeki gerçek bir dosya değil.

Bu cihazların tümü dosya olarak kabul edilir. Bu cihazlardan veri okuyabilir ve / veya veri yazabilirim. Burada , farklı cihazlardan gelen verileri ses cihazına kopyalamanın örnekleri vardır . Bu mümkündür çünkü dosya olarak kabul edilirler. (Geeky) sonucu, sabit sürücünün içeriğini, fare hareketini, bilgisayar belleğini veya bir görüntünün piksellerini dinleme yeteneğidir . Cihazların dosya olarak işlem görmemesi durumunda elde etmek çok daha zor olacaktır, çünkü her cihaz veri okumak ve yazmak için farklı yöntemler gerektirir.

Olduğu söyleniyor, "her şeyin" ne anlama geldiği, sistemden sisteme değişir. Örneğin, OS X, Unix'i temel alır, ancak / dev / ses aygıtına sahip değildir. CoreAudio adlı tescilli bir ses sistemi kullanır. Dolayısıyla bu durumda "hemen hemen her şey bir dosyadır" diyebilir. Ardından, "her şey bir dosya değil" olan Windows gibi sistemlerde, bir dosyanın içeriğini Unix'deki copy mydocument.txt >lpt1:yazıcı aygıtına kopyalamaya benzeyen bir dosya içeriğini yazıcı bağlantı noktasına (yazarak gibi ) kopyalayabilirsiniz. sistemleri.

Windows ve OS X gibi diğer işletim sistemleri dosyalarda çalışmıyor mu? Evet onlar yapar. Windows ve OS X dosyalar üzerinde çalışır, ancak Windows aygıtlara dosyalar olarak işlemez, bu da "her şey bir dosya" anlamına gelir.


8

Multics'in "her şey bir dosya" kaynağı olarak gösterildiğini anlıyorum, ancak aygıt dosyalarından, boru adı verilen dosyalardan, normal dosyalardan vb. Biraz daha derine bakmanız gerektiğini düşünüyorum. AUX, CON ve LP "sihirli dosya isimleri" olduğunda bile bu büyük bir fark yaratıyor.

Rob Pike tarafından " The Hideous Name " bölümüne bakınız . Unix dosya adlandırma sözdizimini, diğer bir deyişle VMS olmak üzere diğer birkaç sözdizimi ile karşılaştırır. Unix'in ortaya çıktığı 60'ların sonundaki / 70'lerin başındaki ana bilgisayar işletim sistemlerinin, modern zihnin olağanüstü rokoko dosyası adlandırma sözdizimini dikkate alacağı şeye sahip olduğunu unutmayın. VM / CMS veya NOS veya NOS / VE kullandığımdan bu yana yıllar geçti ve yalnızca Univac OS kullanan bir kişinin omzuna baktım, ancak tuhaflıkları düzenlilikten daha fazla saydım.

Multics'in çalıştığını hiç görmedim, ancak dosya sisteminde bir kağıt görebilirsiniz . Orijinal Unix’in Multics’ten biraz daha ileride "her şey bir dosya" olduğu görülüyor, ancak kilometreniz değişebilir.


1
Eh, Multics'te G / Ç hariç her şey hafızadır (yine de hafızaya eşlenebilir). Unix'te her şey (bellek hariç), dosyalar da dahil olmak üzere bir dosya tanıtıcısıdır . Unix'te yani her şey G / Ç'dir.
Greg A. Woods

1
BTW, şimdi Multics'i önyükleyen ve çalıştıracak bir emülatör var.
Greg A. Woods

3

Linus Torvalds'ın bile "her şey bir dosya" olduğu konusunda aynı fikirde olmadığını unutmayın. Eğer ararsanız "

her şey bir veri akışı

“Her şeyin bir dosya olmadığı, örneğin bellekteki bir soyut veri yapısı ya da işaretçi kesinlikle bir dosya olmadığı anlamına gelen ilginç felsefeler bulacaksınız, tamam, kesinlikle bir şey dosya olarak gösterilebilir , ancak temsil eden ve olmak iki farklı eylemdir. .


1
Bir link vermediniz. Bazı araştırmalarda, Torvald'ın yanıtlarını, modelin "her şey bir dosya" olması gerektiğini açıkça ima ettiği bir e-posta dizisinde alıntı yapan yarchive.net/comp/linux/everything_is_file.html buldum .
bgvaughan

1
Aslında @bgvaughan tam tersi: yarchive.net/comp/linux/everything_is_file.html fiyat teklifi veriyorThe UNIX philosophy is often quoted as "everything is a file", but that really means "everything is a stream of bytes".
Küçük Antik Orman Kami

1
@LIttleAncientForestKami: ve Unix, geleneksel olarak, dosyaları akışların (veya kaynakların her ikisinin akışlarını da içeren) akışların (veya kaynak çatallarının) akışlarını (ya da kaynak akışlarını içeren) akış olarak kabul eden sistemlerin aksine, yalnızca bayt akışları olarak görür. farklı nesnelere erişmek için çeşitli yollar bulunan daha karmaşık modeller.
ninjalj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.