Uniformidade de arquivos Linux

4

Como é que, se você estiver em uma pasta com vários arquivos - imagens, executáveis binários, scripts, até mesmo diretórios, arquivos zip, quase tudo - como é quando você bate em ls -l , você obtém saída semelhante (para o formulário) para todos os arquivos?

É como se os arquivos fossem colocados em super arquivos uniformes e com metadados anexados, como a estrutura de blocos de controle dos processos.

E como é que os arquivos que você espera não ter nada a ver com Unix ou Linux não representam problema? Existe como um pré-processador de sistema de arquivos para lidar com arquivos do mundo do Windows? Ou são arquivos que multi-plataforma que não é necessário? (Isso seria alguma coisa!)

Existe uma maneira de você ver essa camada oculta (?)? (Mesmo HTML (para não mencionar Lisp, etc.) é difícil de entender apenas lendo sobre isso. Mas quando você o vê, você entende imediatamente.)

    
por Emanuel Berg 19.07.2012 / 15:54

2 respostas

8

Você atingiu quase exatamente as respostas corretas. Você só precisa de alguns detalhes preenchidos.

Na maioria das vezes (arquivos especiais excluídos), todos os arquivos são tratados exatamente da mesma forma, e os diretórios (a.k.a. "folders") podem ser implementados como arquivos. Os arquivos são na verdade apenas uma série de blocos de disco. Os "metadados" dos quais você escreve são chamados de "inodes" (veja O que é um Superbloco, Inode, Dentry, Arquivo e O que é um inode neste site). Os diretórios (ou "pastas") são apenas uma maneira de associar um nome de arquivo a um inode. Os metadados, além do nome (tipo de arquivo, permissões, propriedades, etc), residem no inode. Os metadados estão em formato binário, principalmente para compacidade e velocidade de acesso: a análise XML ou qualquer outro formato de texto demoraria demais.

Você pode ver uma representação de texto dos metadados do arquivo com o comando stat : stat /bin/cat lhe interessará. stat é um comando GNU, por isso não estará disponível universalmente, mas a maioria das distribuições Linux deve tê-lo.

No que diz respeito a arquivos "estrangeiros", o conceito file / inode / directory vem de uma época em que a variabilidade dos systsms operacionais era muito maior do que é hoje. Os projetistas do Unix e seu sistema de arquivos original tinham muita experiência com o que hoje seria considerado sistemas operacionais e sistemas de arquivos muito bizarros. O conceito file / inode / directory quase certamente incorpora todas as suas experiências, e assim as variações moderadas em "o que é um arquivo" que os sistemas operacionais mais homogêneos fornecem não são realmente um problema. Para uma olhada nisso a partir de 20 anos atrás, veja O Sistema de Arquivos Pertence ao Kernel . Para um exame mais recente, consulte The Hideoous Name . Essa é uma postagem do blog de Russ Cox, leia também o artigo de Rob Pike, as referências do post do blog. Você receberá esclarecimento disso.

    
por 19.07.2012 / 16:12
4

Todos os arquivos são uma seqüência de bytes ocultos. Não importa o que está neles. O sistema só precisa saber quantos bytes existem no arquivo e organizar um local para armazenar esses bytes. Qualquer que seja o conteúdo do arquivo, é um monte de bytes.

Para cada arquivo, o sistema também armazena alguns metadados . Os metadados são independentes do conteúdo do arquivo; na verdade, você poderia dizer que o conteúdo é um desses itens de metadados (mas geralmente é considerado separadamente, porque o conteúdo tem um tamanho variável e pode ser muito grande). Quais metadados são armazenados depende do tipo de sistema de sistema de arquivos . Os sistemas de arquivos Unix geralmente fornecem o que você vê em ls : permissões, uma hora de modificação e assim por diante. O nome do arquivo também é uma parte dos metadados com um status um tanto especial: ele é exclusivo, ou seja, não pode haver dois arquivos com o mesmo nome (no mesmo diretório).

Os arquivos são organizados em diretórios . Um diretório pode conter arquivos regulares, subdiretórios e alguns tipos de arquivos especiais, como links simbólicos . Existe um diretório chamado diretório raiz que todos os diretórios são subdiretórios n vezes removidos. / p>

O caminho para um arquivo indica como encontrá-lo a partir do diretório raiz. Cada diretório a ser percorrido é dado alternadamente, indo da raiz para baixo, com barra / caracteres após cada nome de diretório. Por exemplo, /usr/bin/env significa iniciar no diretório raiz / , vá para o subdiretório usr , vá para o subdiretório bin e procure a entrada env nesse subdiretório.

Quando você lista o conteúdo de um diretório, o kernel (que inclui os drivers do sistema de arquivos) não a tarefa de ler os bytes que representam o diretório no disco e convertê-los em uma lista de nomes de arquivos, metadados e localização de conteúdo. O programa ls chama uma função chamada opendir para abrir o diretório e faz chamadas repetidas para readdir para leia cada entrada no diretório, por sua vez, ou seja, para obter a lista de nomes de arquivos nesse diretório (incluindo os subdiretórios e outros arquivos especiais). Com ls -l , o programa ls precisa de mais informações sobre o arquivo do que apenas o nome, por isso ele também chama stat para recuperar os metadados de cada arquivo.

Alguns sistemas operacionais permitem visualizar a representação em disco de um diretório com qualquer programa de visualização de texto, como cat . O Linux não deixa você embora. Você pode usar o programa debugfs para explorar o sistema de arquivos (use-o somente no modo somente leitura!).

    
por 20.07.2012 / 03:43