Trudno mi zrozumieć, jak działa kodowanie nazw plików. Na unix.SE znajduję sprzeczne wyjaśnienia.
Nazwy plików są przechowywane jako znaki
Cytując inną odpowiedź: Kilka pytań na temat kodowania znaków w systemie plików w systemie Linux
[…] Jak wspominasz w swoim pytaniu, nazwa pliku UNIX to po prostu ciąg znaków; jądro nie wie nic o kodowaniu, które jest całkowicie pojęciem przestrzeni użytkownika (tj. poziomu aplikacji).
Jeśli nazwy plików są przechowywane jako znaki, musi istnieć jakiś rodzaj kodowania, ponieważ ostatecznie nazwa pliku musi kończyć się na sekwencji jako bit lub bajt. Jeśli użytkownik może wybrać dowolne kodowanie, aby odwzorować znaki na sekwencję bajtów dostarczaną do jądra, możliwe jest utworzenie dowolnej sekwencji bajtów dla prawidłowej nazwy pliku.
Załóżmy, że: Użytkownik używa losowego kodowania X , które tłumaczy plik foo
na sekwencję bajtów α i zapisuje go na dysku. Kolejne zastosowania użytkownika kodującego Y . W tym kodowaniu α tłumaczy się /
, co nie jest dozwolone jako nazwa pliku. Jednak dla pierwszego użytkownika plik jest prawidłowy.
Zakładam, że ten scenariusz nie może się zdarzyć.
Nazwy plików są przechowywane jako binarne obiekty BLOB
Cytując inną odpowiedź: Jakiego kodowania zestawu znaków używa się w nazwach plików i ścieżkach w systemie Linux?
Jak zauważają inni, tak naprawdę nie ma na to odpowiedzi: nazwy plików i ścieżki nie mają kodowania; system operacyjny zajmuje się tylko sekwencją bajtów. Poszczególne aplikacje mogą interpretować je jako zakodowane w pewien sposób, ale to się różni.
Jeśli system nie radzi sobie ze znakami, jak można zabronić poszczególnym znakom (np. /
Lub NULL
) w nazwach plików? Nie ma pojęcia /
bez kodowania.
Wyjaśnieniem byłoby, że system plików może przechowywać nazwy plików zawierające dowolny
znak, a tylko programy użytkownika, które biorą pod uwagę kodowanie, dławią nazwy plików zawierające nieprawidłowe znaki. To z kolei oznacza, że systemy plików i jądro mogą bez problemu obsługiwać nazwy plików zawierające /
.
Zakładam również, że to jest złe.
Gdzie odbywa się kodowanie i jakie jest ograniczenie polegające na niedopuszczaniu określonych znaków?