Büyük / küçük harfe duyarlı olmayan dosya sistemleri hem büyük hem de küçük harfli dosya adlarını nasıl görüntüler?


12

Bu soru, dosya adları ile ilgili görüşlü bir çerçeveye dayanan bir geliştirme projesi üzerinde çalışırken geçen gün bana geldi. Çerçeve (burada alakasız) büyük harfli ilk dosya adlarını görmek istedi. Bu beni düşündürdü.

Büyük / küçük harfe duyarlı olmayan bir dosya sisteminde, diyelim ki extFAT veya HFS + (özellikle büyük / küçük harfe duyarlı olmayan) dosya sistemi dosya adının hem büyük hem de küçük harf sürümleriyle aynı dosyaya nasıl erişim sağlar .

Örneğin:

$ cd ~/Documents
$ pwd
/home/derp/Documents

$ cd ../documents
$ pwd
/home/derp/documents

$ cd ../docuMents
$ pwd
/home/derp/docuMents

$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS

$ cd ../documentS
$ pwd
/home/derp/documentS

Bu komutların tümü aynı dizine gider. Bu davranış, özellikle bu durumda sadece pwdbir fonksiyondan elde edilen çıktı sadece bashgörmek istediğimi düşündüğümü mü gösteriyor?

Başka bir örnek:

$ ls ~/Documents
Derp.txt    another.txt    whatThe.WORLD

Buradaki dosya sistemi, kullanıcı veya program tarafından oluşturulan orijinal dosya adının durumunu bildirir.

Dosya sistemi yığınında hangi noktada oluşturulabilir (örneğin, büyük ve küçük harf) okunabilir dosya adı korunur, böylece ona doğru büyük ve küçük ASCII karakterlerinin herhangi bir kombinasyonu tarafından erişilebilir mi? Bu sadece bir yerlerde normal bir numara mı yoksa başka bir şey mi oluyor?

DÜZENLEME: Ben bulunur merak ediyorum davranış gibi görünüyor harf koruyarak biraz daha araştırma sonrasında küçük harf duyarsız dosya sistemleri ...


Bunu bir cevap olarak yazmıyorum çünkü artık kesin olarak bilmiyorum ama bu dosya sisteminde ~ / Documents ve ~ / belgelerine sahip olamayacağınıza inanıyorum. Ama cd ~ / Documents veya ~ / belgeler aynı yere gidiyor ve kabuk ne yazdığınızı hatırlayarak "güzel oynuyor". Diğer taraf, bazı FS'lerin bir aux'ta oluşturulduğu şekli depolamasıdır. veri yığını. Örneğin ~ / Belgeleri bir arama tablosunda saklamak ancak FS'ye ~ / belgeler olarak yazmak. Temel olarak, dosya sisteminin kasa olmadığında önemsediği bir yanılsama yaratmak.
coteyr

Gözlemlediğim kadarıyla, bir dizinin büyük / küçük harf durumu dışında aynı olan iki dosya adı içermesi durumunda, büyük / küçük harfe duyarlı olmayan dosya sistemleri, belirli bir dosyaya ilişkin isteğe isteğe göre bir tane seçerek yanıt verebilir. Bir dosya oluşturulduktan sonra büyük / küçük harf dönüşüm kuralları değişirse bu gibi durumlar ortaya çıkabilir.
supercat

NTFS'nin doğayı koruyan davası hakkında harika bilgiler: superuser.com/questions/364057/why-is-ntfs-case-sensitive
Kanadalı Luke

Yanıtlar:


14

Büyük / küçük harfe duyarlı olmayan bir dosya sistemi, dosya sistemi "A'nın B ile aynı dosyaya / dizine başvuruyor mu?" büyük / küçük harf farklarını göz ardı eden dosyaların / dizinlerin adlarını karşılaştırır (tam olarak büyük / küçük harf farklılıklarının tam olarak saydığı dosya sistemine bağlıdır — ASCII'nin ötesine geçtiğinizde açık değildir). Büyük / küçük harfe duyarlı bir dosya sistemi bu farkları görmezden gelmez.

Büyük / küçük harfleri koruyan bir dosya sistemi, dosya adlarını belirtilen şekilde depolar. Büyük / küçük harf korumalı olmayan bir dosya sistemi; genellikle tüm harfleri saklamadan önce büyük harfe dönüştürür (teorik olarak küçük harf veya RaNsOm NoTe davası veya her neyse kullanabilir, ancak AFAIK gerçek dünyadaki tüm harfler büyük harf kullanabilir).

Bu iki özelliği herhangi bir kombinasyonda bir araya getirebilirsiniz. Büyük / küçük harfe duyarlı olmayan büyük / küçük harfe duyarlı dosya sistemleri bulabileceğinizden emin değilim, ancak kesinlikle bir tane oluşturabilirsiniz. Diğer tüm kombinasyonlar gerçek sistemlerde var ya da var.

Dolayısıyla, büyük / küçük harfleri koruyan, büyük / küçük harfe duyarlı olmayan bir dosya sistemi (günümüzde en yaygın büyük / küçük harfe duyarlı olmayan dosya sistemi), dosya adlarını, oluşturduğunuz veya en son yeniden adlandırdığınız büyük / küçük harfe dönüştürdüğü her yerde saklar ve döndürür (iki dosya adını karşılaştırırken varsa, birini açmak, birini silmek vb.)

Unix kutusunda büyük / küçük harfe duyarlı olmayan bir dosya sistemi kullandığınızda, çeşitli yardımcı programlar tuhaf şeyler yapar çünkü Unix geleneksel olarak büyük / küçük harfe duyarlı dosya sistemlerini kullanır - bu nedenle beklemezler Document1ve document1aynı dosyadırlar.

Bu pwddurumda, gördüğünüz şey, varsayılan olarak sadece dizine ulaşmak için kullandığınız yolu çıkarmasıdır. Eğer aracılığıyla oraya Yani cd DirName, bu kullanacağız DirNameçıktıda. Eğer oraya ulaşırsanız , çıktıda DiRnAmEgörürsünüz DiRnAmE. Bash bunu $PWDortam değişkenindeki geçerli dizininize nasıl ulaştığınızı takip ederek yapar . Temelde bu sembolik linkler içindir (eğer cdbir link linkinde olursanız pwd, gerçekte mevcut dizininizdeki yolun bir parçası olmasa bile simgelerinizi içinde görürsünüz ). Ancak, büyük / küçük harfe duyarlı olmayan dosya sistemlerinde gözlemlediğiniz biraz tuhaf davranışı da verir. Bunun pwd -Pdiskte saklanan vakayı kullanarak dizin adını vereceğinden şüpheleniyorum , ancak test etmedim .


Beni bununla dövdüğünü biliyor olabilirdim! (düzeltildi)
Fabby
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.