Tudo é Arquivo: Parte 1

Para os sistemas baseados em UNIX, “tudo é arquivo”. Entenda o por quê não existe o conceito de pastas nestes sistemas! – Parte 1


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile! Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. Mais detalhes clicando aqui.


Sobre a Parte 1

Dividido em 2 partes, nesta primeira parte vou introduzir o conceito do por quê podemos afirmar que em sistemas UNIX tudo é arquivo em exemplos práticos. Também vou apresentar os dispositivos que são essencialmente arquivos também, tal qual falarei dos dispositivos especiais que são: /dev/null, /dev/zero, /dev/random e /dev/full.

A parte 2 será para apresentar de forma didática funcionalidades interessantes que há sobre o conceito de tudo ser um arquivo, por exemplo, como transformar um arquivo em uma partição!

1. Introdução

  • Do que se trata?

Tudo é Arquivo é o conceito da maneira como o sistema registra e mantem tudo em sua estrutura, de sistema de arquivos, independente se for EXT4, BTRFS, ZFS, todos se comportam dessa forma. Opostamente a outros sistemas operacionais, os do tipo UNIX tratam tudo como um arquivo comum.

Isso significa que não apenas as partições são montadas como arquivos, como também diretórios de dispositivos específicos como a própria memória RAM, Smartphone, discos externos e discos de mídia do tipo óptica, enfim, todos são meros “arquivos”.

Além desses, soquetes e pipes da área de redes, assim como chamadas do Kernel e quaisquer terminais TTY, todos também são arquivos!

1.1 Jurassic Park

O conceito simplificado de tratar tudo como arquivo já foi abordado inclusive como um recurso de roteiro e de sistema, no filme de Steven Spielberg: Jurassic Park®!

Em uma das cenas, os personagens lidam com um computador para encontrar uma maneira de restabelecer a energia no complexo; Nesse momento á uma comparação (e uma brincadeira) com o sistema de arquivos UNIX e a planta do local em que estão:

  • Isso é um sistema UNIX. Eu conheço. São os arquivos de todo o parque. É como uma agenda telefônica, ele te diz tudo.

No filme, o mapa de pastas em disposição 3D também representava de forma grosseira um mapa quase intuitivo de locais do parque. Portanto bastava navegar pela hierarquia de arquivos do sistema que – ficticiosamente – não seria difícil chegar ao objetivo desejado.

Considerando que tudo é arquivo, até os controles de eletricidade e travas elétricas seriam meros arquivos no mapa disposto.

1.1.1 O Sistema

O computador em si é um Silicon Graphics Inc. Crimson, da família SGI IRIS 4D, a primeira workstation 64 bits de arquitetura MIPS de 1990, que executava sob UNIX®, mais especificamente o sistema IRIX.

Não pense que o SGI Crimson não tinha importância e era apenas parte do roteiro: Além de fazer uma “ponta” no filme, foi especificamente com diversas unidades desse modelo de workstation que o filme foi renderizado.

Sistema de arquivos do UNIX® IRIX: Notou a semelhança com o que é visto no filme?

  • Mas em quê as pastas 3D do IRIX tem relação com “tudo ser arquivo” e com o filme?

O IRIX em sua época foi ousado ao usar um sistema de arquivos que curiosamente exibia os dados e pastas como um mapa em 3D, cuja navegação era tal qual a mesma vista no filme.

Caso deseje, pode obter resultado semelhante instalando o fsv em seu sistema Linux! Clique aqui para saber mais.

1.2 Sintetizando…

O conceito de tudo ser arquivo é uma das premissas base de que o “UNIX É Simples”, um sistema projetado para ser simples, direto, sem complicações a nível de código de máquina, facilitando o trabalho de desenvolvedores e usuários até o final dos anos 90 com a chegada do Windows ao mercado.

O BSD e o Linux, tal qual diversos outros sistemas baseados em UNIX também herdam essa característica. Um arquivo na memória RAM? Pode procurar que há algo em /proc para achá-lo. Controlar o hardware diretamente via comandos? Com certeza você conseguirá isso com comandos diretos via /proc ou mesmo /sys e seus respectivos arquivos contidos neles.

A base fundamental de que tudo é arquivo agiliza em vários aspectos a manutenção do sistema, e o controle total do que acontece no mesmo.

2. Diretório /dev

Se explorarmos o diretório /dev, verão todos os arquivos correspondentes ás montagens de sistema com relação a outras mídias. É como se, você plugasse um celular no computador, um HD externo ou mesmo um pendrive e todos se tornassem “um arquivo” para o sistema operacional.

As partições de sistema são os arquivos começados com “sd” na pasta /dev.
Nessa mesma pasta, os TTY são o devices dos TeleTypewriter, o terminal shell que é acessado pelo comando “CTRL ALT F1” ou mesmo os virtuais via CTRL ALT T na interface gráfica de usuário. Já os blocos de montagem usados pelo sistema de mídias ópticas (DVD, CD e etc) também ficam nessa pasta, nos arquivos enumerados “loop”.

3. Pseudo-Dispositivos

A curiosidade maior deste post, fica por conta desses 4 pequenos arquivos na pasta /dev: full, zero, random e o null.

Você sabe diferenciar a função de cada um deles?
O que eles tem em comum está no fato de serem pseudo-dispositivos, ou “arquivos especiais”; e não meros “diretórios de controle”, tal qual a maioria dos demais arquivos.

3.1 Dispositivo Nulo: /dev/null

O dispositivo nulo (device null) é tipicamente utilizado para descartar o fluxo de saída de um processo cujo resultado não interessa por algum motivo. Também serve como um arquivo vazio de conveniência. Geralmente esta operação é realizada através de um comando de redirecionamento na console do sistema.

