Eğik çizgi (/), Linux kök dizininin adının bir parçası mı?


46

Slash ( /) gerçekten Linux kök dizininin adının bir parçası mı? Yoksa bunun sadece bir sembolü mü?

Peki ya /etcböyle?

Güncelleme

/dev/sda2Bir Linux kök dizininin blok aygıtı olduğunu varsayalım .

$ sudo debugfs / dev / sda2
hata ayıkları 1.44.1 (24-Mar-2018)
debugfs:   pwd
[pwd] INODE: 2 PATH: /
[root] INODE: 2 PATH: /
debugfs:   stat /
Inode: 2    Tür: dizin     Modu: 0755 Bayraklar: 0x80000
Üretim: 0 Sürüm: 0x00000000: 00000077
Kullanıcı: 0 Grup: 0 Proje: 0 Boyut: 4096
ACL Dosyası: 0
Bağlantılar: 25 Blok Sayısı: 8
Parça: Adres: 0 Sayı: 0 Boyut: 0
 ctime: 0x5b13c9f1: 3f017990 - Paz 3 Haziran 15:28:57 2018
 atime: 0x5b13ca0f: 3b3ee380 - Paz 3 Haziran 15:29:27 2018
 mtime: 0x5b13c9f1: 3f017990 - Paz 3 Haziran 15:28:57 2018
crtime: 0x5aad1843: 00000000 - Cmt 17 Mar 16:59:39 2018
Ekstra inode alanlarının boyutu: 32
kapsamlarını:
(0): 9249

Yani içeride bir dizin var, inode # 2, ama bir ismi yok.


1
Bazı güncellemeleri gösteren son güncelleme ile ilgili olarak debugfs. Bunun soruyu nasıl değiştirdiğini açıklayabilir misiniz?
Kusalananda

Olmaz. Sadece cevapları tamamlamak istedim. ama başka bir tane eklemek istemedim. bu yüzden onu güncellendi. cevabınıza
thease

Yanıtlar:


61

POSIX.1-2008 standardı diyor ki

Birinden oluşan bir yol adı /işlemin kök dizinine çözümlenir. Boş bir yol adı başarıyla çözülmeyecek.

Standart ayrıca dosya isimleri ve patnames arasında bir ayrım yapar . /Kök dizinin yolunun yol adıdır. Dizinin adı "kök dizini" dir, ancak dosya sisteminde isimsizdir, dosya adı yoktur. Bir dosya adı olsaydı, bu ad, kök dizinin üzerindeki dizinde bir dizin girişi olurdu ve böyle bir dizin yoktur.

Karakter /hiçbir zaman bir dosya adının parçası olamaz, çünkü yol ayırıcıdır.

Açıklamak gerekirse: /tutulamaz adı kök dizinin fakat yolu ona, onun yol adı .

/etcbaşka bir yol adı. etcDizine giden mutlak yolun adıdır . Bu yoldaki dizinin adı etc(dosya adı etc).

/usr/local/bin/curlbir yol adı olan curlaynı şekilde yürütülebilir dosyanın /etcyol adı olan etcdizinde.


"Bir dosya adı olsaydı, bu isim kök dizinin üstündeki dizine bir dizin girişi olurdu" Teknik olarak iki şey olurdu - inode numarası ve adı (bildiğimiz kadarıyla inode 2). Ayrıca , /..geri döndüğünü /ve /kendisi için dizin girişi bulunduğunu not etmek ilginçtir - bu eskidir /.; tüm bu 3 şey aynı inode işaret ediyor - 2.
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy Teknik olarak , kök dizin chroot ortamlarında önemli olan "per-process" dir. Bir chroot'ta, kök dizinin inode numarası belirli bir sayı olmaz (chroot kökünün inode numarası olur). Ayrıca, 2 sayısının (chrooted olmayan durumlarda) kullanılan dosya sistemine bağlı olduğunu düşünüyorum.
Kusalananda

Ayrıca /, işlem başına kök olarak tanımlandığını da fark ettim, ancak inode'un chrootzorunlu olarak 2 olduğunu bilmiyordum . Çok ilginç bir gerçek. Aynı zamanda, /ayrıcalıklı çekirdek işlemlerin dizini ne olduğu sorusunu da gündeme getiriyor . Bu, yalnızca kullanıcı alanı işlemlerinin /ilişkilendirilebilecekleri anlamına mı geliyor ?
Sergiy Kolodyazhnyy

