다른 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다르지만 비슷해 보입니다. 첫 번째 줄은 a LATIN SMALL LETTER P이고 두 번째 줄은 a입니다 CYRILLIC SMALL LETTER ER(참조:https://unicode.org/cldr/utility/confusables.jsp?a=p&r=None). 이는 단지 예일 뿐이며 파일 이름의 모든 문자, 심지어 점까지 가능합니다.

UTF-8 로케일을 사용하면 쉘에서 위의 출력을 제공합니다. 그러나 기본 locale 과 같이 모든 유니코드 문자를 포함하지 않는 로케일을 사용하면 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의 뛰어난 답변을 통해 두 번째 파일 이름의 두 문자 é가 첫 번째 파일의 이름과 다르다는 사실이 분명해졌습니다. 다음 파일에는 동일한 inode가 없습니다.

나 @우분투:~$ 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'
9569690 -rw-rw-r- - 1 francis francis 107933 6월 4일 17:11 '2020 06 03 CR Reunion Island.docx'

그리고 그들은 정확히 같은 이름을 가지고 있지 않습니다:

나 @우분투:~$ 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'

그리고 그 내용은 동일합니다:

나 @우분투:~$ cmp '2020 06 03 CR 레위니옹섬.docx' '2020 06 03 CR 레위니옹섬.docx'

설명에 따르면 두 번째 파일 이름에서 é는 UTF8 LATIN SMALL LETTER E AND ACUTE(C3 A9)이고 첫 번째 LATIN SMALL LETTER E + COMBINING ACUTE ACCENT(65 CC 81)입니다.

두 파일 이름의 16진수 덤프

LATIN SMALL LETTER E + COMBINING ACUTE ACCENT를 웹 양식에 붙여넣으면 LATIN SMALL LETTER E AND ACUTE로 변환됩니다.

관련 정보