대소 문자를 구분하지 않는 파일 시스템은 어떻게 대문자와 소문자 파일 이름을 표시합니까?


12

이 질문은 내가 파일 이름과 관련하여 의견이있는 프레임 워크에 의존하는 개발 프로젝트를 진행하던 어느 날 나에게 일어났다. 프레임 워크 (여기에서는 관련이 없음)는 대문자로 된 첫 번째 파일 이름을 보려고했습니다. 이것은 나를 생각하게했다.

대소 문자를 구분하지 않는 파일 시스템에서 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 문자의 조합으로 액세스 할 수 있습니까? 이것은 어딘가에 정규식 트릭입니까 아니면 다른 일이 있습니까?

편집 : 그것은 내가에서 발견에 대해 궁금 동작처럼 보이는 경우 보존 좀 더 연구 한 후 대소 문자 구분 파일 시스템 ...


더 이상 알지 못하기 때문에 이것을 대답으로 쓰지 않지만 파일 시스템에 ~ / Documents 및 ~ / documents를 가질 수 없다고 생각합니다. 그러나 당신이 ~ / Documents 또는 ~ / documents를 cd 할 때 당신은 같은 장소로 가고 쉘은 당신이 타이핑 한 것을 기억함으로써 "좋은 플레이"를합니다. 다른 측면은 일부 FS가 AUX에서 작성된 방식을 저장한다는 것입니다. 데이터 덩어리. 예를 들어 ~ / Documents를 조회 테이블에 저장하고 ~ / documents로 FS에 쓰는 것입니다. 기본적으로 파일 시스템이 케이싱에 신경 쓰지 않는 환상을 만듭니다.
coteyr

내가 관찰 한 것에서, 디렉토리가 경우를 제외하고 동일한 두 개의 파일 이름을 포함하는 경우, 대소 문자를 구분하지 않는 파일 시스템은 임의로 하나를 선택하여 주어진 파일에 대한 요청에 응답 할 수 있습니다. 파일이 작성된 후 대문자 / 소문자 변환 규칙이 변경되면 이러한 상황이 발생할 수 있습니다.
supercat

NTFS의 사례 보존 특성에 대한 유용한 정보 : superuser.com/questions/364057/why-is-ntfs-case-sensitive
Canadian Luke

답변:


14

대소 문자를 구분하지 않는 파일 시스템은 파일 시스템이 "A가 B와 동일한 파일 / 디렉토리를 참조합니까?" 대문자 / 소문자의 차이를 무시하고 파일 / 디렉토리의 이름을 비교합니다 (정확하게 대문자 / 소문자 차이가 파일 시스템에 따라 달라지는 것은 ASCII를 넘어 서면 분명하지 않습니다). 대소 문자 구분 파일 시스템은 이러한 차이점을 무시하지 않습니다.

대소 문자 보존 파일 시스템은 주어진 파일 이름을 저장합니다. 대소 문자를 보존하지 않는 파일 시스템은 그렇지 않습니다. 일반적으로 문자를 저장하기 전에 모든 문자를 대문자로 변환합니다 (이론적으로 소문자 또는 RaNsOm NoTe 케이스 등을 사용할 수 있지만 AFAIK는 모든 실제 문자를 대문자로 사용함).

이 두 속성을 조합하여 조합 할 수 있습니다. 대소 문자를 구분하지 않고 대소 문자를 구분하는 파일 시스템을 찾을 수 있는지 확실하지 않지만 확실히 만들 수는 있습니다. 그러나 다른 모든 조합은 실제 시스템에 존재하거나 존재합니다.

따라서 대소 문자를 구분하지 않고 대소 문자를 구분하지 않는 파일 시스템 (요즘 가장 일반적인 유형의 대소 문자를 구분하지 않는 파일 시스템)은 파일 이름을 대문자 또는 마지막으로 바꾼 이름으로 저장하고 반환하지만 두 파일 이름을 비교할 때 (하나를 확인하기 위해) 존재하거나, 열거 나, 삭제하는 등) 대소 문자 차이는 무시합니다.

당신은 유닉스 상자에 대소 문자를 구분 파일 시스템을 사용하는 경우 유닉스는 전통적으로 그들이 기대하지 않을 수 있도록-파일 시스템 대소 문자를 사용하기 때문에, 다양한 유틸리티는 이상한 일을 할 것이다 Document1document1같은 파일이 될 수 있습니다.

pwd경우 기본적으로 실제로 디렉토리에 도착하는 경로를 출력한다는 것입니다. 따라서를 통해 도착 하면 출력에 cd DirName사용 DirName됩니다. 당신이 거기를 통해 가지고 있다면 DiRnAmE, 당신은 볼 수 DiRnAmE출력에. Bash는 $PWD환경 변수 에서 현재 디렉토리에 도달 한 방법을 추적하여이를 수행 합니다. 주로 심볼릭 링크를위한 것입니다 (심볼릭 링크 cd를 사용하는 경우 pwd실제로는 현재 디렉토리 경로의 일부가 아니더라도 심볼릭 링크가 표시됩니다 ). 그러나 대소 문자를 구분하지 않는 파일 시스템에서 관찰되는 다소 이상한 동작을 제공합니다. 나는 의심 pwd -P디스크에 저장 케이스를 사용하면 디렉토리 이름을 줄 것이다,하지만 테스트하지 않았습니다.


나는 당신이 나를 이길 것으로 알고있다! (upvoted)
Fabby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.