Linux下的/dev目录

前言

在Linux下,/dev目录是很重要的,很多设备都在这个目录下

dev是设备(device)的英文缩写,/dev这个目录对于所有用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放这些外部设备的驱动程序,这一点和Windows不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便的去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

dev下的设备文件

设备文件分为两种:块设备文件(b)字符设备文件(c)

设备文件一般存放在/dev目录下,对与常见设备文件作如下说明:
  /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/fb[0-31]:framebuffer

  /dev/cdrom => /dev/hdc

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

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

  /dev/random:随机数设备

  /dev/urandom:随机数设备

一些设备文件的详解

/dev/null和/dev/zero

在类Unix系统中,包括linux

  • /dev/null 他是空设备,也称为位桶(bit bucket)或者黑洞(black hole)。你可以向它输入任何数据,但任何写入它的数据都会被抛弃。通常用于处理不需要的输出流。当然,也可以作为空的输入流。

  • /dev/zero 该设备无穷尽地提供空字符(ASCII NULL,0x00),可以使用任何你需要的数目。它通常用于向设备或文件写入字符串0,用于初始化数据存储。当然,也可以作为输出流的接受容器。

两个使用实例如下:

1
dd if=/dev/zero of=~/test.txt bs=1k count=1

产生1KB大小的文件~/text.txt

1
find / -name access_log 2>/dev/null

find命令在/目录下查找名为access_log的文件,并且错误输出不会显示出来(文件描述符2被重定向到/dev/null)。

/dev/tty和/dev/pty

  • tty(终端设备的统称)

    tty一词源于Teletpes,或者teletpewriters,原来指的是电传打字机,一种与通信通道配对的机电打印机,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备

  • pty(伪终端,虚拟终端):

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

  • pts/ptmx(这两个结合使用,进而实现pty)

    pts是pty的实现方法,与ptmx配合使用实现pty

在Linux系统的设备特殊文件目录/dev下,终端特殊设备一般有以下几种:

  • 串行端口终端(/dev/ttySn)

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

  • 伪终端(/dev/pty/)

    伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。
    例如/dev/ptyp3和/dev/ttyp3(或者在设备文件系统中分别是/dev/pty /m3和 /dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把ptyp3(master设备)看作是一个串行端口设备,则它对该端口的读/ 写操作会反映在该逻辑终端设备对应的另一个ttyp3(slave设备)上面。而ttyp3则是另一个程序用于读写操作的逻辑设备。telnet主机A就是通过“伪终端”与主机A的登录程序进行通信。

  • 控制终端(/dev/tty)

    如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps –ax”来查看进程与哪个控制终端相连。对于你登录的shell,/dev/tty就是你使用的终端,设备号是(5,0)。使用命令”tty”可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。

  • 控制台终端(/dev/ttyn, /dev/console)

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

  • 虚拟终端(/dev/pts/n)

    在Xwindows模式下的伪终端.如我在Kubuntu下用konsole,就是用的虚拟终端,用tty命令可看到/dev/pts/1。

  • 其它类型
    Linux系统中还针对很多不同的字符设备存在有很多其它种类的终端设备特殊文件。例如针对ISDN设备的/dev/ttyIn终端设备等。这里不再赘述。

    tty设备包括虚拟控制台,串口以及伪终端设备。
    /dev/tty代表当前tty设备,在当前的终端中输入 echo “hello” > /dev/tty ,都会直接显示在当前的终端中。