Ich habe Ihre Fragen etwas umformuliert, aus Gründen, die ersichtlich werden sollten, wenn Sie sie der Reihe nach lesen.
1. Ist es möglich, das Linux-Dateisystem so zu konfigurieren, dass es eine feste Zeichenkodierung verwendet, um Dateinamen unabhängig von der LANG/LC_ALL-Umgebung zu speichern?
Nein, das ist nicht möglich:Wie Sie in Ihrer Frage erwähnt haben, ist ein UNIX-Dateiname nur eine Folge von Bytes. der Kernel weiß nichts über die Codierung, die ausschließlich ein Konzept im Benutzerbereich (d. h. auf Anwendungsebene) ist.
Mit anderen Worten, der Kernel weiß nichts über LANG
/LC_*
, kann also nicht übersetzt werden.
2. Ist es möglich, verschiedene Dateinamen auf dieselbe Datei verweisen zu lassen?
Sie können mehrere Verzeichniseinträge haben, die auf dieselbe Datei verweisen; Sie können dies durch feste Links oder symbolische Links erreichen.
Beachten Sie jedoch, dass Dateinamen, die in der aktuellen Codierung nicht gültig sind (z. B. Ihre GBK-Zeichenfolge, wenn Sie in einer UTF-8-Sprachumgebung arbeiten), schlecht angezeigt werden, wenn überhaupt.
3. Ist es möglich, den Kernel zu patchen, um die Zeichenkodierung zwischen Dateisystem und aktueller Umgebung zu übersetzen?
Sie können den Kernel nicht patchen um dies zu tun (siehe 1.), aber Sie könnten - theoretisch - die C-Bibliothek (z. B. glibc) patchen, um diese Übersetzung durchzuführen, und Dateinamen immer in UTF-8 konvertieren, wenn sie den Kernel aufruft, und sie zurück in den aktuellen konvertieren Codierung, wenn es einen Dateinamen aus dem Kernel liest.
Ein einfacherer Ansatz könnte darin bestehen, ein Overlay-Dateisystem mit FUSE zu schreiben, das einfach alle Dateisystemanforderungen an einen anderen Speicherort umleitet, nachdem der Dateiname in/von UTF-8 konvertiert wurde. Idealerweise könnten Sie dieses Dateisystem in ~/trans
einhängen , und wenn auf ~/trans/a/GBK/encoded/path
zugegriffen wird dann greift das FUSE-Dateisystem wirklich auf /a/UTF-8/encoded/path
zu .
Das Problem bei diesen Ansätzen ist jedoch:Was machen Sie mit Dateien, die bereits auf Ihrem Dateisystem vorhanden und nicht UTF-8-codiert sind? Sie können sie nicht einfach unübersetzt weitergeben, weil Sie dann nicht wissen, wie Sie sie konvertieren sollen. Sie können sie nicht verstümmeln, indem Sie gültige Zeichenfolgen in ?
übersetzen denn das könnte zu Konflikten führen...