De acordo comesta página:
Os nomes de arquivos no Linux podem conter quaisquer caracteres diferentes de (1) uma barra ( / ), que é reservada para uso como o nome do diretório raiz (ou seja, o diretório que contém todos os outros diretórios e arquivos) e como um separador de diretório e (2) o caractere nulo (que é usado para encerrar segmentos de texto). Espaços são permitidos, embora seja melhor evitá-los porque podem ser incompatíveis com software legado em alguns casos.
Ótimo, ambas as restrições fazem muito sentido. Como é claramente possível proibir a inclusão de certos caracteres nos nomes dos arquivos, por que foram permitidas novas linhas? Tanto quanto posso dizer, a sua única utilidade écomplicar nossos scripts. Existe um motivo válido para ter uma nova linha no nome de um arquivo?
Responder1
NUL
e /
tem suas funções de sistema designadas. Outros personagens não.
Isso é o básico – o resto são opiniões, especulações e história. Ouvido, lido etc. e incluído apenas como umenchimentonão é um debate ou argumento:
- Ao proibir certos caracteres, você abre a complexidade do próprio sistema de arquivos, o que equivale a comprometê-lo.
- E quanto a quais bytes constituem uma nova linha em vários sistemas?
<CR>
contra<LF>
etc. - E se um sistema remoto decidir criar um arquivo com nova linha em um NFS?
- E se o nome do arquivo for corrompido enquanto o conteúdo do arquivo estiver intacto?
- E se um aplicativo codificar informações no nome do arquivo?
E assim por diante
- É função do sistema corrigir bugs no software do usuário?
- Um sistema, no nível raiz, deve proteger os usuários de si mesmos?
- A forma como os vários shells são implementados internamente deveria governar a decisão sobre quais nomes de arquivos são considerados legais?
O sistema operacional básico não estabelece limitações. As informações de e para o sistema são fluxos de bytes. Se um byte não tiver um significado especial, não crie sobrecarga adicionando verificações que devem ser tratadas no espaço do usuário.
De qualquer forma, o maior problema provavelmente seria a longa história em que a nova linha e outros caracteres de controle foram permitidos.
Outro caso é o que proibir. Você menciona nova linha, mas em discussões desde a idade da pedra do UNIX, isso tem sido debatido, incluindo também outros personagens. Deveria *
ser proibido? E quanto aos nomes de arquivos que começam com -
? E quanto a DEL
e ESC
? Todos os personagens de controle deveriam ser proibidos? E assim por diante.
Infelizmente, não consigo me lembrar de nenhuma citação sobre este tópico feita pelos fundadores ou mantenedores do código.