He reformulado un poco sus preguntas, por razones que deberían parecer evidentes cuando las lee en secuencia.
1. ¿Es posible configurar el sistema de archivos de Linux usando codificación de caracteres fijos para almacenar nombres de archivo independientemente del entorno LANG/LC_ALL?
No, esto no es posible:como menciona en su pregunta, un nombre de archivo UNIX es solo una secuencia de bytes; el kernel no sabe nada acerca de la codificación, que es completamente un concepto de espacio de usuario (es decir, nivel de aplicación).
En otras palabras, el núcleo no sabe nada sobre LANG
/LC_*
, por lo que no se puede traducir.
2. ¿Es posible permitir que diferentes nombres de archivo se refieran al mismo archivo?
Puede tener múltiples entradas de directorio que se refieran al mismo archivo; puede hacerlo a través de enlaces duros o enlaces simbólicos.
Tenga en cuenta, sin embargo, que los nombres de archivo que no son válidos en la codificación actual (por ejemplo, su cadena de caracteres GBK cuando está trabajando en una configuración regional UTF-8) se mostrarán mal, si es que se muestran.
3. ¿Es posible parchear el núcleo para traducir la codificación de caracteres entre el sistema de archivos y el entorno actual?
No puede parchear el kernel para hacer esto (ver 1.), pero podría, en teoría, parchear la biblioteca C (por ejemplo, glibc) para realizar esta traducción, y siempre convertir los nombres de archivo a UTF-8 cuando llama al kernel, y convertirlos de nuevo a la actual codificación cuando lee un nombre de archivo del kernel.
Un enfoque más simple podría ser escribir un sistema de archivos superpuesto con FUSE, que simplemente redirige cualquier solicitud del sistema de archivos a otra ubicación después de convertir el nombre del archivo a/desde UTF-8. Idealmente, podría montar este sistema de archivos en ~/trans
, y cuando se accede a ~/trans/a/GBK/encoded/path
entonces el sistema de archivos FUSE realmente accede a /a/UTF-8/encoded/path
.
Sin embargo, el problema con estos enfoques es:¿qué hace con los archivos que ya existen en su sistema de archivos y no están codificados en UTF-8? No puede simplemente pasarlos sin traducir, porque entonces no sabe cómo convertirlos; no puedes manipularlos traduciendo secuencias de caracteres no válidas a ?
porque eso podría crear conflictos...