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 pwd
funkcji, bash
w 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ń ...
źródło
Odpowiedzi:
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ą
Document1
idocument1
będą tym samym plikiem.W tym
pwd
przypadku 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 goDirName
w danych wyjściowych. Jeśli dotrzesz tam przezDiRnAmE
, zobaczyszDiRnAmE
w wynikach. Bash robi to, śledząc, jak dotarłeś do bieżącego katalogu w$PWD
zmiennej środowiskowej. Dotyczy to głównie dowiązań symbolicznych (jeślicd
przejdziesz w dowiązanie symboliczne, zobaczysz dowiązanie symboliczne w swoimpwd
, 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, żepwd -P
poda ci nazwę katalogu przy użyciu skrzynki zapisanej na dysku, ale nie przetestowałem.źródło