37

eğik çizgi bir ayırıcıdır ; dizin adları ayırıcı içermez, ancak tam yol adları ayırıcıları içerir.

Yani "kök düzeyinde" bir isim/ yok . Unix benzeri çoğu sistemde bu, özel bir durum olarak kabul edilir ve (tabii ki ikisi arasında kök düzeyinde bir fark yoktur)....

İsimlendirme farklı olabilir. Örneğin POSIX.1-2017, sık kullanılan bazı tanımları listeler :

  • 3.2 Mutlak yol adı

    İki veya daha fazla <slash>karakterle başlayan bir yol adı ; ayrıca bakınız Pathname .

  • 3.271 Pathname

    Bir dosyayı tanımlamak için kullanılan bir dize. POSIX.1-2008 kapsamında, bir yol adı sonlandırıcı boş bayt da dahil olmak üzere {PATH_MAX} bayt ile sınırlandırılabilir. İsteğe bağlı başlangıç <slash>karakterlerine, ardından <slash>karakterlerle ayrılmış sıfır veya daha fazla dosya adına sahiptir . Bir yol adı isteğe bağlı olarak bir veya daha fazla izleyen <slash>karakter içerebilir . Birden çok art arda gelen karakter , tam olarak iki tane baş karakter olması dışında <slash>, aynı karakter olarak kabul edilir . Not: Bir yol adı yalnızca taşınabilir dosya adı karakter kümesindeki karakterlere karşılık gelen baytlardan oluşuyorsa (bkz. Taşınabilir Dosya Adı Karakter Seti ), karakterler ve tek bir sonlandırma<slash><slash>

    <slash><NUL>karakter, yol adı, desteklenen tüm yerel ayarlarda bir karakter dizesi olarak kullanılabilir; Aksi takdirde, yol adı yalnızca bir karakter olabilir (karakter dizgisinden ziyade). Ek olarak, <slash>karakterin tek baytlı kodlamasının tüm yerel ayarlarda aynı olması ve çok baytlı bir <slash>karakter içinde gerçekleşmemesi gerektiğinden, yol adı bir karakter olmasa bile, yol adı içindeki bir karaktere yapılan başvurular iyi tanımlanır dize. Ancak, bu özellik mutlaka taşınabilir dosya adı karakter kümesinde kalan karakterleri tutmaz.

  • 3.272 Pathname Bileşeni

    Dosya Adı içindeki Dosya Adı bölümüne bakınız .

  • 3.170 Dosya Adı

    Bir {NAME_MAX}dosyayı adlandırmak için kullanılan 1 ila bayttan oluşan bir bayt dizisi . Adı oluşturan baytlar <NUL>veya <slash>karakterleri içermemelidir . Bir yol adı bağlamında, her bir dosya adını bir <slash>veya bir <NUL>karakter takip eder; başka bir yerde, bir <NUL>karakter izleyen bir dosya adı bir dize oluşturur (ancak mutlaka bir karakter dizesi değil). Dosya adları nokta ve dot-dotözel bir anlamı vardır. Bir dosya adı bazen "yol adı bileşeni" olarak da adlandırılır. Ayrıca bakınız Pathname .

Öyleyse ... eğer açıklama istiyorsan , bu senin ilk durağın olmayabilir. Bu UNIX Kavramları sayfası gibi eğitimler yararlıdır; örneğin, "tam yol adı" nın "mutlak" yol adı "ile eşanlamlı olduğunu belirtmek gibi.


3
Nitpick: nokta ve nokta nokta dosya adlarıdır, yol adları değil. Aslında POSIX standardı meraklı formülasyona sahiptir "kök dizininde, Özel bir durum olarak, dot-nokta olabilir kök dizinine kendisi bakın." (benim vurgum).
Kusalananda

Bu nedenle, harfin belirtimini okumak, /geçerli bir dosya adı veya bir yol adı bileşeni değildir ve bu tür bileşenleri içeren bir dize değildir, ancak belirli bir dizin için hala tamamen geçerli bir yol adıdır. Bunu gerektiren kısım "ismini" belirtmese de, var olması gereken. Her nasılsa, bunu biraz eğlenceli buluyorum.
ilkkachu

