Saya telah merumuskan ulang pertanyaan Anda sedikit, untuk alasan yang seharusnya terlihat jelas saat Anda membacanya secara berurutan.
1. Apakah mungkin untuk mengonfigurasi sistem file linux menggunakan pengkodean karakter tetap untuk menyimpan nama file terlepas dari lingkungan LANG/LC_ALL?
Tidak, ini tidak mungkin:seperti yang Anda sebutkan dalam pertanyaan Anda, nama file UNIX hanyalah urutan byte; kernel tidak tahu apa-apa tentang pengkodean, yang sepenuhnya merupakan konsep ruang pengguna (yaitu, tingkat aplikasi).
Dengan kata lain, kernel tidak mengetahui apapun tentang LANG
/LC_*
, sehingga tidak dapat menerjemahkan.
2. Apakah mungkin membiarkan nama file yang berbeda merujuk ke file yang sama?
Anda dapat memiliki beberapa entri direktori yang merujuk ke file yang sama; Anda dapat membuatnya melalui tautan keras atau tautan simbolik.
Perlu diketahui, bagaimanapun, bahwa nama file yang tidak valid dalam penyandian saat ini (mis., string karakter GBK Anda saat Anda bekerja di lokal UTF-8) akan ditampilkan dengan buruk, jika sama sekali.
3. Apakah mungkin untuk menambal kernel untuk menerjemahkan pengkodean karakter antara sistem file dan lingkungan saat ini?
Anda tidak dapat menambal kernel untuk melakukan ini (lihat 1.), tetapi Anda dapat - secara teori - menambal pustaka C (mis., glibc) untuk melakukan terjemahan ini, dan selalu mengonversi nama file menjadi UTF-8 saat kernel memanggil, dan mengonversinya kembali ke saat ini encoding saat membaca nama file dari kernel.
Pendekatan yang lebih sederhana adalah dengan menulis sistem file overlay dengan FUSE, yang hanya mengalihkan permintaan sistem file apa pun ke lokasi lain setelah mengonversi nama file ke/dari UTF-8. Idealnya Anda dapat memasang sistem file ini di ~/trans
, dan saat akses dilakukan ke~/trans/a/GBK/encoded/path
maka sistem file FUSE benar-benar mengakses /a/UTF-8/encoded/path
.
Namun, masalah dengan pendekatan ini adalah:apa yang Anda lakukan dengan file yang sudah ada di sistem file Anda dan tidak disandikan UTF-8? Anda tidak bisa melewatkannya begitu saja tanpa diterjemahkan, karena Anda tidak tahu cara mengonversinya; Anda tidak dapat mengotak-atiknya dengan menerjemahkan urutan karakter yang tidak valid ke ?
karena itu bisa menimbulkan konflik...