/dev/zero
é um exemplo de um "arquivo especial" - particularmente, um "nó do dispositivo". Normalmente, eles são criados pelo processo de instalação da distribuição, mas você pode criá-los totalmente, se quiser.
Se você perguntar ls
sobre /dev/zero
:
# ls -l /dev/zero
crw-rw-rw- 1 root root 1, 5 Nov 5 09:34 /dev/zero
O "c" no início informa que esse é um "dispositivo de caractere"; o outro tipo é "dispositivo de bloco" (impresso ls
como "b"). Muito grosso modo, dispositivos de acesso aleatório, como discos rígidos, tendem a ser dispositivos de bloco, enquanto coisas seqüenciais, como unidades de fita ou placa de som, tendem a ser dispositivos de caracteres.
A parte "1, 5" é o "número principal do dispositivo" e o "número menor do dispositivo".
Com essas informações, podemos usar o mknod
comando para criar nosso próprio nó de dispositivo:
# mknod foobar c 1 5
Isso cria um novo arquivo chamado foobar
, na pasta atual, que faz exatamente a mesma coisa que /dev/zero
. (É claro que você pode definir permissões diferentes, se quiser.) Todo esse "arquivo" realmente contém os três itens acima - tipo de dispositivo, número principal, número menor. Você pode usar ls
para procurar os códigos de outros dispositivos e recriá-los também. Quando você se cansar, use rm
para remover os nós do dispositivo que você acabou de criar.
Basicamente, o número principal informa ao kernel do Linux com qual driver de dispositivo conversar e o número menor informa ao driver de dispositivo de que dispositivo você está falando. (Por exemplo, você provavelmente tem um controlador SATA, mas talvez vários discos rígidos estejam conectados a ele.)
Se você deseja inventar novos dispositivos que fazem algo novo ... bem, precisará editar o código-fonte do kernel do Linux e compilar seu próprio kernel personalizado. Então não vamos fazer isso! :-) Mas você pode adicionar arquivos de dispositivos que duplicam os que você já possui. Um sistema automatizado como o udev está basicamente apenas observando eventos do dispositivo e chamando mknod
/ rm
para você automaticamente. Nada mais mágico que isso.
Ainda existem outros tipos de arquivos especiais:
O Linux considera um diretório um tipo especial de arquivo. (Normalmente, você não pode abrir um diretório diretamente, mas, se pudesse, descobriria que é um arquivo normal que contém dados em um formato especial e informa ao kernel onde encontrar todos os arquivos nesse diretório.)
Um link simbólico é um arquivo especial. (Mas um link físico não é.) Você pode criar links simbólicos usando o ln -s
comando (Procure a página de manual para isso.)
Há também uma coisa chamada "pipe nomeado" ou "FIFO" (fila de entrada e saída). Você pode criar um com mkfifo
. Um FIFO é um arquivo mágico que pode ser aberto por dois programas ao mesmo tempo - uma leitura e uma escrita. Quando isso acontece, funciona como um tubo de concha normal. Mas você pode iniciar cada programa separadamente ...
Um arquivo que não é "especial" de forma alguma é chamado de "arquivo regular". Você ocasionalmente verá menção disso na documentação do Unix. É isso que significa; um arquivo que não é um nó de dispositivo ou um link simbólico ou qualquer outra coisa. Apenas um arquivo normal todos os dias sem propriedades mágicas.