GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Mehrere Fragen zur Zeichenkodierung im Dateisystem unter Linux

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...


Linux
  1. Linux – Wie zeigt man den Dateisystemtyp über das Terminal an??

  2. Komprimiertes Dateisystem in einer Datei unter Linux?

  3. Verwenden des mkfs-Befehls in Linux zum Formatieren des Dateisystems auf einer Festplatte oder Partition

  4. So erstellen Sie ein ZFS-Dateisystem mit Dateikomprimierung unter Linux

  5. Linux-Interviewfragen – Grundlegende Datei- und Verzeichnisberechtigungen

Grundlegendes zu Linux-Dateiberechtigungen

Linux-Tail-Befehl

So mounten Sie ein Remote-Linux-Dateisystem mit SSHFS

Alles, was Sie über das Linux-Dateisystem wissen müssen

Alles, was Sie über den Linux-Chmod-Befehl wissen müssen

Fragen im Vorstellungsgespräch unter Linux Network File System (NFS).