Wie zeigen Dateisysteme, bei denen die Groß- und Kleinschreibung nicht beachtet wird, Dateinamen in Groß- und Kleinschreibung an?

12

Diese Frage stellte sich mir neulich, als ich an einem Entwicklungsprojekt arbeitete, das auf einem mit einer Meinung versehenen Rahmen hinsichtlich der Dateinamen beruht. Das Framework (hier irrelevant) wollte die Dateinamen in Großbuchstaben sehen. Das brachte mich zum Nachdenken.

Sagen Sie auf einem Dateisystem, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, extFAT oder HFS + (insbesondere nicht die Groß- und Kleinschreibung) .

Beispielsweise:

$ 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

Alle diese Befehle werden in dasselbe Verzeichnis aufgelöst. Ist dieses Verhalten, speziell die Ausgabe von pwdnur einer Funktion, bashin diesem Fall nur zu zeigen, was es denkt, dass ich sehen möchte?

Ein anderes Beispiel:

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

Das Dateisystem meldet hier den Fall des ursprünglichen Dateinamens, wie er vom Benutzer oder Programm erstellt wurde.

An welcher Stelle im Dateisystemstapel bleibt der lesbare Dateiname beim Erstellen erhalten (z. B. Groß- und Kleinbuchstaben), sodass auf ihn durch eine beliebige Kombination der korrekten ASCII-Groß- und Kleinbuchstaben zugegriffen werden kann? Ist das irgendwo nur ein Regex-Trick oder ist da noch etwas los?

EDIT: Es sieht aus wie das Verhalten , das ich neugierig bin in gefunden Fall erhalt Groß- und Kleinschreibung von Dateisystemen nach einiger mehr Forschung ...

111 ---
quelle
Ich schreibe dies nicht als Antwort, weil ich es nicht mehr genau weiß, aber ich glaube, dass Sie ~ / Documents und ~ / documents nicht in diesem Dateisystem haben können. Aber wenn Sie ~ / Documents oder ~ / documents cdieren, gehen Sie an die gleiche Stelle und Ihre Shell "spielt schön", indem Sie sich merken, was Sie eingegeben haben. Die andere Seite ist, dass einige FS die Art und Weise speichern, wie sie in einem Aux erstellt wurden. Datenblock. Zum Beispiel ~ / Documents in einer Nachschlagetabelle speichern, aber als ~ / documents in den FS schreiben. Grundsätzlich entsteht die Illusion, dass das Dateisystem sich um die Gehäuse kümmert, wenn dies nicht der Fall ist.
Coteyr
Falls ein Verzeichnis zwei Dateinamen enthält, die bis auf die Groß- und Kleinschreibung identisch sind, können Dateisysteme ohne Berücksichtigung der Groß- und Kleinschreibung auf eine Anfrage nach einer bestimmten Datei reagieren, indem sie einen beliebigen Namen auswählen. Solche Situationen können auftreten, wenn sich die Regeln für die Konvertierung von Groß- und Kleinbuchstaben ändern, nachdem eine Datei erstellt wurde.
Supercat
Coole Informationen zum Fallbewahrungsverhalten von NTFS: superuser.com/questions/364057/why-is-ntfs-case-sensitive
Canadian Luke

Antworten:

14

Ein Dateisystem, bei dem die Groß- und Kleinschreibung nicht beachtet wird, bedeutet lediglich, dass sich A auf dieselbe Datei / dasselbe Verzeichnis wie B bezieht, wenn das Dateisystem gefragt werden muss. Es vergleicht die Namen von Dateien / Verzeichnissen, wobei Unterschiede in Groß- / Kleinschreibung ignoriert werden (genau die Anzahl der Unterschiede in Groß- / Kleinschreibung hängt vom Dateisystem ab - es ist nicht offensichtlich, wenn Sie über ASCII hinausgehen). Ein Dateisystem, bei dem die Groß- und Kleinschreibung beachtet wird, ignoriert diese Unterschiede nicht.

Ein Dateisystem, das die Groß- und Kleinschreibung beibehält, speichert Dateinamen wie angegeben. Ein Dateisystem, bei dem die Groß- / Kleinschreibung nicht beibehalten wird, führt dies nicht aus. In der Regel werden alle Buchstaben vor dem Speichern in Großbuchstaben konvertiert (theoretisch können Kleinbuchstaben, RaNsOm NoTe-Großbuchstaben oder was auch immer verwendet werden, aber AFAIK verwendet für alle realen Buchstaben Großbuchstaben).

Sie können diese beiden Attribute in einer beliebigen Kombination zusammenfassen. Ich bin nicht sicher, ob Sie nicht case-preserving case-sensitive Dateisysteme finden können, aber Sie könnten sicherlich eines erstellen. Alle anderen Kombinationen existieren oder existierten in realen Systemen.

Daher speichert und gibt ein case-preserving, case-insensitives Dateisystem (das heutzutage am häufigsten verwendete case-insensitive Dateisystem) Dateinamen in der Groß- und Kleinschreibung zurück, in der Sie sie erstellt oder zuletzt umbenannt haben, wenn Sie jedoch zwei Dateinamen vergleichen (um zu prüfen, ob einer vorhanden ist) existiert, um eine zu öffnen, eine zu löschen, etc.) werden die Unterschiede zwischen Groß- und Kleinschreibung ignoriert.

Wenn Sie ein Groß- und Kleinschreibung Dateisystem auf einem Feld Unix verwenden, werden verschiedene Dienstprogramme seltsame Dinge tun , weil Unix - case-sensitiven Dateisystem-so traditionell verwendet werden sie nicht erwartet Document1und document1die gleiche Datei zu sein.

In diesem pwdFall wird standardmäßig nur der Pfad ausgegeben, den Sie tatsächlich zum Verzeichnis verwendet haben. Wenn Sie über dort ankommen cd DirName, wird es DirNamein der Ausgabe verwendet. Wenn Sie über dort angekommen sind DiRnAmE, werden Sie DiRnAmEin der Ausgabe sehen. Bash führt dies durch, indem es festhält, wie Sie in der $PWDUmgebungsvariablen zu Ihrem aktuellen Verzeichnis gelangt sind. Dies gilt hauptsächlich für Symlinks (wenn Sie cdin einen Symlink eingebunden sind, wird der Symlink in Ihrem angezeigt pwd, obwohl er eigentlich nicht Teil des Pfads zu Ihrem aktuellen Verzeichnis ist). Es gibt aber auch das etwas seltsame Verhalten, das Sie auf Dateisystemen beobachten, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. Ich vermute, pwd -Pdass Sie den Verzeichnisnamen anhand der auf der Festplatte gespeicherten Groß- / Kleinschreibung erhalten, die Sie jedoch nicht getestet haben.

derobert
quelle
Ich hätte wissen können, dass du mich mit diesem verprügelt hast! (upvoted)
Fabby