Quase todos os arquivos em /devsão arquivos de dispositivo . Enquanto a leitura e gravação em um arquivo normal armazena dados em um disco ou outro sistema de arquivos, o acesso a um arquivo de dispositivo se comunica com um driver no kernel, que geralmente se comunica com um pedaço de hardware (um dispositivo de hardware, daí o nome).
Existem dois tipos de arquivos de dispositivo: dispositivos de bloco (indicados por bcomo o primeiro caractere na saída de ls -l) e dispositivos de caracteres (indicados por c). A distinção entre dispositivos de blocos e caracteres não é completamente universal. Dispositivos de bloco são coisas como discos, que se comportam como arquivos grandes de tamanho fixo: se você escreve um byte em um determinado deslocamento e depois lê o dispositivo nesse deslocamento, recebe esse byte de volta. Os dispositivos de caracteres são praticamente qualquer outra coisa, onde escrever um byte tem algum efeito imediato (por exemplo, é emitido em uma linha serial) e a leitura de um byte também tem algum efeito imediato (por exemplo, é lido a partir da porta serial).
O significado de um arquivo de dispositivo é determinado pelo número, não pelo nome (o nome é importante para os aplicativos, mas não para o kernel). O número é na verdade dois números: o número principal indica qual driver é responsável por este dispositivo, e o número menor permite que um driver conduza vários dispositivos¹. Esses números aparecem na ls -llista, onde você normalmente encontra o tamanho do arquivo. Por exemplo, brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda→ este dispositivo é maior 8, menor 0.
Alguns arquivos de dispositivo em /devnão correspondem a dispositivos de hardware. Um que existe em todo sistema unix é /dev/null; gravar nele não tem efeito e a leitura dele nunca retorna nenhum dado. Geralmente é conveniente em scripts de shell, quando você deseja ignorar a saída de um comando ( >/dev/null) ou executar um comando sem entrada ( </dev/null). Outros exemplos comuns são /dev/zero(que retorna bytes nulos ad infinitum ) /dev/urandom(que retorna bytes aleatórios ad infinitum ).
Alguns arquivos de dispositivo têm um significado que depende do processo que o acessa. Por exemplo, /dev/stdindesigna a entrada padrão do processo atual; abrir from tem aproximadamente o mesmo efeito que abrir o arquivo original que foi aberto como entrada padrão do processo. De maneira semelhante, /dev/ttydesigna o terminal ao qual o processo está conectado. Atualmente, no Linux, os /dev/stdinamigos e os amigos não são implementados como dispositivos de caracteres, mas como links simbólicos para um mecanismo mais geral que permite que todos os descritores de arquivos sejam referenciados (em oposição a apenas 0, 1 e 2 no método tradicional); por exemplo, /dev/stdiné um link simbólico para /proc/self/fd/0. Veja Como o / dev / fd se relaciona com / proc / self / fd /? .
Você encontrará vários links simbólicos em /dev. Isso pode ocorrer por razões históricas: um arquivo de dispositivo foi movido de um nome para outro, mas alguns aplicativos ainda usam o nome antigo. Por exemplo, /dev/scd0é um link simbólico /dev/sr0no Linux; ambos designam o primeiro dispositivo de CD. Outra razão para links simbólicos é a organização: no Linux, você encontrará seus discos rígidos e partições em vários lugares: /dev/sdae /dev/sda1e amigos (cada disco designada por uma letra arbitrária, e partições de acordo com o layout da partição), /dev/disk/by-id/*(discos designado por um número de série único), /dev/disk/by-label/*(partições com um sistema de arquivos, designado por uma etiqueta escolhida pelo homem); e mais. Links simbólicos também são usados quando um nome genérico de dispositivo pode ser um de vários; por exemplo/dev/dvdpode ser um link simbólico para /dev/sr0, ou pode ser um link para /dev/sr1se você tiver dois leitores de CD e o segundo for o leitor de DVD padrão.
Por fim, existem alguns outros arquivos nos quais você pode encontrar /dev, por motivos tradicionais. Você não encontrará o mesmo em todos os sistemas. Na maioria das unidades, /dev/logé um soquete usado pelos programas para emitir mensagens de log. /dev/MAKEDEVé um script que cria entradas no /dev. Nos sistemas Linux modernos, as entradas /dev/são criadas automaticamente pelo udev , obsoletas MAKEDEV.
Actually Na verdade, isso não é mais verdade no Linux, mas esse detalhe é importante apenas para os gravadores de driver de dispositivo.