2. Tudo é um Arquivo

No Guia do Usuário introduzimos os conceitos de permissão de acesso e posse dos arquivos, mas agora que entendemos o sistema de arquivo do UNIX® (e também os sistemas de arquivo do Linux) precisamos redefinir o conceito sobre “o que é um arquivo”.

Aqui, “tudorealmente significa tudo. Um disco rígido, uma partição no disco, uma porta paralela, uma conexão a um web site, uma placa de rede: todos estes são arquivos. Até mesmo diretórios são arquivos. O Linux reconhece vários tipos de arquivos além dos diretórios e arquivos padrões. Perceba que tipo de arquivo aqui não significa o conteúdo de um arquivo: para o GNU/Linux e qualquer sistema UNIX®, um arquivo, quer ele seja uma imagem PNG, um arquivo binário ou qualquer outra coisa, é apenas um fluxo de bytes. Diferenciar os arquivos de acordo com o seu conteúdo é papel das aplicações.

2.1. Os Diferentes Tipos de Arquivo

Quando você executa ls -l, o primeiro caractere identifica o tipo do arquivo. Nós já vimos dois tipos de arquivos: arquivos regulares (-) e diretórios (d). Você também pode achar outros tipos se você navegar pela árvore de arquivo e listar conteúdo de seus diretórios:

  1. Arquivos de caractere: eles são arquivos especiais do sistema (como o /dev/null, que nós já discutimos anteriormente), ou periféricos (portas seriais ou paralelas), que possuem em comum o fato de que os seus conteúdos (se é que possuem algum) não são armazenados na memória. Estes arquivos são identificados pela letra c.

  2. Arquivos de Bloco: estes arquivos são periféricos, e ao contrário dos arquivos de caractere, estes possuem os seus conteúdos armazenados em memória. Por exemplo, alguns arquivos desta categoria são: discos rígidos, partições de discos, drives de disquete, drives de CD-ROM e outros dispositivos de armazenamento. Arquivos como /dev/hda e /dev/sda5 são exemplos de arquivos de bloco. Estes arquivos são identificados pela letra b.

  3. Links simbólicos: estes arquivos são muito comuns e bastante utilizados no procedimento de inicialização do Mandriva Linux (veja Capítulo 11, Os Arquivos de Inicialização: init sysv). Como o nome já diz, o propósito destes arquivos é de referenciar outros arquivos de uma maneira simbólica, o que significa que eles são arquivos cujos conteúdos são caminhos para arquivos diferentes. Eles também podem estar apontando para um arquivo que não existe. Eles são frequentemente chamados de soft links, e são identificados pela letra l.

  4. Named pipes: em caso de você estar se perguntando, sim, estes são muito similares ao pipe utilizado nos comandos shell, mas com a diferença de que estes possuem nomes. Entretanto eles são muito raros e talvez você não encontre um durante a sua viagem na árvore de arquivo. Estes arquivos são identificados pela letra p. Veja a Seção 4, “Pipes “Anônimos” e Pipes Nomeados”.

  5. Sockets: este é o tipo de arquivo para todas as conexões de rede, mas apenas algumas delas possuem nomes. What's more, há tipos diferentes de sockets e somente um pode ser referenciado, mas isto está além do escopo deste livro. estes arquivos são identificados pela letra s.

Aqui está um exemplo de cada arquivo:

$ ls -l /dev/null /dev/sda  /etc/rc.d/rc3.d/S20random /proc/554/maps \
/tmp/ssh-usuario1/ssh-510-agent
crw-rw-rw-    1 root     root       1,   3 May  5  1998 /dev/null
brw-rw----    1 root     disk       8,   0 May  5  1998 /dev/sda
lrwxrwxrwx    1 root     root           16 Dec  9 19:12 /etc/rc.d/rc3.d/
  S20random -> ../init.d/random*
pr--r--r--    1 usuario1  usuario1         0 Dec 10 20:23 /proc/554/maps|
srwx------    1 usuario1  usuario1         0 Dec 10 20:08 /tmp/ssh-usuario1/
  ssh-510-agent=
$

2.2. Inodes

Inodes são, de acordo com o paradigma de que “Tudo é um Arquivo”, uma parte fundamental de qualquer sistema de arquivo UNIX®. A palavra inode é uma abreviação para “Information NODE” (Nó de informação).

Inodes são armazenados em disco em uma tabela de inode. Eles existem para todos os tipos de arquivos que possam estar amazenados em um sistema de arquivo, incluindo diretórios, pipes nomeados, arquivos de caracteres e outros. O que nos leva a esta outra frase famosa: “O inode é o arquivo”. Inodes são como o UNIX® indentifica um arquivo dee uma maneira única.

Não, você não entendeu errado: no UNIX®, você não identifica um arquivo pelo seu nome, mas pelo seu número de inode[4]. A razão para isto é que o mesmo arquivo pode ter vários nomes, ou até mesmo nenhum. No UNIX®, um nome de arquivo é apenas uma entrada em um inode de diretório. Uma entrada desta é chamada de link. Vamos olhar os links para mais detalhes.



[4] Importante: note que os números de inode são únicos por sistema de arquivo, o que significa que um inode com o mesmo número pode existir em outro sistema de arquivo. Isto nos leva a diferença entre inodes em disco e inodes na memória. Enquanto dois inodes em disco podem ter o mesmo número se eles estiverem em sistemas de arquivo diferentes, inodes em memória possuem um número único em todo o sistema. Uma solução para obter exclusividade, por exemplo, é associar o número do inode em disco com o identificador do dispositivo de bloco.