Por que os sistemas de arquivos *nix suportam nomes de arquivos com novas linhas?

Por que os sistemas de arquivos *nix suportam nomes de arquivos com novas linhas?

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

NULe /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 DELe 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.

informação relacionada