Kök dizin neden / işareti ile belirtiliyor?


95

Bu konuda Google’da bazı araştırmalar yaptım, ancak sonuçlar bulanıktı. Neden /kök dizini belirtmek için kullanılır işaret. Bunun arkasında sağlam bir sebep var mı?


12
Bunun nedeni, '/' dizini ayırıcı olmasıdır ve kök dizinin kendisi de adsız olsa da, boş adın sonuna eklemeye cd /homeeşit olması , bu dizine erişim sağlar. cd /home//
SF.


11
Adsız, çünkü içeriden bakıldığında, görünen dizin ağacının sınırı. Görünür dizin hiyerarşisi, daha çok bir hiyerarşideki, yalnızca yol adı aramalarının bir chroot()çağrı ile değiştirildiği zamanlar gibi bir alt ağaç olabilir , ancak içeriden bakıldığında, bu soyutlanır.
Thomas Nyman

14
Çünkü boş dize korkunç bir seçim olurdu!
Bakuriu

3
Bahsedilenlere ek olarak, kökü belirtmek için / kullanmak, mutlak ve göreceli yol adları açısından belirli yan etkiler sağlar. /some/dirHER ZAMAN anlamı (root)/some/dirise some/dirher zaman geçerli çalışma dizininin göre olur. Bu ilke, web-URL kullanımına da aktarılabilir.
Tor Valamo,

Yanıtlar:


108

Eğik çizgi Unix benzeri işletim sistemlerinde yollardaki/ dizinleri ayıran sınırlayıcı karakterdir . 1970'lerde bu karakter seçilmiş görünüyordu ve fıkra kaynaklarına göre , nedenleri Multics işletim sistemi olan Unix'in öncülüğünü karakteri ayırıcı olarak kullanmış olabilirdi , ancak Unix tasarımcıları çoktan ayrılmış. karakterleri ve çok komutlu bir dosya sistemine sahip olmadan önce kabuk komut satırındaki G / Ç yönlendirmesini belirtir. Bu yüzden dosya sistemini tasarlama zamanı geldiğinde, yol adı eleman ayrımını belirtmek için başka bir karakter bulmak zorunda kaldılar.>><

Burada dikkat edilmesi gereken bir şey olduğunu diğer şeyler arasında hangi 1970'li yıllarda yaygın kullanımda Lear-Siegler ADM-3A terminalinde, içinde kullanmanın pratik ~ev dizini kaynaklandığını temsil etmek karakteri , /anahtar yanındadır >tuşu:

Lear-Siegler ADM-3A terminalinin klavye düzeni

Kök dizinin neden tek olarak gösterildiğine gelince, kök dizinin /dizinin hiyerarşisinin en üst dizini olduğu gerçeğinden etkilenen bir kuraldır ve diğer dizinler altında olsa da, genellikle t Kök dizini dışındaki herhangi bir şeye başvurma nedeni. Benzer şekilde, dizin girişinin kendisinin de adı yoktur, çünkü görünen dizin ağacının sınırıdır.


2
"diğer dizinler altında olsa da, genellikle kök dizinin dışındaki herhangi bir şeye başvurmak için bir sebep yoktur." Bunu anlamıyorum. Hangi yöne "alt" derken kastettiğimden emin değilim, ancak hiyerarşinin monte edildiği "dış" hiçbir şey yok/ . Unix dosya sistemleri, çeşitli sürücüler için montaj noktalarına sahip tek bir ağaçtır.
alexis

4
Ayrıca var chrootve öyle - yeni kökün dışındaki hiçbir şeye erişemezsiniz , ancak bu onların orada olmadığı anlamına gelmez.
Bobson,

1
@Gilles, sürücünün fiziksel konumu ile ilgili bir soru değil. Herhangi bir disk bölümü bu anlamda kök bölümün dışındadır, ancak dosya sistemi hiyerarşisinde kök altına monte edilmiştir . Bobson, chroot hakkında iyi bir nokta, ancak Thomas'ın söylediklerine uymuyor: Chroot'tan sonra sistem kökünün dışına çıkmak için “genellikle bir sebep yok” değil; bu imkansız. Unix'te, dosya sistemindeki her şey kök altındadır.
alexis,

