파일 이름에 관해 독선적인 프레임워크에 의존하는 개발 프로젝트를 진행하던 어느 날 이런 생각을 했습니다. 프레임워크(여기서는 관련 없음)는 대문자 우선순위로 파일 이름을 보길 원합니다. 이로 인해 생각이 들었습니다.
파일 시스템은 extFAT 또는 HFS+(특히 대소문자를 구분하지 않음)와 같은 대소문자를 구분하지 않는 파일 시스템에서 동일한 파일에 대한 액세스를 어떻게 제공합니까?둘 다파일 이름의 대문자 및 소문자 버전입니다.
예를 들어:
$ cd ~/Documents
$ pwd
/home/derp/Documents
$ cd ../documents
$ pwd
/home/derp/documents
$ cd ../docuMents
$ pwd
/home/derp/docuMents
$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS
$ cd ../documentS
$ pwd
/home/derp/documentS
이러한 모든 명령은 동일한 디렉터리로 확인됩니다. 이 동작, 특히 pwd
이 경우 함수의 출력은 bash
내가 보고 싶다고 생각하는 것을 보여주는 것입니까?
다른 예시:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
여기서 파일 시스템은 사용자나 프로그램이 만든 원본 파일 이름의 경우를 보고합니다.
파일 시스템 스택의 어느 지점에서 올바른 대문자와 소문자 ASCII 문자의 조합으로 액세스할 수 있도록 생성 시 사람이 읽을 수 있는 파일 이름(예: 대문자 및 소문자)이 보존됩니까? 이것은 어딘가에 있는 정규식 트릭인가요, 아니면 다른 일이 진행되고 있나요?
편집: 내가 궁금한 동작은 다음과 같습니다.대소변을 보존하다더 많은 연구 끝에 대소문자를 구분하지 않는 파일 시스템...
답변1
대소문자를 구분하지 않는 파일 시스템은 단순히 파일 시스템이 "A가 B와 동일한 파일/디렉터리를 참조합니까?"라고 질문해야 할 때마다 대소문자 차이(정확한 대소문자 수)를 무시하고 파일/디렉터리 이름을 비교한다는 것을 의미합니다. 차이점은 파일 시스템에 따라 다릅니다. ASCII를 넘어서면 명확하지 않습니다. 대소문자 구분 파일 시스템은 이러한 차이점을 무시하지 않습니다.
대소문자 보존 파일 시스템은 지정된 파일 이름을 저장합니다. 대소문자를 유지하지 않는 파일 시스템은 일반적으로 저장하기 전에 모든 문자를 대문자로 변환합니다(이론적으로는 소문자나 RaNsOm Note 대소문자 등을 사용할 수 있지만 내가 아는 한 실제 세계의 모든 문자는 대문자로 표기함)
이 두 속성을 어떤 조합으로든 결합할 수 있습니다. 대소문자를 보존하지 않는 대소문자 구분 파일 시스템을 찾을 수 있는지는 확실하지 않지만 확실히 만들 수는 있습니다. 그러나 다른 모든 조합은 실제 시스템에 존재하거나 존재합니다.
따라서 대소문자를 보존하고 대소문자를 구분하지 않는 파일 시스템(현재 대소문자를 구분하지 않는 가장 일반적인 파일 시스템 유형)은 파일 이름을 만들거나 마지막으로 이름을 바꾼 경우에 관계없이 파일 이름을 저장하고 반환합니다. 존재, 열기, 삭제 등) 대소문자 차이는 무시됩니다.
Unix 시스템에서 대소문자를 구분하지 않는 파일 시스템을 사용하면 Unix는 전통적으로 대소문자를 구분하는 파일 시스템을 사용하므로 동일한 파일이 Document1
될 것으로 예상하지 않기 때문에 다양한 유틸리티가 이상하게 동작합니다.document1
이 pwd
경우 기본적으로 디렉터리에 액세스하는 데 실제로 사용하는 경로만 출력된다는 것을 알 수 있습니다. 따라서 를 통해 거기에 도달하면 출력에 사용됩니다 cd DirName
. DirName
를 통해 거기에 도달하면 출력에서 이를 볼 DiRnAmE
수 있습니다 . DiRnAmE
Bash는 환경 변수에서 현재 디렉터리에 어떻게 도달했는지 추적하여 이를 수행합니다 $PWD
. 이는 주로 심볼릭 링크에 사용됩니다(심볼릭 링크로 이동하면 실제로 현재 디렉터리 경로의 일부가 아니더라도 cd
심볼릭 링크에 심볼릭 링크가 표시됩니다 ). pwd
그러나 대소문자를 구분하지 않는 파일 시스템에서 관찰되는 다소 이상한 동작도 제공됩니다. 나는 이것이 pwd -P
디스크에 저장된 케이스를 사용하여 디렉토리 이름을 제공할 것이라고 생각 하지만 아직 테스트하지 않았습니다.