Cette question m'est venue l'autre jour lorsque je travaillais sur un projet de développement qui s'appuie sur un cadre d'opinion en ce qui concerne les noms de fichiers. Le cadre (non pertinent ici) voulait voir les noms de fichiers en majuscules en premier. Cela m'a fait réfléchir.
Sur un système de fichiers insensible à la casse, disons extFAT ou HFS + (spécifiquement non sensible à la casse) comment le système de fichiers permet-il d'accéder au même fichier avec les versions majuscules et minuscules du nom de fichier.
Par exemple:
$ 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
Toutes ces commandes seront résolues dans le même répertoire. Ce comportement, en particulier la sortie d' pwd
une fonction bash
dans ce cas, me montre-t-il simplement ce qu'il pense que je veux voir?
Un autre exemple:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
Le système de fichiers signale ici le cas du nom de fichier d'origine tel que créé par l'utilisateur ou le programme.
À quel stade de la pile du système de fichiers le nom de fichier lisible par l'homme est-il conservé tel qu'il a été créé (par exemple, majuscules et minuscules) afin qu'il puisse être consulté par n'importe quelle combinaison des caractères ASCII en majuscules et en minuscules corrects? Est-ce juste une astuce regex quelque part ou y a-t-il autre chose qui se passe?
EDIT: Il semble que le comportement que je suis curieux de savoir se trouve dans cas préservant les systèmes de fichiers insensibles à la casse après quelques recherches ...
Réponses:
Un système de fichiers insensible à la casse signifie simplement que chaque fois que le système de fichiers doit demander "A fait-il référence au même fichier / répertoire que B?" il compare les noms des fichiers / répertoires en ignorant les différences en majuscules / minuscules (exactement ce qui compte les différences majuscules / minuscules dépend du système de fichiers - ce n'est pas évident une fois que vous avez dépassé ASCII). Un système de fichiers sensible à la casse n'ignore pas ces différences.
Un système de fichiers respectant la casse stocke les noms de fichiers comme indiqué. Un système de fichiers ne respectant pas la casse ne le fait pas; il convertit généralement toutes les lettres en majuscules avant de les stocker (théoriquement, il pourrait utiliser des minuscules, ou le cas de RaNsOm NoTe, ou autre, mais AFAIK tous ceux du monde réel utilisaient des majuscules).
Vous pouvez combiner ces deux attributs dans n'importe quelle combinaison. Je ne sais pas si vous pouvez trouver des systèmes de fichiers ne respectant pas la casse, mais vous pouvez certainement en créer un. Cependant, toutes les autres combinaisons existent ou existaient dans des systèmes réels.
Un système de fichiers respectant la casse et ne respectant pas la casse (le type de système de fichiers le plus courant ne respectant pas la casse de nos jours) stockera et renverra les noms de fichiers dans la majuscule que vous avez créée ou renommée pour la dernière fois, mais lors de la comparaison de deux noms de fichiers (pour vérifier si un existe, pour en ouvrir un, pour en supprimer un, etc.) il ignorera les différences de casse.
Lorsque vous utilisez un système de fichiers sensible à la casse sur un système Unix, divers utilitaires vont faire des choses étranges parce que Unix utilise traditionnellement des systèmes de fichiers-donc sensibles à la casse , ils ne sont pas attendre
Document1
etdocument1
d'être le même fichier.Dans le
pwd
cas, ce que vous voyez, c'est que par défaut, il sort simplement le chemin que vous avez réellement utilisé pour accéder au répertoire. Donc, si vous y êtes arrivé viacd DirName
, il sera utiliséDirName
dans la sortie. Si vous y êtes arrivé viaDiRnAmE
, vous verrezDiRnAmE
dans la sortie. Bash fait cela en gardant une trace de la façon dont vous êtes arrivé à votre répertoire actuel dans la$PWD
variable d'environnement. Il s'agit principalement de liens symboliques (si vous êtescd
dans un lien symbolique, vous verrez le lien symbolique dans votrepwd
, même s'il ne fait en fait pas partie du chemin d'accès à votre répertoire actuel). Mais cela donne également le comportement quelque peu étrange que vous observez sur les systèmes de fichiers insensibles à la casse. Je soupçonne quepwd -P
cela vous donnera le nom du répertoire en utilisant le cas stocké sur le disque, mais je n'ai pas testé.la source