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

9

De acordo com esta página :

File names in Linux can contain any characters other than (1) a forward slash ( / ), which is reserved for use as the name of the root directory (i.e., the directory that contains all other directories and files) and as a directory separator, and (2) the null character (which is used to terminate segments of text). Spaces are permitted, although they are best avoided because they can be incompatible with legacy software in some cases.

Ótimo, ambas as restrições fazem muito sentido. Já que é claramente possível proibir a inclusão de certos caracteres nos nomes dos arquivos, por que as novas linhas foram permitidas? Tanto quanto eu posso dizer que seu único uso é complicar nossos scripts . Existe algum motivo válido para ter uma nova linha em um nome de arquivo?

    
por terdon 04.10.2013 / 05:19

1 resposta

6

NUL e / tem suas funções de sistema designadas. Outros personagens não.

Esse é o básico disso - o resto é opiniões, especulações e história. Ouvimos, lemos, etc. e só incluímos como um preenchimento não um debate ou argumento:

  • Ao proibir determinados caracteres, você abre a complexidade no próprio sistema de arquivos, o que é o mesmo que comprometê-lo.
  • E quais bytes constituem uma nova linha em vários sistemas? <CR> vs <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 lá vai

  • É o trabalho dos sistemas para corrigir erros no software do usuário?
  • Um sistema, no nível da raiz, deve proteger os usuários de si mesmos?
  • O modo como as várias camadas são implementadas internamente regula uma decisão sobre quais nomes de arquivos são considerados legais?

O sistema operacional básico não define limitações. 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 manipuladas no espaço do usuário.

De qualquer forma, o maior problema provavelmente seria o longo histórico em que a nova linha e outros caracteres de controle foram permitidos.

Outro caso é o que proibir. Você menciona a nova linha, mas em discussões da era da pedra do UNIX, isso foi debatido, depois incluindo também outros personagens. O * deve ser proibido? E quanto aos nomes de arquivos que começam com - ? E quanto a DEL e ESC ? Todos os personagens de controle devem ser proibidos? E assim por diante e assim por diante.

Eu infelizmente não consigo relembrar quaisquer citações sobre esse tópico feitas pelos fundadores ou mantenedores de código.

    
por 04.10.2013 / 12:05