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