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, “tudo” realmente 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.
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:
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
.
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
.
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
.
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”.
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= $
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.