異なるINODESを持つ同じファイル名

異なるINODESを持つ同じファイル名

最近、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には存在しないためです。

答え2

ちょうど同じ問題が発生しました。どちらのファイルも異なるinodeを持っていますが、名前は明らかに同じです(フランス語で)。 Chaosの優れた答えは、2番目のファイル名の2文字のéが最初のファイルの名前と異なるという事実を明らかにしました。次のファイルには同じ inode はありません。

私@ Ubuntu:~$ ls -li 2020\ 06\ 03\ CR\ R* 
9586921 -rw-rw-r-- 1 francis francis 107933 jun 4 18:53 '2020 06 03 CR Réunion équipe.docx'
956 - 1 francis francis 107933 6月4日17:11 '2020 06 03 CR Reunion Island.docx'

そして彼らはまったく同じ名前を持っていません:

私@ Ubuntu:~$ LC_ALL=c ls 2020\ 06\ 03\ CR\ R* 
bash: 警告: setlocale: LC_ALL: ロケールを変更できません。 (c)
'2020 06 03 CR Re'$'\314\201''union e'$' \314\201''quipe.docx' '2020 06 03 CR R'$'\303\251''ユナイテッド' $'\303\251''quipe.docx'

そしてその内容は同じです:

私@ Ubuntu:~$ cmp '2020 06 03 CRレビニオン島.docx' '2020 06 03 CRレビニオン島.docx'

説明によると、2番目のファイル名では、éはUTF8 LATIN SMALL LETTER E AND ACUTE(C3 A9)、最初のLATIN SMALL LETTER E + COMBINING ACUTE ACCENT(65 CC 81)です。

2つのファイル名の16進ダンプ

LATIN SMALL LETTER E + COMBINING ACUTE ACCENTをWebフォームに貼り付けると、LATIN SMALL LETTER E AND ACUTEに変換されます。

関連情報