¿Cómo muestran los sistemas de archivos que no distinguen entre mayúsculas y minúsculas los nombres de archivo en mayúsculas y minúsculas?

12

Esta pregunta se me ocurrió el otro día cuando estaba trabajando en un proyecto de desarrollo que se basa en un marco de opinión con respecto a los nombres de archivo. El marco (irrelevante aquí) quería ver los nombres de archivo en mayúscula. Esto me hizo pensar.

En un sistema de archivos que no distingue entre mayúsculas y minúsculas, diga extFAT o HFS + (específicamente no distingue entre mayúsculas y minúsculas) cómo el sistema de archivos proporciona acceso al mismo archivo con versiones en mayúsculas y minúsculas del nombre de archivo.

Por ejemplo:

$ 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

Todos estos comandos se resolverán en el mismo directorio. ¿Es este comportamiento, específicamente el resultado de pwdsolo una función de bashen este caso, solo mostrarme lo que cree que quiero ver?

Otro ejemplo:

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

El sistema de archivos aquí informa el caso del nombre de archivo original creado por el usuario o programa.

¿En qué punto de la pila del sistema de archivos se conserva el nombre de archivo legible por humanos tal como se creó (por ejemplo, mayúsculas y minúsculas) para que se pueda acceder a él mediante cualquier combinación de los caracteres ASCII mayúsculas y minúsculas? ¿Es esto solo un truco de expresiones regulares en algún lugar o hay algo más?

EDIT: Parece que el comportamiento Tengo curiosidad se encuentra en mayúsculas y la preservación de los sistemas de archivos entre mayúsculas y minúsculas después de algunas investigaciones más ...

111 ---
fuente
No escribo esto como respuesta porque ya no lo sé con certeza, pero creo que no puede tener ~ / Documentos y ~ / documentos en ese sistema de archivos. Pero cuando cd ~ / Documentos o ~ / documentos vas al mismo lugar y tu shell "está jugando bien" al recordar lo que escribiste. El otro lado es que algunos FS almacenan la forma en que se creó en un auxiliar. trozo de datos. Por ejemplo, almacenar ~ / Documentos en una tabla de búsqueda pero escribir en el FS como ~ / documentos. Básicamente creando una ilusión de que el sistema de archivos se preocupa por la carcasa cuando no lo hace.
coteyr
Por lo que he observado, en el caso de que un directorio contenga dos nombres de archivo que sean idénticos, excepto por mayúsculas y minúsculas, los sistemas de archivos que no distinguen entre mayúsculas y minúsculas pueden responder a una solicitud de un archivo determinado seleccionando uno arbitrariamente. Tales situaciones pueden surgir si las reglas para la conversión de mayúsculas / minúsculas cambian después de que se crea un archivo.
supercat
Información interesante sobre la naturaleza de preservación de casos de NTFS: superuser.com/questions/364057/why-is-ntfs-case-sensitive
Canadian Luke

Respuestas:

14

Un sistema de archivos que no distingue entre mayúsculas y minúsculas solo significa que cada vez que el sistema de archivos tiene que preguntar "¿A se refiere al mismo archivo / directorio que B?" compara los nombres de archivos / directorios ignorando las diferencias en mayúsculas / minúsculas (exactamente lo que cuentan las diferencias en mayúsculas / minúsculas depende del sistema de archivos; no es obvio una vez que se supera ASCII). Un sistema de archivos sensible a mayúsculas y minúsculas no ignora esas diferencias.

Un sistema de archivos que conserva las mayúsculas y minúsculas almacena los nombres de los archivos como se indica. Un sistema de archivos que no conserva mayúsculas y minúsculas no lo hace; Por lo general, convertirá todas las letras a mayúsculas antes de almacenarlas (en teoría, podría usar minúsculas o el caso RaNsOm NoTe, o lo que sea, pero AFAIK todos los del mundo real usaron mayúsculas).

Puede poner esos dos atributos juntos en cualquier combinación. No estoy seguro de si puede encontrar sistemas de archivos que no distingan entre mayúsculas y minúsculas, pero ciertamente podría crear uno. Sin embargo, todas las otras combinaciones existen o existieron en sistemas reales.

Por lo tanto, un sistema de archivos que distingue entre mayúsculas y minúsculas (el tipo de sistema de archivos que no distingue mayúsculas y minúsculas hoy en día) almacenará y devolverá los nombres de archivo en cualquier capitalización que haya creado o renombrado por última vez, pero al comparar dos nombres de archivo (para verificar si uno existe, abrir uno, eliminar uno, etc.) ignorará las diferencias entre mayúsculas y minúsculas.

Cuando usa un sistema de archivos que no distingue entre mayúsculas y minúsculas en un cuadro de Unix, varias utilidades harán cosas raras porque Unix tradicionalmente usa sistemas de archivos sensibles a mayúsculas y minúsculas, por lo que no esperan Document1y document1son el mismo archivo.

En el pwdcaso, lo que está viendo es que, de forma predeterminada, solo genera la ruta que realmente utilizó para llegar al directorio. Entonces, si llegaste allí cd DirName, se usará DirNameen la salida. Si llegaste allí DiRnAmE, verás DiRnAmEen la salida. Bash hace esto haciendo un seguimiento de cómo llegó a su directorio actual en la $PWDvariable de entorno. Principalmente esto es para enlaces simbólicos (si ingresas cden un enlace simbólico, verás el enlace simbólico en tu pwd, aunque en realidad no sea parte de la ruta a tu directorio actual). Pero también proporciona el comportamiento un tanto extraño que observa en los sistemas de archivos que no distinguen entre mayúsculas y minúsculas. Sospecho que eso pwd -Ple dará el nombre del directorio usando el caso almacenado en el disco, pero no lo he probado.

derobert
fuente
¡Podría haber sabido que me ganaste a este! (votado a favor)
Fabby