SSHユーザー用のchroot環境を設定しようとしましたが、QAでUT8文字が「?」に置き換えられていることがわかりました。
xstorenas>ls /mnt/hires/tsi/
??????????????????
しかし、単純なforループを実行すると、次のようになります。
xstorenas>for f in /mnt/hires/tsi/*; do
echo $f;
done
/mnt/hires/tsi/рэпертуар
/etc/locale.confと完全な/usr/share/localeが利用可能で、LANGが正しく設定されています。
xstorenas>printenv LANG
en_US.UTF-8
したがって、chroot環境で欠落しているものが見つかりません(chroot環境の外部で期待どおりに機能するため)。
答え1
の出力はls
ロケールによって異なり、ロケールが機能するには多くのサポートファイルが必要です。刑務所にこれらの書類がない可能性がありますchroot
。 Linuxの例:
$ strace -eopen ls >/dev/null
[...]
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/gconv/gconv-modules", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.utf8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = 3
[...]
chroot
これらのファイルを刑務所にコピーすることでls
作業できますが、ロケールファイルによってさまざまなセキュリティ脆弱性が公開される可能性があるため、これは良い考えではありません。おそらくed環境ls
で実行する必要はありませんchroot
。