POSIX'de cevaplandırılmıştır : İsteğe bağlı başlangıç ​​karakterlerine, ardından karakterlerle ayrılmış sıfır veya daha fazla dosya ismine sahiptir.
Thomas Dickey

@Kusalananda vurgunuz için spesifik gerekçeyi gözden geçirin. Mayıs Spec tanımlayıp içinde uygulama testlerine ilişkin olarak kefalet açık ifadesidir. burada olabilir kullanılır spektrumu Garantisidir tanımlanmış herhangi bir davranış yapışık tomurcuklanma. başka bir deyişle, herhangi bir uygulama olabilir güvenmek ..de /bağlama /.
mikeserv

19

Unix'te, dosyalar (ve dizinler sadece dosyalardır) "isimlere" sahip değildir. Linklerin isimleri var, linkler isimleri dosyalarla eşleştiren bir dizindeki girişlerdir.

Sen belki bağlantılar olduğunu söylemek vermek dosyalara isimler, ancak not: birden fazla bağlantı olabileceğinden bu, bir dosya birden fazla adı olabilir anlamına gelir.

Kök dizini, kök dizini olduğundan, içinde bir link olabileceği "yukarı-yukarı" dizini yoktur, bu nedenle kendisiyle ilişkilendirilmiş bir isim olamaz. Teorik olarak, başka bir dizinin içindeki kök dizine bir bağlantı eklemek mümkün olacaktır, ancak çoğu Unices mevcut dizinlere bağlantı eklemeyi yasaklar, çünkü dosya sistemi hiyerarşisinde (aslında yönlendirilmiş bir grafiktir) döngüleri ve döngüleri algılayabilir. Bir grafikte pahalıdır, ancak bunların tespit edilmemesi, çekirdek içindeki adları çözümlemeye çalışırken sonsuz özyinelemeye yol açabilir.

Dolayısıyla, temelde, kök dizinin adı yoktur, çünkü üstünde isim kaydedebileceğimiz bir dizin yoktur.

Diğer cevaplarda da belirtildiği gibi, bir isim ile bir yol (isim) arasında ayrım yapmamız gerekir. Kök dizin olabilir yolunun (isim) üzerinden sevk /.


Evet, dosyalar tıpkı insanlar gibi birden fazla ada sahip olabilir. Küçük kızımın kocası normalde göbek ismine gider, ancak açıkça onun ilk ismine de cevap vermesi gerekir. Kök direktörünün ana adı "/", "eğik çizgi" olarak telaffuz edilir, çünkü mutlak yol adı "/" dır (ve göreli yol adlarına dayalı adlar özellikle yararlı değildir). ("Kök" olarak adlandırmak, her zaman "eğik çizgi kökü" olarak adlandırılması gereken "/ root" ile karışıklığı tehlikeye atar.
Monty Harder

1
Adı olmayan noktayı sevdim çünkü bu ismi kaydedecek daha fazla dizin yok. Bu, kavramı güzel bir şekilde netleştirir.
Joe,

7

"Ad" kelimesinin kullanımı biraz esnektir; “tam nitelikli bir yol adına” atıfta bulunabilir; "dizin girişine" atıfta bulunabilir; çeşitli işlevlere veya rutinlere iletilen "dosya adına" başvurabilir.

Yani, örneğin /etc/foove /var/tmp/../../etc/foove /tmp/../../../../../../foohepsi aynı dosyaya gönderme yapmanın yoludur; hepsi geçerli konum isimleri gibidir, foone zaman /etcdizine.

Öyleyse temellere geri dönelim.

Unix içindeki bir dosya adı , dizin ayırıcısı tarafından ayrılmış bileşenlerden oluşur/ . Neredeyse bileşenler üzerindeki tek kısıtlama, /NUL karakterlerini içerememeleridir ; başka bir şeye izin verilir.

Yani "tam yol adının" nin /etctam dizesidir: /etc. Bu etc, kök dizindeki bileşene sahip olduğu anlamına gelir .

Benzer şekilde bileşen dizinde /x/y/z/fooolurdu .foo/x/y/z

Şimdi kök dizin, bir üst dizinde bir bileşeni olmadığı için benzersizdir; o sadece onun adı olarak tam yol adı vardır: /.

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.