最近、RHEL6がインストールされているシステムで次のものが見つかりました。
ls -lbi
917921 -rw-r-----. 1 alex pivotal 5245 Dec 17 20:36 application.yml
917922 -rw-r-----. 1 alex pivotal 2972 Dec 17 20:36 application11.yml
917939 -rw-r-----. 1 alex pivotal 3047 Dec 17 20:36 application11.yml
917932 -rw-r-----. 1 alex pivotal 2197 Dec 17 20:36 applicationall.yml
これをどのように実装するのか疑問に思います。
ベストアンサー1
この動作を再現できます。例をご覧ください。
ls -lib
268947 -rw-r--r-- 1 root root 8 Dez 20 12:32 app
268944 -rw-r--r-- 1 root root 24 Dez 20 12:33 aрр
これは私のシステムにあります(Linux debian 4.9.0-7-amd64 #1 SMP Debian 4.9.110-3+deb9u2 (2018-08-13) x86_64 GNU/Linux
)。
UTF-8ロケールがあり、上記の出力の文字はp
異なりますが、似ているようです。最初の行はaLATIN SMALL LETTER P
で、2行目はaですCYRILLIC SMALL LETTER ER
(参照:https://unicode.org/cldr/utility/confusables.jsp?a=p&r=None)。これは単なる例であり、ファイル名の任意の文字、さらにはドットまで可能です。
UTF-8ロケールを使用すると、シェルは上記の出力を提供します。ただし、デフォルトのlocalなど、すべてのUnicode文字を含まないロケールを使用すると、c
出力は次のようになります(設定でロケールを変更できますLC_ALL
)。
LC_ALL=c ls -lib
268947 -rw-r--r-- 1 root root 8 Dec 20 12:32 app
268944 -rw-r--r-- 1 root root 24 Dec 20 12:33 a\321\200\321\200
CYRILLIC SMALL LETTER ER
これはASCIIには存在しないためです。