我们都知道Linux下一切皆文件,主要有:
- - 普通文件
- d 目录
- l 符号链接
- s 套接字
- b 块设备
- c 字符设备
- p 管道
这么几种文件。
这里的前缀字符可以通过ls命令观察到:
- $ ls -l test.log
- -rw-r--r-- 1 root root 33 Nov 17 17:03 test.log
它的结果最前面是-,因此它是普通文件。
- $ ls -al /dev/null
- crw-rw-rw- 1 root root 1, 3 Sep 11 20:33 /dev/null
它的结果最前面是c,因此它是字符设备。文件简单介绍几种字符设备文件,它能在我们功能测试的时候提供很好的帮助。
/dev/null
/dev/null 可无限接收数据,你可以认为是一个黑洞,因此如果我们需要丢弃某些终端输出,可以重定向到这里:
- $ echo "shouwangxiansheng" > /dev/null
所以如果你有不需要的数据可以尽情的往这里写。
/dev/full
它在读取时会读取到连续的NUL(零值)字节流,而在写入的时候,会返回磁盘空间已满的结果,后者在测试你的程序的时候会有帮助,即测试磁盘满的场景:
- $ echo "bianchengzhuji" > /dev/full
- -bash: echo: write error: No space left on device
/dev/zero
和/dev/null类似,向其中写入时会丢弃所有数据,但是读取时,会产生NUL(零值)字节流。
- $ cat /dev/zero |od -x
- 0000000 0000 0000 0000 0000 0000 0000 0000 0000
/dev/random
/dev/random可以提供随机数据流,它保证数据的随机性,但是读取时会造成等待,例如:
- $ cat /dev/random | od -x
- 0000000 2b07 daac 42f4 e1fd fb62 2098 870e e0af
- 0000020 3022 2099 e5da 4e1c d6db 548b a979 1217
- 0000040 3777 bb6a 957d 1279 ab29 e8a4 6a36 ecca
- 0000060 39ec 2285 126c 30ea ea67 1526 5e4a 2dd9
稍过会才会出现数据,为了便于查看,我们利用od命令查看其十六进制内容。
/dev/urandom
从名字就可以看出来,是用来产生随机数据的。它的产生速度很快,但是数据的随机性不如/dev/random
- cat /dev/urandom | od -x
- 0547560 f43e 696a 8936 2b27 36c8 4446 2802 1d47
- 0547600 b8af 249d aae9 edbf 8971 b1d1 0c73 3e2d
- 0547620 237b 9a81 6348 cb2a 1972 4486 028a 3573
- 0547640 1690 c388 64e1 aec1 d5f4 1964 bbb9 192f
- 0547660 f242 7194 51ba 62a3 fc13 ff53 fb50 e3d8
- 0547700 ef32 3658 b335 75ee 62de 4096 6468 c979
- 0547720 01b9 c233 878d 12fc 5cfa 5691 89e1 e1f9
/dev/pts
/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。有什么用呢?举个例子,你打开一个终端,获取到当前的pts:
- $ tty
- /dev/pts/0
然后你又打开一个,输入:
- $ echo "hahahaha">/dev/pts/0
你就会发现内容被打印到前面一个终端了。通常我们运行一个程序,其printf的打印都会打印在当前终端。
总结
实际上在/dev下还有非常多的特殊文件,但是不一一介绍。以上特殊文件在一定场合下能帮助我们开发或者测试。