정규화되지 않은 UTF-8 디렉터리 이름

정규화되지 않은 UTF-8 디렉터리 이름

내 디렉토리 중 하나에서 흥미로운 점을 발견했습니다.

$ 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 TILDEn앞의 문자와 동일한 "공간" 에 인쇄됩니다 .

이것은 실제로 몇 년 전에 Android 장치(Samsung Note 3)에서 작성한 다음 ADB를 통해 Linux 데스크톱에 복사한 메모이며 최근까지 남아 있었습니다. 이는 질문의 세계를 열어줍니다.

  1. 캐릭터 조합 규제는 누가 담당하나요? 나는 이 책임을 파일을 작성하는 프로그램(또는 놀랍게도 최종 사용자)에게 위임하는 것이 문제를 더욱 악화시킬 뿐이라고 생각합니다. 파일 시스템 표준화를 권장해야 할까요?

  2. 파일 시스템의 정규화 문제를 처리할 수 있는 도구가 있습니까? 서로 다른 정규화된 형식으로 동일한 이름의 디렉터리를 찾고 이러한 디렉터리를 중복 제거하고 병합하는 등의 작업이 가능합니까? mtimes처럼 업데이트하지 않고 전체 파일 시스템을 표준 정규화된 형식으로 가져올 수도 있습니다.

  3. 이러한 문제로 인해 어떤 프로그램이 충돌할 가능성이 있습니까? 문제가 없는 ncdu것 같지만 find다른 소프트웨어가 다른 정규화에서 동일한 이름을 가진 디렉터리를 잘 처리하지 않는지 알고 싶습니다. 예를 들어, 소프트웨어의 표준화된 파일 이름은 열린 파일 이름과 다르게 기록되기 때문에 사용자가 다른 디렉토리에 쓰려고 하면 한 디렉토리의 내용을 덮어씁니다.

  4. 내가 기대하지 않은 것이 또 있는 걸까?

관련 정보