Por que o Linux não permite 'cat'ing um diretório? [duplicado]

1

Eu li em O design do sistema operacional UNIX que os diretórios são arquivos contendo os nomes de cada arquivo que eles contêm. Então eu tentei cat um no meu Mac, e isso resultou em um erro: cat: ./: Is a directory

Mas eu testei no System 7 UNIX e funcionou.

.

Por que isso não funciona em sistemas operacionais modernos? Um diretório não é mais um arquivo ou alguém decidiu que não poderíamos lê-lo?

    
por Josh Williams 30.03.2016 / 17:22

2 respostas

0

Eu acredito que a versão 7 do Unix suportava apenas um único sistema de arquivos. Sistemas operacionais modernos (incluindo Linux) suportam muitos, muitos sistemas de arquivos. Existe uma camada de código de "sistema de arquivos virtual" no kernel do Linux para fazer com que todos os diferentes sistemas de arquivos atuem como o que os programas Posix e Linux esperam. Por exemplo. O Linux pode usar sistemas de arquivos variouis MS-DOS e NTFS, e as permissões que os arquivos nesses sistemas possuem não são exatamente o usuário / grupo / outro, leitura / gravação / execução que o Linux deseja. Portanto, o código do sistema de arquivos virtual faz o trabalho de reconciliá-los. Como alguns sistemas de arquivos (sistemas de arquivos MS-DOS FAT e ReiserFS são exemplos) não têm diretórios como arquivos, o código do sistema de arquivos virtual não trata os diretórios como arquivos com uma marca especial, como o faz o UFS da Versão 7. Você pode fazer uma chamada de sistema open() em um diretório, mas é necessário usar a chamada de sistema getdents() para ler entradas de diretórios.

    
por 30.03.2016 / 17:44
-2

Eles ainda são arquivos no sentido de que "tudo no UNIX (e Linux) é um arquivo". O programa cat ficou mais inteligente e percebeu que "este é um tipo de arquivo de diretório, então exibi-lo como se fosse um arquivo de texto não faz sentido", assim o comportamento mais recente.

    
por 30.03.2016 / 17:24

Tags