1
“Chroot'tan sonra, sistem kökünün dışına çıkmak için“ genellikle bir neden yoktur ”; bu imkansız değildir.” Bu düz yanlış. Tanıtıldığı zaman chroot(), hiçbir hapishane özelliğine sahip değildi , sadece yol adı çözümlemesini etkiledi. Bugün bile, ayrıcalıklı süreçler tasarıma göre bir chroot'tan ayrılabilir . Daha önceki bir yorumda da bahsetmiştim . chroot()
Thomas Nyman

4
IIRC, Multics kongre sadece kullanılmaz >dizin ayırıcı olarak değil, aynı zamanda <ana dizine başvurmak için: <kendisi için eşdeğer tarafından ..iken <fooeşdeğer oldu ../foo. Bunu her zaman estetik olarak hoş buldum.
Mark Reed

55

Bugün bildiğimiz ilk hiyerarşik dosya sistemi Multics için tasarlanmıştır . Tasarım RC Daley ve PG Neumann tarafından “İkincil Depolama İçin Genel Amaçlı Bir Dosya Sistemi” bölümünde açıklanmıştır . Bu dosya sisteminin göze çarpan bir özelliği, bir dizinin diğer dosyalar gibi bir dizinde bulunabilecek bir dosya olmasıdır. Dosya yapısı, tüm yaprak olmayan düğümlerin dizin olduğu bir ağaç oluşturur. Ağacın kökü her zaman bir dizindir. Her dosyanın ana dizini içinde benzersiz olan bir adı ( giriş adı ) vardır. Kök dizinin başka bir dizinde bulunmadığından bir adı yoktur.

Bir dosyayı belirlemek için yolu ağacın kökünden tanımlamanız gerekir. Multics için doğal sözdizimi kabul yol adları eğer Pbir dizinin yoludur ve Fdaha sonra, bir dosyanın adıdır denilen dosya için sözdizimi olan yoldur dizinde iç .P>FFP

Dizinler ile kendinizi zorlamak istemediğiniz zamanlar için, Multics'in çalışma dizini hakkında bir fikri vardı . Dizin göstergesiz bir çıplak dosya adı, çalışma dizininde bir dosya olarak yorumlanır.

Bu kuralları birleştirmek foo, çalışma dizinindeki bir dosyadır; çalışma dizininin foo>baralt dizinindeki bir dosyadır foo, vb. Bu kurallar göreceli yolları tanımlar, ancak kök dizinden başlayarak mutlak yollar oluşturmak için ek bir kural gerekir. Bir yol adının soldan sağa okunması, kökünden ağacın yapraklarına doğru hareket etmeye karşılık geldiğinden, kök, yol adının solunda özel bir işaretleyici ile belirtilmelidir. Dosya adları hiçbir zaman boş olmadığından (bu genellikle kafa karıştırıcı olacağından), hiçbir göreceli yol adı karakterle başlamaz >, bu da onu mutlak yol adları için uygun bir işaretçi yapar. Böylece >foodenilen dosyasıdır fookök dizininde, >foo>baradlı dosya olduğu baradlandırılan dizindefookök dizinde ve benzeri. Bu boş dize olabilir kök dizini bırakır; bununla birlikte, boş dizgiyi bir yol adı olarak kullanmak genellikle uygun değildir, bu yüzden yerine yazılır >, bu da bir yol adının ancak eğer ilk karakteri ise mutlak olduğuna ek yararı olur >.

Unix bu tasarımı Multics'ten aldı. Unix zaten karakterlerini >komut satırında çıktı yönlendirmesi için kullandığından, tasarımcıları/ yol adlarındaki dizinleri ayırmak için farklı bir karakter seçtiler .


11

Unix'teki yol adı bileşenlerinde, yalnızca iki karakter kullanılamaz: C'deki (çekirdeğin dili) dizeleri sonlandıran boş karakter ve yol ayırıcı olarak ayrılmış eğik çizgi. Ayrıca, yol bileşenleri boş dizeler olamaz.

Dolayısıyla, bir yol adında, sadece iki tür jetonumuz var: eğik çizgi ve bir bileşen.

Yeni bir simge eklemeden , göreli ve mutlak olmak üzere iki tür yolu desteklemeyi istediğimizi varsayalım . Dahası, adı olmayan bir kök dizine de başvurabilmeyi isteriz (isim veren bir ebeveyni yoktur).

Göreceli yolları, mutlak yolları nasıl gösterebilir ve sadece eğik çizgiyi kullanarak kök dizinine nasıl başvurabiliriz?

