O que os arquivos do dispositivo em / dev realmente fazem?

31

(Não é uma duplicata do Entendimento / dev e seus subdiretórios e arquivos )

Eu estava navegando pelo meu sistema de arquivos e, pela primeira vez, levei um segundo para analisar meu /devdiretório. Fiquei surpreso com a quantidade de arquivos de dispositivos nele e não consegui entender todos eles:

max@linux-vwzy:/dev> ls
adsp             disk      fd0u1760  initctl  mem                 root  sg0       tty    tty21  tty35  tty49  tty62    vboxdrv     vcsa2
audio            dri       fd0u1840  input    mixer               rtc   sg1       tty0   tty22  tty36  tty5   tty63    vboxnetctl  vcsa3
autofs           dsp       fd0u1920  kmem     mixer1              rtc0  sg2       tty1   tty23  tty37  tty50  tty7     vboxusb     vcsa4
block            dvd       fd0u360   kmsg     net                 scd0  sg3       tty10  tty24  tty38  tty51  tty8     vcs         vcsa5
bootsplash       dvdrw     fd0u720   log      network_latency     sda   sg4       tty11  tty25  tty39  tty52  tty9     vcs1        vcsa6
bsg              fb0       fd0u800   loop0    network_throughput  sda1  sg5       tty12  tty26  tty4   tty53  ttyS0    vcs10       vcsa7
btrfs-control    fd        fd0u820   loop1    null                sda2  sg6       tty13  tty27  tty40  tty54  ttyS1    vcs2        vga_arbiter
bus              fd0       fd0u830   loop2    nvram               sda3  sg7       tty14  tty28  tty41  tty55  ttyS2    vcs3        xconsole
cdrom            fd0u1040  full      loop3    oldmem              sdb   shm       tty15  tty29  tty42  tty56  ttyS3    vcs4        zero
cdrw             fd0u1120  fuse      loop4    port                sdc   snapshot  tty16  tty3   tty43  tty57  ttyS4    vcs5
char             fd0u1440  fw0       loop5    ppp                 sdc1  snd       tty17  tty30  tty44  tty58  ttyS5    vcs6
console          fd0u1600  hidraw0   loop6    psaux               sdd   sr0       tty18  tty31  tty45  tty59  ttyS6    vcs7
core             fd0u1680  hidraw1   loop7    ptmx                sde   stderr    tty19  tty32  tty46  tty6   ttyS7    vcsa
cpu              fd0u1722  hidraw2   mapper   pts                 sdf   stdin     tty2   tty33  tty47  tty60  uinput   vcsa1
cpu_dma_latency  fd0u1743  hpet      mcelog   random              sdg   stdout    tty20  tty34  tty48  tty61  urandom  vcsa10

Eu sei que os sd*'s são os meus discos e sistemas de arquivos, mas o que são loopx, fd0uxxxx, sgx, vcsxxxe todos os outros arquivos individuais. A maioria deles são arquivos de dispositivo de acordo com ls.

Entendo que responder totalmente a essa pergunta exigiria uma tonelada de informações, portanto, a menos que alguém possa fornecer um link com um grande resumo dos diferentes arquivos de dispositivos deve para o que eles são usados, proponho que façamos uma resposta CW.

n0pe
fonte
Estou tentado a dizer: você não quer saber (não sobre tudo isso). Sugiro reescrever sua pergunta como: Quais são os dispositivos em /devque devo conhecer? (Talvez você tem respostas para todos eles de qualquer maneira, talvez não ...)
Stéphane Gimenez
1
Eu mudei o título, boa ligação. No entanto, se possível, eu adoraria saber o que todos eles fizeram ou ter uma maneira de descobrir (ler o arquivo do dispositivo? Se isso faz sentido).
n0pe
Eu não acho que seria útil listar os dispositivos um por um. Os futuros visitantes provavelmente terão uma lista um pouco diferente. Leia as documentações que indiquei na minha resposta e, se você ainda não conseguir descobrir algumas delas, faça uma pergunta específica.
Gilles 'SO- stop be evil'

Respostas:

48

Algumas delas possuem páginas de manual (na seção 4 ; omitem o (s) dígito (s) final (is) e, em alguns casos, como sdaa letra final).

Para uma resposta mais definitiva, mas geralmente menos fácil de ler, consulte a documentação do kernel . Primeiro, determine se o dispositivo é um dispositivo de bloco ou de caractere e seu número maior e menor. Por exemplo

$ ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda

o mesmo sdaocorre com um dispositivo de bloco ( b) com major: minor = 8: 0. Agora, procure devices.txt: 8 blocos são os dispositivos de disco SCSI, que são a maioria dos discos atualmente (a maioria dos discos IDE e SATA também são vistos pela interface SCSI, embora isso dependa das opções de compilação do kernel). O dispositivo de bloco 8: 1 ( /dev/sda1) é a primeira partição de /dev/sda.

Pode haver alguns dispositivos estranhos que não estão documentados. Você pode procurar no seu sistema, por exemplo /sys/dev/block/8:0: este é um link simbólico para um diretório /sysque fornece várias informações sobre o dispositivo. Você pode seguir mais links e, em particular (neste caso), /sys/dev/block/8:0/device/driverdireciona você para um diretório que corresponde ao driver. Outra fonte de informação é a /proc/devicesque indica qual driver reivindica cada número de dispositivo principal.

A maioria dos sistemas Linux usa o udev para preencher com /devbase nos drivers e hardware disponíveis. Você pode procurar as regras para criar arquivos de dispositivo, normalmente em /lib/udev/rules.de /etc/udev/rules.d(os locais exatos dependem da distribuição).

Alguns dos arquivos não são dispositivos. lsof /dev/NAME(como root) dirá a você para qual processo os está usando e, assim, lhe dará uma dica de para que servem. Para os diretórios, observe os arquivos neles.

Esta resposta é específica para Linux, mas outros departamentos seguem os mesmos princípios. Verifique as páginas do manual (na seção 4, na maioria das variantes, mas algumas usam a seção 7) ou outra documentação do sistema ou do kernel. A informação relevante é o bit de bloco / caractere e o principal: números menores.

Gilles 'SO- parar de ser mau'
fonte
Uau, incrível, você detalhou vários pontos de interesse que estou lendo atualmente. Obrigado por isso.
n0pe