A resposta curta é que isso ocorre somente se você tiver um sistema de arquivos físico /dev
(e se você estiver usando uma distribuição Linux moderna, provavelmente não).
A resposta longa é a seguinte:
Tudo isso remonta à filosofia original do UNIX de que tudo é um arquivo. Essa filosofia faz parte do que tornou o UNIX tão versátil, porque você pode interagir diretamente com os dispositivos do espaço do usuário sem precisar ter um código especial em seu aplicativo para conversar diretamente com o hardware físico.
Originalmente, /dev
era apenas outro diretório com um nome conhecido onde você colocava os arquivos do dispositivo. Alguns sistemas UNIX ainda adotam essa abordagem (acredito que o OpenBSD ainda o faça), e você geralmente pode dizer se um sistema é assim, porque ele possui muitos arquivos de dispositivos para dispositivos que o sistema não possui (por exemplo, arquivos para todos os sistemas). partição possível em todos os discos possíveis). Isso economiza espaço na memória e tempo de inicialização, com o custo de usar um pouco mais de espaço em disco, o que foi uma boa opção para os sistemas antigos, porque eles geralmente eram muito limitados à memória e não muito rápidos. Isso geralmente é referido como tendo uma estática /dev
.
Nos sistemas Linux modernos (e eu acredito também no FreeBSD e, possivelmente, nas versões recentes do Solaris), /dev
existe um sistema de arquivos temporário na memória preenchido pelo kernel (ou udev, se você usa o Systemd, porque eles não confiam no kernel para fazer quase qualquer coisa) . Isso economiza espaço em disco ao preço de alguma memória (geralmente menos de alguns MB) e uma sobrecarga de processamento muito pequena. Ele também tem várias outras vantagens, sendo uma das maiores a facilidade de detectar o hardware conectado a quente. Isso geralmente é chamado de dinâmico /dev
.
Nos dois casos, porém, os nós dos dispositivos são acessados através da camada VFS comum, o que, por definição, significa que eles precisam ter um inode (mesmo que seja virtual, existindo apenas para que coisas como stat()
funcionem como deveria). De uma perspectiva prática, isso tem impacto nulo nos sistemas que usam uma dinâmica, /dev
porque eles armazenam os inodes na memória ou os geram conforme necessário, e quase nula quando /dev
estático, porque os inodes ocupam quase zero espaço no disco e a maioria dos sistemas de arquivos não tem limite superior. eles ou provisionam muito mais do que qualquer um provavelmente precisará.