Bir dili genişletmenin en açık yolu (yeni belirteci tanıtmak dışında) yeni sözdizimi oluşturmaktır: geçersiz sözdizimi olan belirteçlerin birleşimlerine yeni anlamlar kazandırmak.

Bir eğik çizgiyle başlayan yollar anlamsızdır, öyleyse neden "eğri değil, mutlak" olduğunu belirten bir işaretleyici olarak neden bir eğik çizgi kullanmıyorsunuz?

Eğik çizgiden başka bir şey içermeyen bir yol da geçersizdir, bu nedenle neden "root dizini" anlamına gelmiyor.

Bu iki anlam birbirine bağlanır çünkü mutlak bir yol kök dizininde arama yapmaya başlar. Başka bir deyişle, önde gelen bir eğik çizginin şu anlama sahip olduğu kabul edilebilir:

  • kök dizine gidin ve eğik çizgi karakterini kullanın.
  • Yolda daha fazla malzeme varsa, onu göreceli bir yol olarak işleyin, aksi takdirde işiniz biter.

Daha sonra, son yol bileşeninin normal bir dosya yerine bir dizinin adı olduğunu iddia eden "bu yol, son yol bileşeninin normal bir dosya yerine bir dizinin adı olduğunu söyler" anlamına gelebilir. eğik çizginin kök dizini gösterme şekli. "

Tüm bu sözdiziminde, hala atanmamış bir anlama sahip sözdizimimiz var: çift eğik çizgi, üçlü eğik çizgi vb.

Neden sadece başka bir simge tanıtmıyor ve farklı bir şekilde yapmıyorsunuz. Bunun nedeni, tasarımcıların genel olarak minimalist yaklaşımlar benimsemeleridir. ( edEditör neden yalnızca ?yanlış bir şey yaptığınızda bir a görüntüler ?) Eğik çizginin yazılması kolaydır, kaydırma gerektirmez. Sadece iki simge tipine sahip bir yol dili (bileşen ve eğik çizgi) hatırlaması ve kullanması kolaydır.

Bir başka önemli husus, sadece string gösterimleri kullanarak yolların kolay manipülasyonlarının mümkün olmasıdır. Örneğin, yeni bir ana dizine olan mutlak yolları oldukça kolay bir şekilde "yeniden köklendirebiliriz":

OLD_PATH=/old/path
NEW_HOME=/new/home

NEW_PATH="$NEW_HOME$OLD_PATH"  /new/home/old/path

Önde gelen dolar işareti veya başka bir şekilde mutlak yolları başka bir şekilde belirtirsek bu işe yaramaz:

OLD_PATH=^old/path  # ^ means absolute path
NEW_HOME=^new/home

# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"

Bu tür kodlama, Unix tarzı yollarla uğraşırken bazı durumlarda hala gereklidir, ancak daha az vardır.


8
"Eğik çizginin yazılması kolaydır, kaydırma gerektirmez." Belki havuzun ortasından kolaylaşırsınız, ama burada Finlandiya'da sadece vardiyaya basmak zorunda değil, aynı zamanda sayı sırasına da ulaşabiliyoruz . P
Thomas Nyman,

1
@ThomasNyman Olması gerektiği gibi, yabancı klavye düzenleri muhtemelen Ken Thompson için bir endişe değildi. Eğik çizginin Unix geliştiricileri ve ilk kullanıcıları için yazması kolaydı.
Kaz

1
Yeterince adil. Çoğunlukla şaka yapıyor olmama rağmen , uzun zamandan beri var olan yazılımdaki bazı özelliklerin çağdaş donanımdaki özelliklerle nasıl açıklanabileceğini ilginç buluyorum (ve bazen de eğlenceli) .
Thomas Nyman

@ThomasNyman Haha, Bill Joy'un giriş yaptığını ve bu ADM-3A sayfasındaki {kaynak belirtilmeli} bölümleri güncelleyip güncellemediğini merak ediyorum, "Wikidickhead" den sonra bazı şeylerle başa çıkacak: "bu makale orijinal araştırma". :)
Kaz

@ThomasNyman, Şimdi /sağ ayağınızı kullanarak yazabileceğiniz "pedal" klavyeleri olduğuna inanıyorum . Tıpkı piyano çalmak gibi.
Pacerier
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.