Qualquer arquivo enviado para o dispositivo “/dev/null” desaparecerá para sempre devido á maneira como opera, sumindo com os dados instantaneamente.

É como um grande buraco negro, uma lixeira que nunca enche.
De maneira poética os programadores fazem muitas piadas acerca do /dev/null devido a essa peculiaridade.

Tente o seguinte comando:

$ echo "Hello World"

Você verá “Hello World” como saída do comando.
Agora tente:

$ echo "Hello World" > /dev/null

Vai retornar saída vazia. Ou seja, nada vai acontecer.

Porque a saída de comando “Hello world” foi parar em Nárnia.
Foi engolido por um Buraco Negro.
Foi visitar Coragem o Cão Covarde em Lugar Nenhum!
Ou qualquer outro lugar maluco que sua imaginação permitir.

/dev/null para os sistemas baseados em UNIX funciona como um buraco negro: O que é enviado para lá não volta!

Deixando as piadas de lado, basicamente, e de forma simples, a saída de comando do processo não foi armazenado no disco, foi um descarte direto da memória de cache do CPU e da RAM, como se nunca tivesse sido gerado.

3.2 Dispositivo Cheio: /dev/full

Em Linux, o dispositivo sempre cheio é um arquivo especial que sempre retorna o mesmo código de erro ao ser acessado para escrita: ENOSPC – o que quer dizer “Não há espaço disponível no dispositivo”. Além disso, possui outra função: Por estar sempre cheio, provê um número que tende a infinito de caracteres nulos (NULL) a qualquer processo que o acesse como leitura.

Este dispositivo é comumente utilizado para testar o comportamento de um programa ao encontrar um erro devido a um disco de memória cheio!

Tente o seguinte comando:

$ echo "Hello world" > /dev/full

Dará este erro de dispositivo cheio, imitando um HDD lotado!
bash: echo: write error: No space left on device

3.3 Dispositivo Zero: /dev/zero

Em sistemas operacionais do tipo Unix, /dev/zero é um arquivo especial que fornece quantos caracteres nulos forem lidos dele – o NULL da tabela ASCII, 0x00; e não o caractere “dígito zero”, “0”, cujo valor é 0x30 – .  O fluxo de caracteres nulos gerado por este dispositivo pode, por exemplo, ser utilizado para sobrescrever informações num disco (para limpa-lo) ou para gerar um arquivo limpo de tamanho X ao infinito.
O sistema BSD usa-o implementando memória compartilhada através da função mmap, que mapeia o /dev/zero para a RAM.

Cria um grande arquivo vazio chamado de ‘teste’:

$ dd if=/dev/zero of=/home/$USER/teste count=1000 bs=1000

Se você não impor um limite ao comando, ficando como “dd if=/dev/zero of=/home/$USER/teste”, verá surgir um arquivo que vai engordar tendendo ao infinito; ele só para de crescer quando a unidade de disco estiver lotada, resultado em erro de “sem espaço disponível em disco”.

Esse comando é interessante quando se quer recuperar um pendrive que está com a tabela de partição corrompida e está irrecuperável. O comando dd força a escrita e o /dev/zero vai preencher cada bloco do armazenamento, com zeros. Ele ficará em estado de recém-fabricado, necessitando que depois você use um programa como o Disks ou Gparted para reconstruir sua tabela de partição!

Cuidado com este comando, se a saída for of=/dev/sda1, você vai zerar todo seu disco sda1 (preenche-lo com zeros) tornando os arquivos irrecuperáveis.

3.4 Dispositivo Aleatório: /dev/random

Funciona usando a mesma lógica do /dev/zero, porém preenchendo um disco ou criando um arquivo de tamanho n com valores aleatórios, gerados a partir do processamento do computador, da coleta de caracteres de informações da GPU, da memória RAM e etc; também é comumente gerado pelo pool de entropia.

O /dev/random deve ser apropriado para usos que necessitam alta qualidade dos números aleatórios como one-time pad ou geração de chaves públicas para SSH e outras redes de compartilhamento.

4. Curiosidade Rápida!

O que acontece se mandamos o nada para lugar algum?

Ou seja, se mandamos o conteúdo de /dev/zero para /dev/null?

$ sudo dd if=/dev/zero of=/dev/null

Esse comando vai gerar um arquivo especial que tende ao infinito, de tamanho infinito, que será gravado no dispositivo de espaço infinito – Nosso buraco negro! Na prática, não causa danos aos discos do hardware pois nenhum dado é de fato gerado e gravado em disco.

Porém sob a ótica do kernel, há uma transferência de dados ali: ele vai gerar alto consumo de CPU, que vai selecionar um dos núcleos para gerar tal processamento ocupando 100% de uso. Esse tipo de comando é usado para testes de desempenho, por exemplo, para verificar como o computador se comporta com a CPU em 100% de uso; e ajuda a verificar se o sistema está ou não superaquecendo, por exemplo.

5. Conclusão

Nesta postagem vocês conheceram mais detalhes sobre como os sistemas baseados em UNIX reconhecem dispositivos e como tudo é “arquivo”. Também conheceram detalhes sobre os dispositivos especiais.

No próximo post da série, falarei sobre algumas utilidades interessantes para esses dispositivos, por exemplo, criando uma partição a partir de um arquivo, dentre outras curiosidades que não pretendo comentar para não dar spoiler!

#UrbanCompassPony

2 comentários em “Tudo é Arquivo: Parte 1”

  1. certainly like your web site but you need to test the spelling on several of your
    posts. Many of them are rife with spelling issues and I in finding it very
    bothersome to tell the truth nevertheless I’ll definitely come back
    again.

    Responder

Deixe um comentário