Por que o sistema UNIX precisa de tantas unidades [0-byte] em / dev / * [duplicado]?

6

Por isso, recentemente perguntei a esta questão , que me levam a executar este comando:

$ du -sk /dev/*

Que gera cerca de 353 entradas diferentes que se parecem com isso:

0   /dev/sdt
0   /dev/stderr
0   /dev/stdin
0   /dev/stdout
0   /dev/systrace
0   /dev/tty
0   /dev/tty.Bluetooth-Incoming-Port
0   /dev/tty.Bluetooth-Modem
0   /dev/ttyp0
0   /dev/ttyp1

Alguém pode, por favor, elaborar sobre o que são esses diretórios? E por que eles são todos zero bytes?

    
por Ichigo Kurosaki 28.12.2014 / 18:45

1 resposta

16

Eles são nós de dispositivos :

In Unix-like operating systems, a device file or special file is an interface for a device driver that appears in a file system as if it were an ordinary file. [...] They allow software to interact with a device driver using standard input/output system calls, which simplifies many tasks and unifies user-space I/O mechanisms.

Em outras palavras, eles não são arquivos normais, embora possam ser organizados em diretórios comuns. Historicamente, esses eram nós reais criados no disco que continham um monte de informações para o kernel. Em sistemas Linux contemporâneos, isso foi substituído por um sistema de arquivos especial na memória, devtmpfs , bem como /proc é um procfs na memória e /sys um sysfs na memória. É por isso que eles são listados como tendo 0 bytes - eles são interfaces diretas com o kernel.

Quanto ao que todos eles são, há uma seção sobre "Convenções de Nomenclatura" nesse artigo da wikipedia, embora isso não seja vinculativo ou universal (eles podem ser renomeados do userspace, que por exemplo, instalações udev derivadas de RedHat / Fedora farão ). Você pode obter mais algumas pistas do número maior / menor, mostrado em duas colunas à esquerda da data com ls -l (onde "tamanho" seria). Esses números correspondem a entradas em /sys/dev/block ou /sys/dev/char .

Lembre-se de que a maioria desses dispositivos é virtual e pode ter pouco ou nada a ver com qualquer parte específica do hardware. Por exemplo, tty devices são os terminais virtuais que você pode navegar com ctrl-alt-F [N]; pt devices (existe um diretório para eles) são pseudo-terminais usados em emuladores GUI. Existem várias outras coisas mais esotéricas, como segmentos de memória compartilhada (em shm - estes têm tamanhos reais). Novamente, o propósito é apenas permitir uma interface padronizada para o kernel; o conceito de "dispositivo" é muito solto.

    
por 28.12.2014 / 19:49

Tags