De acuerdo aesta página:
Los nombres de archivos en Linux pueden contener cualquier carácter excepto (1) una barra diagonal ( / ), que está reservada para usarse como nombre del directorio raíz (es decir, el directorio que contiene todos los demás directorios y archivos) y como separador de directorios. y (2) el carácter nulo (que se utiliza para terminar segmentos de texto). Los espacios están permitidos, aunque es mejor evitarlos porque en algunos casos pueden ser incompatibles con el software heredado.
Genial, ambas restricciones tienen mucho sentido. Dado que es claramente posible prohibir la inclusión de ciertos caracteres en los nombres de archivos, ¿por qué se permitieron las nuevas líneas? Por lo que puedo decir, su único uso escomplicar nuestros guiones. ¿Existe alguna vez una razón válida para tener una nueva línea en el nombre de un archivo?
Respuesta1
NUL
y /
tiene sus funciones de sistema designadas. Otros personajes no.
Eso es lo básico; el resto son opiniones, especulaciones e historia. Escuchado, leído, etc. y sólo incluido comorellenono es un debate o discusión:
- Al prohibir ciertos caracteres, se abre la puerta a la complejidad del propio sistema de archivos, lo que equivale a comprometerlo.
- ¿Qué pasa con los bytes que constituyen una nueva línea en varios sistemas?
<CR>
vs<LF>
etc. - ¿Qué pasa si un sistema remoto decide crear un archivo con nueva línea en un NFS?
- ¿Qué pasa si el nombre del archivo se corrompe mientras el contenido del archivo está intacto?
- ¿Qué pasa si una aplicación codifica información en el nombre del archivo?
Y sigue
- ¿Es tarea del sistema corregir errores en el software del usuario?
- ¿Debería un sistema, en su nivel raíz, proteger a los usuarios de sí mismos?
- ¿La forma en que se implementan internamente los distintos shells debería regir la decisión sobre qué nombres de archivos se consideran legales?
El sistema operativo básico no pone limitaciones. La información hacia y desde el sistema son flujos de bytes. Si un byte no tiene un significado especial, no genere gastos generales agregando comprobaciones que deberían manejarse en el espacio del usuario.
De todos modos, el mayor problema probablemente sea la larga historia en la que se han permitido nuevas líneas y otros caracteres de control.
Otro caso es qué prohibir. Mencionas una nueva línea, pero en las discusiones sobre la edad de piedra de UNIX, esto se ha debatido y luego se han incluido otros personajes. ¿Debería *
estar prohibido? ¿Qué pasa con los nombres de archivos que comienzan con -
? ¿Qué pasa con DEL
y ESC
? ¿Deberían prohibirse todos los personajes de control? Y así sucesivamente y así sucesivamente.
Lamentablemente, no recuerdo ninguna cita sobre este tema de los padres fundadores o de los mantenedores del código.