web-dev-qa-db-ja.com

同じファイル名が異なる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

このようなことをどのようにして達成できるのでしょうか?

11
dejdej

その振る舞いを再現することができました。例を見てください:

_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は同じではありませんが、似ています。 1行目は_LATIN SMALL LETTER P_で、2行目は_CYRILLIC SMALL LETTER ER_です( を参照してください)https://unicode.org/cldr/utility/confusables.jsp?a = p&r = None )。これは単なる例であり、ファイル名のすべての文字、ドットも含まれます。

UTF-8ロケールを使用すると、シェルが上記の出力を表示します。ただし、デフォルトのロケールcなど、すべてのUnicode文字を含まないロケールを使用すると、出力は次のようになります(_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に存在しないためです。

11
chaos

私は同じ問題を抱えていました。 inodeが異なるが、どうやら同じ名前(フランス語)の2つのファイル。Chaosの優れた答えは、私を軌道に乗せました。2番目のファイルの名前の2つの文字éは、最初のファイルのものとは異なります。ファイルには同じiノードがありません。

me @ ubuntu$ ls -li 2020\06\03\CR\R *
9586921 -rw-rw-r-- 1 francis francis 107933 jun 4 18:53 '2020 06 03 CRRéunionéquipe.docx'
9569690 -rw-rw-r-- 1 francis francis 107933 jun 4 17:11 '2020 06 03 CRRéunionéquipe.docx'

そして、それらは完全に同じ名前ではありません:

me @ 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 '

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

me @ ubuntu$ cmp '2020 06 03 CRRéunionéquipe.docx' '2020 06 03 CRRéunionéquipe.docx'

説明は、2番目のファイルの名前では、éはUTF8ラテン小文字E(AC3付き)(C3 A9)であり、最初のラテン小文字E +複合アクセント(65 CC 81)では次のとおりです。

Hexa dump of the two file names

注意:ラテン小文字E +組み合わせアクセントのアクセントをWebフォームに貼り付けると、ラテン小文字Eとアクセント付きに変換できます。

0
Francis Gernet