Unix dosya sistemi yapısının avantajları nelerdir?


9

Linux'a Debian / Gnu Linux gibi bir uygulama yüklersem, uygulamaların dosyaları dosya sistemindeki birçok farklı dizine kopyalanır.

Bazı scriptler / usr / share .. / usr / local içine girer, / var .. / log .. etc / vb .

Benim için bu tamam çünkü dosya sistemi hakkında bir şey öğrendim ve dizinlerin çoğu belirli bir amaç için dosyaları tutmak için vardır. Bu, Unix felsefesinde çok iyi uyuyor "bir şey yap ve iyi yap"

Ama benim sorum, böyle bir dizin yapısının avantajları nelerdir? Yoksa sadece eski unix günlerinin mirası. (örneğin, bir uygulamanın tüm dosyalarının belirli bir "klasörde" olduğu tek pencerenin kullanımıyla karşılaştırıldığında)

Yanıtlar:


9

Bana göre en kolay düşünülebilen avantaj, benzer dosyaların aynı dizin ağacında yaşamasıdır. Yapılandırma dosyaları canlı /etc, günlük dosyaları ve / veya çalışma zamanı izleme dosyaları canlı /var/log, yürütülebilir dosyalar canlı , /usr/binPID dosyaları gibi çalışma zamanı bilgileri yaşıyor /var/run. NTP yapılandırma dosyasında ne olduğunu bilmek ister misiniz? Dizini olarak değiştir /etcve yap ls ntp*. Bazı geleneksel dosya sistemi virüsünün onları etkilememesi için bazı programların yürütülebilir dosyaları izlemesini mi istiyorsunuz? Her şey /usr/binve /usr/local/binizlenmesi gerekiyor.

Düşünebileceğim ikinci avantaj, Unix organizasyon tarzının veri ve yürütülebilir dosyaların ayrılmasını teşvik etmesidir. Yürütülebilir dosyalar, şablonların bulunduğu yerden ( /usr/sharemuhtemelen) ve verilerin yaşandığı yerden çok uzakta olan bir dizinde yaşar. Bu ayırma, Unix / Linux / * BSD'nin dosya sistemi virüslerine Windows veya eski OSX Mac sahiplerinden daha fazla direnç göstermesinin bir nedeni olabilir.


Bu iyi bir nokta. Yürütülebilir ve veri, şablon, yapılandırma dosyalarının ayrılması neden virüslere karşı daha fazla koruma için bir sebeptir?
Jan Koester

3
Dünyadaki virüslerin ve solucanların birçoğu (ancak hepsi değil), verileri yürütülebilir dosyaya değiştirme yeteneği nedeniyle yayılır: yığın taşmaları ve SQL enjeksiyonu ve kod enjeksiyonu bu şekilde çalışır. "Word" makro virüsleri, "Word" makroları .doc dosyalarına dahil edildiğinden en azından kısmen yayılır. Verilerin yürütülebilir dosyadan dosyaya göre ayrılması, bir dizindeki verileri, bir saniyede yürütülebilir, 3'ünde şablonlar, dördüncü sırada yapılandırmak, verileri karıştırmak ve yürütülebilirleri yerine koymak için daha fazla engel koyar.
Bruce Ediger

2
Veri ve yürütülebilir ayırma bağımsız değişkeni tam bir saçmalıktır. Dosya sistemi organizasyonu bir insanın yararınadır; bitler arasında birbirlerine veya herhangi bir şeye cooties vermelerini engelleyen bazı fiziksel ayrımlar var gibi değil. Genel olarak daha güçlü, daha sıkı uygulanmış izinler modeli nedeniyle UNIX'in güvenliği tarihsel olarak daha iyidir.
kabarık

@fluffy ayrı dosya sistemleri biraz daha güçlü bir ayırma sunan, ancak ayrılması mümkün değil gibi bu nokta kısmen tartışmaya açıktır /bin, /etcdan, /.
jw013

@fluffy - kabul edildi, "fiziksel" bir ayrım yok veya mümkün. Ancak bu, ada göre bir ayrımdır. Kötü amaçlı yazılım, şablonları veya diğer verileri bulmak için başka bir dizine ("." Yerine veya $ 0 veya başka bir adla) bakmak zorundadır. Mutlak güvenlik değil, cam pencereyi kapatmaktan daha fazlası mutlak güvenliktir. Güvenlik, her ek iş birimi için marjinal değeri olan ekonomik bir maldır. Her biraz yardımcı olur.
Bruce Ediger

11

Hangi kuruluş seçilirse seçilsin, bazı şeyleri daha kolay ve bazılarını daha zor hale getirecektir.

Türleri, Unix arada dosyaları organize (içine bin, man, lib/python, ...), daha kolay dosyalarını kullanmayı kolaylaştırır. Bir komutu çalıştırmak istiyorsanız, hangi paketi sağlarsa sağlayın onu nerede bulacağınızı bilirsiniz. Dokümanları aramak istiyorsanız, bunların hepsi tek bir yerde. Bazı programlar bir Vim sözdizimi vurgulama modülü, zsh tamamlama işlevi veya Python bağlamaları sağlarsa, ilgili dosya vim / zsh / python'un bulabileceği bir yerde olacaktır.

Unix ayrıca dosyaları kullanım şekillerine göre düzenler. Yapılandırma dosyaları girilir /etc, normal işlemde /usrdeğişmeyen dosyalar girilir ve otomatik olarak değişen dosyalar girilir /var. Kullanıcı verileri altına girilir /home. Bu, yapılandırma yönetimi için çok kullanışlıdır (nelerin /etcyanı sıra kurulu paketler listesini yönetin ). Yedekleme stratejilerini tanımlamak da yararlıdır: içeride /etcve /homekritik derecede önemlidir, ancak içeride olanlar /usrtekrar kolayca indirilebilir.

