/ dev中的设备文件实际上是做什么的?


31

(不是了解/ dev及其子目录和文件的副本)

我正在浏览文件系统,这是我第一次花时间分析/dev目录。我对其中的设备文件数量感到惊讶,无法理解所有这些文件:

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

我知道sd*的是我的磁盘和文件系统,但什么是loopxfd0uxxxxsgxvcsxxx和所有其他的单个文件。其中大多数是根据的设备文件ls

我知道完全回答这个问题将需要大量信息,因此,除非有人能够提供一个链接,其中包含大量不同设备文件dev及其全部用途的概要,否则我建议我们做出CW回答。


我很想说:您不想知道(不是所有这些)。我建议将您的问题改写为:/dev我应该了解哪些设备?(也许你会找到答案的所有的人,无论如何,也许不是...)
斯特凡希门尼斯

1
我已更改标题,打个招呼。但是,如果可能的话,我很想知道他们所做的一切,或者有一种找出答案的方式(读取设备文件?如果这样的话)。
n0pe

我认为一一列出这些设备不会有用。未来的访客列表可能会略有不同。阅读我在回答中指出的文档,如果您仍然找不到其中的一些,请提出一个具体的问题。
吉尔(Gilles)'所以

Answers:


48

其中一些手册页(在第4节中;省略了最后一位数字,在某些情况下,例如最后一位sda字母)。

有关更明确但通常较不易读的答案,请参阅内核文档。首先确定该设备是块设备还是字符设备,及其主要和次要编号。例如

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

具有main:minor = 8:0 sda的块设备(b)也是如此。现在在devices.txt:8个块中查找SCSI磁盘设备,这是当今大多数磁盘(大多数IDE和SATA磁盘也可以通过SCSI接口看到,尽管这取决于内核编译选项)。块设备8:1(/dev/sda1)是的第一个分区/dev/sda

可能有一些未记录的奇怪设备。您可以在例如的系统上查看/sys/dev/block/8:0:这是指向目录的符号链接,该目录下/sys提供有关设备的各种信息。您可以单击更多链接,尤其(在这种情况下)将/sys/dev/block/8:0/device/driver您带到与驱动程序相对应的目录中。另一个信息来源是/proc/devices,它指示哪个驱动程序要求每个主设备号。

大多数Linux系统使用udev/dev根据可用的驱动程序和硬件进行填充。您可以浏览规则以创建设备文件,通常在/lib/udev/rules.d和中/etc/udev/rules.d(确切位置取决于发行版)。

其中一些文件不是设备。lsof /dev/NAME(以root用户身份)将告诉您使用它们的进程是什么,从而提示您它们的用途。对于目录,请查看其中的文件。

这个答案是特定于Linux的,但是其他大学遵循相同的原则。检查手册页(在大多数变体的第4节中,而在少数使用第7节中),或其他系统或内核文档。相关信息是块/字符位和主要:次要数字。


太神奇了,您已经详细介绍了我目前正在阅读的几个兴趣点。谢谢你
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.