내 디렉토리 중 하나에서 흥미로운 점을 발견했습니다.
$ ls -li
total 36
2625309 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Español
2625385 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Español
2625396 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Français
2625406 drwxrwxr-x 2 dotancohen dotancohen 4096 Jul 4 2022 Français
$ ls Espa<tab><tab>
Español/ Español/
$ echo Espa* | od -tx1 -c
0000000 45 73 70 61 6e cc 83 6f 6c 20 45 73 70 61 c3 b1
E s p a n 314 203 o l E s p a 303 261
0000020 6f 6c 0a
o l \n
0000023
이들은 다른 디렉토리입니다. inode 번호가 다릅니다(첫 번째 열, 이것이 -i
해당 플래그가 사용되는 이유입니다). 두 개의 스페인어 디렉토리에는 서로 다른 이름이 있으며 그 중 하나의 이름은 다음과 같습니다.일곱수치: E
s
p
a
ñ
o
l
. 상대방의 이름은 다음과 같습니다.여덟수치: E
s
p
a
n
COMBINING TILDE
o
l
. 시각적으로 두 파일 이름은 구별할 수 없으며 모든 소프트웨어에서 둘 중 하나를 만들 수 있습니다. 이것COMBINING TILDE
n
앞의 문자와 동일한 "공간" 에 인쇄됩니다 .
이것은 실제로 몇 년 전에 Android 장치(Samsung Note 3)에서 작성한 다음 ADB를 통해 Linux 데스크톱에 복사한 메모이며 최근까지 남아 있었습니다. 이는 질문의 세계를 열어줍니다.
캐릭터 조합 규제는 누가 담당하나요? 나는 이 책임을 파일을 작성하는 프로그램(또는 놀랍게도 최종 사용자)에게 위임하는 것이 문제를 더욱 악화시킬 뿐이라고 생각합니다. 파일 시스템 표준화를 권장해야 할까요?
파일 시스템의 정규화 문제를 처리할 수 있는 도구가 있습니까? 서로 다른 정규화된 형식으로 동일한 이름의 디렉터리를 찾고 이러한 디렉터리를 중복 제거하고 병합하는 등의 작업이 가능합니까? mtimes처럼 업데이트하지 않고 전체 파일 시스템을 표준 정규화된 형식으로 가져올 수도 있습니다.
이러한 문제로 인해 어떤 프로그램이 충돌할 가능성이 있습니까? 문제가 없는
ncdu
것 같지만find
다른 소프트웨어가 다른 정규화에서 동일한 이름을 가진 디렉터리를 잘 처리하지 않는지 알고 싶습니다. 예를 들어, 소프트웨어의 표준화된 파일 이름은 열린 파일 이름과 다르게 기록되기 때문에 사용자가 다른 디렉토리에 쓰려고 하면 한 디렉토리의 내용을 덮어씁니다.내가 기대하지 않은 것이 또 있는 걸까?