Unix yolunun ana maliyeti, bir yazılım parçası kurmanın birçok dizine yayılmış olmasıdır. Bununla birlikte, modern unix sistemleri zaten paket yöneticilerine sahiptir; birçok dizinde dosya yönetmek, yaptıkları en karmaşık şey değildir (bağımlılıkları izlemek çok yararlı ve zordur).

Bunu Windows ile karşılaştırın. Windows, paket yönetimi olmadan başladı ve her uygulama bir yerde kendi dizinini oluşturdu. Tüm dosyalar normalde bu dizinin içinde olur: programlar, statik veriler, kullanıcı verileri,… Bazen, programların çakışmalara bakılmaksızın ortak bir sistem dizinine düşeceği kütüphaneler (“DLL cehennem”) hariç. Zamanla, Windows çok kullanıcılı hale geldi ve kullanıcı dizinlerinin sistem dizinlerinden ayrılmasını gerektirdi. Windows ayrıca yapılandırma dosyaları (Unix'ler /etc) ve bazı sistem verileri (Unix'ler) için merkezi bir yer oluşturdu/var), kayıt defteri. Bu, büyük ölçüde paket yönetimi eksikliği ve tek kullanıcılı bir sistem olarak erken tarih nedeniyle daha tarihsel bir eserdir. Windows yaklaşımının birçok kısıtlaması vardır: yazılım paketlerinin kolayca etkileşime girmesine izin vermez. Örneğin, yüklü yazılımların çoğu varsayılan komut arama yoluna gitmez, bu nedenle herhangi bir komut dosyası biçimiyle kötü etkileşime girer. Yükleyiciler genellikle özel bir durum olarak bir menü simgesi sağlar - ayrı bir sistem dizinine (à la Unix!).

Unix yaklaşımının bir sınırlaması, bir paketin birden çok sürümünün bir arada bulunmasına kolayca izin vermemesidir, bu da paket yükseltilirken özellikle sorunludur. Her iki dünyanın en iyisini elde etmenin bir yolu, her paketi kendi dizininde (bir /optyapı) açmak ve paket dizinlerinden bir /usryapıya sembolik bağlantı ormanları oluşturmak olacaktır . Stow gibi bir yazılım bunu yapar.

Özetle, Unix yaklaşımı dosyaları kullanmayı, dosyaları yönetmeyi ve paketlerin etkileşimine izin vermeyi kolaylaştırır; paket yönetim yazılımı gerektirir, ancak yine de bu istenir. Windows yaklaşımı paketleri elle yönetmeyi kolaylaştırır, ancak kullanışlı işlevsellik elde etmek için Unix modeline yönelmek zorundadır.


1
Muhteşem. Bence olsa da, sadece kullanılan tek tek paketler yönetmek daha kolay olması. Windows kayıt defterinin ortaya çıkması tüm bunları ve ardından bazılarını değiştirdi. Sadece devasa ve labirent değil, aynı zamanda kasıtlı olarak da öyle - bayt kodundaki bazı değerlerle, diğerleri değil ve yapının gerçek kafiye veya nedeni değildir. Sanırım yönetilen bir işletim sistemi geliştirmek ve ticari sırları ve özel yöntemleri korumak istiyorsanız, böyle olmalı : kafa karıştırıcı.
mikeserv

3

Yukarıda belirtilmeyen birincil fayda ve yapının tarihsel nedenlerinden biri, önyükleme işleminin farklı aşamalarında bulunan birden çok birim / disk üzerinde fiziksel ayırmadır.

Diğer bir avantaj, çeşitli dizinlerin dizinin verileri için optimize edilmiş birimlere / dosya sistemlerine monte edilebilmesidir. Örneğin, tmpfsiçin /run; ve /sbinsalt okunur medyada / ROM'da.

Ayrıca, birimler yerel veya uzak, kişisel veya paylaşılan olabilir.

Son olarak, UNIX (OS X ), Linux ( ROX Desktop ) ve Windows'ta ( PortableApps.com ) kullanılan alternatif bir yaklaşım için (@fluffy tarafından belirtilen) Uygulama Dizini'ne bakın ..app


1

Paylaşılan ve yapılandırma dosyalarının bir uygulama için nerede olduğunu tahmin etmenin kolay olmasının yanı sıra, bu düzen için gerçekten herhangi bir avantaj yoktur. UNIX'in bu tür bir düzende uzun bir mirası var ve onu kırmak oldukça zor olurdu. Bununla birlikte, bazı UNIX dağıtımları modellerini değiştirdi - yalnızca eski yerleri eski amaçlar için sağlıyorlar ve diğer uygulamalar kendi küçük dizin / paketinde paketleniyor. Mac OS X bunun en önemli örneğidir ve aynı şeyi yapan birkaç belirsiz Linux dağıtımı vardır (ve Android benzer bir şey yapar, sadece biraz daha ileri gider ve her uygulamayı kendi kullanıcı kimliği altında da yükler ve başlatır ).

Bir dosya sistemi kuralının sağladığı ana şey sadece - bir kuraldır, böylece insanlar dosyaları nerede arayacaklarını bilirler (elle veya kodda olsun). Bunun bir şekilde diğerinin üzerinde olmasının gerçek bir teknik nedeni yoktur.

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.