我可以在 中找到内核支持的文件系统类型的列表/proc/filesystems
。
除了尝试挂载文件系统之外,有没有办法确定我可以通过选项mount
或iocharset
来使用哪些字符集?nls
理想情况下,我希望列表位于 Bash 数组中,这样我就可以使用它来完成命令。
答案1
NLS 字符集提供为名称开头为的模块nls_
。要确定支持的字符集,您可以:
在以下位置查找内置字符集
/lib/modules/$(uname -r)/modules.builtin
:grep kernel/fs/nls/nls_ /lib/modules/$(uname -r)/modules.builtin
列出可用模块
/lib/modules/$(uname -r)/kernel/fs/nls
:echo /lib/modules/$(uname -r)/kernel/fs/nls/nls_*
要获取可用列表,我们需要从模块文件路径中提取字符集名称:
#!/bin/bash
charsets=($(grep ^kernel/fs/nls/nls_ /lib/modules/$(uname -r)/modules.builtin)
/lib/modules/$(uname -r)/kernel/fs/nls/nls_*)
charsets=("${charsets[@]##*/nls_}"); charsets=("${charsets[@]%.ko}")
nls_base.ko
如果我们排除(不实现实际编码),这会产生一个适合命令完成的列表:
$ compgen -W "${charsets[*]}" -X base --
ascii
cp1250
cp1251
cp1255
cp437
cp737
cp775
cp850
cp852
cp855
cp857
cp860
cp861
cp862
cp863
cp864
cp865
cp866
cp869
cp874
cp932
cp936
cp949
cp950
euc-jp
iso8859-13
iso8859-14
iso8859-15
iso8859-1
iso8859-2
iso8859-3
iso8859-4
iso8859-5
iso8859-6
iso8859-7
iso8859-9
koi8-r
koi8-ru
koi8-u
utf8