Linux /dev目录文件详解

概述

dev是设备(device)的英文缩写。这个目录中包含了所有Linux系统中使用的外部设备。
但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。
它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
Linux沿袭Unix的风格,将所有设备认成是一个文件。

类型

设备文件分为两种:块设备文件(b)和字符设备文件(c).
块设备是指按照数据块来处理数据的设备,例如一个硬盘或者 CD-ROM 盘。 字符设备是指按照字节流来处理数据的设备。 比如说终端机或者调制解调器.

/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱 /dev/md[0-31]:软raid设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:”空”设备
/dev/zero:”零”设备
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台 /dev/pty: 伪终端
/dev/pts: 虚拟终端
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc 光盘设备 /dev/modem => /dev/ttyS[0-9] 调制解调设备
/dev/random:随机数设备
/dev/urandom:随机数设备

/dev目录下的节点是怎么创建的?

devf或者udev会自动帮你创建得。 kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的。

/dev/hd[a-t]

hd *设备是访问MFM / IDE硬盘驱动器的块设备 在原始模式下。主IDE控制器上的主驱动器(主要设备编号3)是hda;从驱动器是hdb。主驱动第二个控制器(主要设备号为22)是hdc,而从属控制器是hdd。

/dev/sd[a-z]

块设备名称的格式如下:sdlp,其中l是一个字母代表物理驱动器,而p是代表该物理驱动器上的分区。通常,分区号p当设备与整个驱动器相对应时,将被保留。

/dev/fd[0-7]

软盘驱动器是具有主要编号2的块设备。通常,它们由root:floppy拥有(即,用户root,组软盘)并具有模式0660(通过组成员身份进行访问检查)或模式0666 (每个人都可以访问)。
次编号编码设备类型,驱动器号和控制器号。对于每种设备类型(即,密度和磁道数的组合)有一个基本的次要数字。在此基本编号上,在其控制器上添加驱动器的编号,然后添加128如果驱动器在辅助控制器上。在以下设备中表中,n代表驱动器号。

/dev/md[0-31]

md驱动程序提供从一个或多个虚拟设备创建的虚拟设备。 更独立的基础设备。这类设备经常包含冗余,并且设备通常是磁盘驱动器,因此缩写RAID,代表独立磁盘冗余阵列。

/dev/loop[0-7]

The loop device is a block device that maps its data blocks not to a physical device such as a hard disk or optical disk drive, but to the blocks of a regular file in a filesystem or to another block device. This can be useful for example to provide a block device for a filesystem image stored in a file, so that it can be mounted with the mount(8) command. You could do

$ dd if=/dev/zero of=file.img bs=1MiB count=10
$ sudo losetup /dev/loop4 file.img
$ sudo mkfs -t ext4 /dev/loop4
$ sudo mkdir /myloopdev
$ sudo mount /dev/loop4 /myloopdev

/dev/ram[0-15]

ram设备是用于以raw(原始)模式访问ram磁盘的块设备。
一般这样创建

mknod -m 660 /dev/ram b 1 1
chown root:disk /dev/ram

/dev/null

“空”设备,也有人称它为黑洞。任何输入到这个“设备”的数据都将被直接丢弃。最常用的用法是把不需要的输出重定向到这个文件。
$ run.sh 1>/dev/null 2>&1 #将标准输出和错误输出重定向到/dev/null,运行这个脚本不会输出任何信息到终端

/dev/zero

“零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件。
$ dd if=/dev/zero of=./output.txt bs=1024 count=1 #产生一个1k大小的文件output.txt

/dev/tty[0-63]

tty一词源于Teletypes,原来指的是电传打字机,是通过串行线的用打印机键盘阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。

/dev/ttyS[0-3]

串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。

/dev/lp[0-3]

lp [0–2]是并行行打印机的字符设备;他们主号码为6,副号码为0–2。次要数字对应于打印机端口的基本地址0x03bc,0x0378和0x0278。
通常,它们的模式为220,并属于root用户和lp用户组。您可以将打印机端口用于轮询(polling)或用于中断(Interrupts)。 当流量大时建议中断,例如用于激光打印机。
对于典型的点矩阵打印机,轮询通常就足够了。默认设置为轮询。

/dev/console

在Linux 系统中,计算机显示器通常被称为控制台终端 (Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2 等。当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1–tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上(这时也叫控制台终端)。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。/dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上。目前只有在单用户模式下,才允许用户登录控制台。

/dev/pty

伪终端。我们远程telnet到主机或使用xterm时不也需要一个终端交互吗?是的,这就是虚拟终端pty(pseudo-tty)。

/dev/pts

虚拟终端。pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty.

/dev/fb[0-31]:framebuffer

FrameBuffer不是一个图形系统,更不是窗口系统。它比X-Server要低级,简单来说FrameBuffer就是一种机制的实现。
这种机制是把屏幕上的每个点映射成一段线性内存空间,程序可以简单的改变这段内存的值来改变屏幕上某一点的颜色。
X的高度可移植性就是来自于这种机制,不管是在那种图形环境下,只要有这种机制的实现就可以运行X。所以在几乎所有的平台上都有相应的X版本的移植。

/dev/cdrom => /dev/hdc

光盘驱动器

/dev/modem => /dev/ttyS[0-9]

Modem是一种通过电话线路传送数字信息的设备。我们知道,电话系统原本只为传送语音信息而设计,Modem技术突破了这一局限,它能够调制(modulate)数字信息,把数字信息转换成可以通过电话线路发送的模拟信号。在接收端,模拟信号重新被转换成数字信号(即解调,demodulate)。Modem这个词就是从modulator-demodulator缩写得到。

/dev/random /dev/urandom

随机数设备,提供不间断的随机字节流。
二者的区别是/dev/random产生随机数据依赖系统中断,当系统中断不足时,/dev/random设备会“挂起”,因而产生数据速度较慢,但随机性好;/dev/urandom不依赖系统中断,数据产生速度快,但随机性较低。

引用

https://billie66.github.io/TLCL/book/index.html
https://man7.org/linux/man-pages/man4/


© 2021. All rights reserved.

本站总访问量 Web Analytics

Powered by Hydejack v9.1.2 & Moded by ZYA