大文字と小文字を区別しないファイルシステムは、大文字と小文字の両方のファイル名をどのように表示しますか?


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

これらのコマンドはすべて同じディレクトリに解決されます。この動作、具体的pwdbashはこの場合の関数からの出力は、私が見たいと思うものを私に見せているだけですか?

もう一つの例:

$ ls ~/Documents
Derp.txt    another.txt    whatThe.WORLD

ここでのファイルシステムは、ユーザーまたはプログラムによって作成された元のファイル名のケースを報告します。

正しい大文字と小文字のASCII文字の任意の組み合わせでアクセスできるように、ファイルシステムスタックのどの時点で、人間が読み取れるファイル名が作成時に保存されますか(大文字と小文字など)。これはどこか正規表現のトリックなのでしょうか、それとも何か他のことが起こっているのでしょうか?

編集:私が興味を持っている動作は、さらに研究した後、大文字と小文字を区別しないファイルシステムで見つかったようです...


これを答えとして書いていないのは、私にはもう分からないからですが、そのファイルシステムに〜/ Documentsと〜/ documentsを含めることはできないと信じています。ただし、〜/ Documentsまたは〜/ documentsをcdすると、同じ場所に移動し、入力した内容を記憶することでシェルが「うまく再生」されます。もう1つの側面は、一部のFSがAuxで作成された方法を保存することです。データのチャンク。たとえば、〜/ Documentsをルックアップテーブルに保存し、FSに〜/ documentsとして書き込みます。基本的に、ファイルシステムが大文字と小文字を区別しないという幻想を作成します。
coteyr

私が観察したことから、大文字と小文字を区別しない同一の2つのファイル名がディレクトリに含まれている場合、大文字と小文字を区別しないファイルシステムは、1つを任意に選択することで特定のファイルの要求に応答することがあります。このような状況は、ファイルの作成後に大文字/小文字変換のルールが変更された場合に発生する可能性があります。
supercat

NTFSのケース保存性に関するクールな情報:superuser.com/questions/364057/why-is-ntfs-case-sensitive
Canadian Luke

回答:


14

大文字と小文字を区別しないファイルシステムとは、ファイルシステムが「AはBと同じファイル/ディレクトリを参照していますか?」大文字と小文字の違いを無視してファイル/ディレクトリの名前を比較します(正確に大文字と小文字の違いはファイルシステムに依存します。ASCIIを超えると、それは明白ではありません)。大文字と小文字を区別するファイルシステムは、これらの違いを無視しません。

大文字と小文字を保持するファイルシステムは、指定されたファイル名を保存します。大文字と小文字を区別しないファイルシステムはそうではありません。通常、すべての文字を大文字に変換してから保存します(理論的には、小文字、RaNsOm NoTeの大文字小文字などを使用できますが、実際の文字はすべて大文字を使用しています)。

これらの2つの属性は、任意の組み合わせで組み合わせることができます。大文字と小文字を区別しない大文字と小文字を区別するファイルシステムを見つけることができるかどうかはわかりませんが、間違いなく作成できます。ただし、他のすべての組み合わせは、実際のシステムに存在するか、存在します。

したがって、大文字と小文字を区別しない大文字小文字を区別しないファイルシステム(最近では大文字と小文字を区別しないファイルシステムの最も一般的なタイプ)は、作成した大文字または最後に名前を変更した大文字と小文字でファイル名を保存して返しますが、2つのファイル名(存在する、開く、削除するなど)、大文字と小文字の違いは無視されます。

あなたがUnixのボックスに、大文字と小文字を区別しないファイルシステムを使用する場合、Unixは伝統的に、彼らが期待していないので、ファイルシステムの大文字と小文字を区別を使用しているため、さまざまなユーティリティは、奇妙なことを行うだろうDocument1document1同じファイルであることを。

このpwd場合、表示されているのは、デフォルトで、ディレクトリに到達するために実際に使用したパスを出力するだけです。そのため、で取得した場合、出力でcd DirName使用さDirNameれます。経由でアクセスDiRnAmEした場合はDiRnAmE、出力に表示されます。Bashは、$PWD環境変数で現在のディレクトリに到達した方法を追跡することでこれを行います。これは主にシンボリックリンク用です(cdシンボリックリンクを使用するとpwd、実際に現在のディレクトリへのパスの一部ではないにもかかわらず、にシンボリックリンクが表示されます)。しかし、大文字と小文字を区別しないファイルシステムで観察されるやや奇妙な動作も提供します。pwd -Pディスクに保存されている大文字小文字を使用してディレクトリ名を提供すると思われますが、テストしていません。


私はあなたがこれに私を打ち負かしたことを知っているかもしれません!(投票)
ファビー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.