W jaki sposób systemy plików bez rozróżniania wielkości liter wyświetlają nazwy dużych i małych plików?


12

To pytanie przyszło mi do głowy innego dnia, kiedy pracowałem nad projektem programistycznym, który opierał się na opiniotwórczych ramach dotyczących nazw plików. Szkielet (tutaj nieistotny) chciał zobaczyć nazwy plików z dużymi literami. To mnie zastanowiło.

W systemie plików bez rozróżniania wielkości liter powiedz extFAT lub HFS + (szczególnie bez rozróżniania wielkości liter), w jaki sposób system plików zapewnia dostęp do tego samego pliku zarówno z wersją wielkiej, jak i małej nazwy pliku.

Na przykład:

$ 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

Wszystkie te polecenia zostaną rozpoznane w tym samym katalogu. Czy to zachowanie, a konkretnie wynik pwdfunkcji, bashw tym przypadku pokazuje mi tylko, co myśli, że chcę zobaczyć?

Inny przykład:

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

System plików tutaj zgłasza przypadek oryginalnej nazwy pliku utworzonej przez użytkownika lub program.

W którym momencie na stosie systemu plików zachowywana jest czytelna dla człowieka nazwa pliku podczas jego tworzenia (np. Wielkie i małe litery), aby można było do niego uzyskać dowolną kombinację poprawnych wielkich i małych znaków ASCII? Czy to tylko gdzieś regex, czy dzieje się coś innego?

EDIT: Wygląda na to zachowanie jestem ciekaw występuje w przypadku, zachowując case-niewrażliwy systemów plików po jakimś dalszych badań ...


Nie piszę tego jako odpowiedzi, ponieważ nie wiem już na pewno, ale uważam, że nie możesz mieć ~ / Documents i ~ / Documents w tym systemie plików. Ale kiedy cd ~ / Documents lub ~ / Documents udajesz się w to samo miejsce, a twoja powłoka „gra dobrze”, pamiętając, co wpisałeś. Z drugiej strony niektóre FS przechowują sposób, w jaki zostały utworzone w Aux. fragment danych. Na przykład przechowywanie ~ / Documents w tabeli odnośników, ale zapisywanie do FS jako ~ / dokumenty. Zasadniczo tworzenie złudzenia, że ​​system plików dba o obudowę, gdy tak nie jest.
coteyr

Z tego, co zaobserwowałem, w przypadku gdy katalog zawiera dwie nazwy plików, które są identyczne, z wyjątkiem wielkości liter, systemy plików bez rozróżniania wielkości liter mogą odpowiedzieć na żądanie dotyczące danego pliku, wybierając dowolnie jedną z nich. Takie sytuacje mogą wystąpić, jeśli reguły tworzenia wielkich / małych liter zmieniają się po utworzeniu pliku.
supercat

Fajne informacje na temat zachowania sprawy przez NTFS: superuser.com/questions/364057/why-is-ntfs-case-sensitive
Kanadyjczyk Łukasz

Odpowiedzi:


14

System plików bez rozróżniania wielkości liter oznacza po prostu, że za każdym razem, gdy system plików musi zapytać „czy A odnosi się do tego samego pliku / katalogu co B?” porównuje nazwy plików / katalogów ignorując różnice dużymi / małymi literami (dokładnie to, ile różnic między dużymi i małymi literami zależy od systemu plików - nie jest to oczywiste, gdy przekroczysz ASCII). System plików z rozróżnianiem wielkości liter nie ignoruje tych różnic.

System plików z zachowaniem wielkości liter przechowuje nazwy plików zgodnie z danymi. System plików, który nie zachowuje wielkości liter, nie działa; zazwyczaj przechowuje wszystkie litery na wielkie przed ich zapisaniem (teoretycznie może używać małych liter lub RaNsOm NoTe, czy cokolwiek innego, ale AFAIK wszystkie rzeczywiste litery używały wielkich liter).

Możesz połączyć te dwa atrybuty razem w dowolnej kombinacji. Nie jestem pewien, czy można znaleźć systemy plików, które nie uwzględniają wielkości liter, ale z pewnością można je utworzyć. Jednak wszystkie inne kombinacje istnieją lub istniały w prawdziwych systemach.

Tak więc system plików zachowujący wielkość liter, bez rozróżniania wielkości liter (obecnie najpopularniejszy typ systemu plików bez rozróżniania wielkości liter) będzie przechowywał i zwracał nazwy plików bez względu na wielkość liter, jaką je utworzyłeś lub ostatnio zmieniłeś, ale przy porównywaniu dwóch nazw plików (aby sprawdzić, czy jedna z nich istnieje, aby otworzyć, usunąć, itp.) zignoruje różnice wielkości liter.

Kiedy używasz systemu plików bez rozróżniania wielkości liter na pudełku uniksowym, różne narzędzia będą robić dziwne rzeczy, ponieważ Unix tradycyjnie używa systemów plików z rozróżnianiem wielkości liter - więc nie oczekują Document1i document1będą tym samym plikiem.

W tym pwdprzypadku widzisz, że domyślnie po prostu wyświetla ścieżkę, którą faktycznie użyłeś, aby dostać się do katalogu. Więc jeśli się tam dostałeś cd DirName, użyje go DirNamew danych wyjściowych. Jeśli dotrzesz tam przez DiRnAmE, zobaczysz DiRnAmEw wynikach. Bash robi to, śledząc, jak dotarłeś do bieżącego katalogu w $PWDzmiennej środowiskowej. Dotyczy to głównie dowiązań symbolicznych (jeśli cdprzejdziesz w dowiązanie symboliczne, zobaczysz dowiązanie symboliczne w swoim pwd, nawet jeśli tak naprawdę nie jest to część ścieżki do twojego bieżącego katalogu). Ale daje również nieco dziwne zachowanie, które obserwujesz w systemach plików bez rozróżniania wielkości liter. Podejrzewam, że pwd -Ppoda ci nazwę katalogu przy użyciu skrzynki zapisanej na dysku, ale nie przetestowałem.


Mogłem wiedzieć, że pobiłeś mnie do tego! (przegłosowano)
Fabby
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.