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 pwd
solo una función de bash
en 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 ...
fuente
Respuestas:
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
Document1
ydocument1
son el mismo archivo.En el
pwd
caso, 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áDirName
en la salida. Si llegaste allíDiRnAmE
, verásDiRnAmE
en la salida. Bash hace esto haciendo un seguimiento de cómo llegó a su directorio actual en la$PWD
variable de entorno. Principalmente esto es para enlaces simbólicos (si ingresascd
en un enlace simbólico, verás el enlace simbólico en tupwd
, 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 esopwd -P
le dará el nombre del directorio usando el caso almacenado en el disco, pero no lo he probado.fuente