linux是文件型体系,全部硬件如软件都会在关于的目录下面有相应的文件表明。关于dev这个目录,咱们知道它下面的文件,表明的是linux的设备。在windows体系中,设备咱们很好了解,象硬盘,磁盘指的是实实在在硬件。而在文件体系的linux下面,都有关于文件与这些设备相关的。拜访它们就能够放到实践硬件,想想仍是linux灵活了。变成文件,操作该多简略了。不必调用曾经com,prt等接口了。直接读文件,写文件就能够向设备发送读或许写操作了。 依照读写存储数据办法,咱们能够把设备分为以下几种:字符型设备,块设备,伪设备。
一、设备分类
字符型设备
字符设备是指每次与体系传输1个字符的设备。这些设备节点一般为传真、虚拟终端和串口调制解调器、键盘之类设备供给流转信服务,它一般不支撑随机存取数据。 字符设备在完成时,大多不运用缓存器。体系直接从设备读取/写入每一个字符。例如,键盘这种设备供给的便是一个数据流,当你敲入“cnblogs”这个字符串时,键盘驱动程序会依照和输入完全相同的次序回来这个由七个字符组成的数据流。它们是次序的,先回来c,终究是s。
块设备
块设备是指与体系间用块的办法移动数据的设备。这些设备节点一般代表可寻址设备,如硬盘、CD-ROM和内存区域。
块设备一般支撑随机存取和寻址,并运用缓存器。操作体系为输入输出分配了缓存以存储一块数据。当程序向设备发送了读取或许写入数据的恳求时,体系把数据中的每一个字符存储在恰当的缓存中。当缓存被填满时,会采纳恰当的操作(把数据传走),然后体系清空缓存。它与字符设备不同之处便是,是否支撑随机存储。字符型是流方式,逐个存储。
伪设备
在类Unix操作体系中,设备节点并不必定要对应物理设备。没有这种对应联系的设备是伪设备。操作体系运用了它们供给的多种功用。部份常常运用到的伪设备包含: null,zero,full,loop,random,urandom
二、特别设备及运用
这儿提到特别设备除了硬盘主板等,仅仅它在linux shell指令里边,有特别的效果,因而把它们独自拿出来。这些设备分别是:
/dev/stdin
/dev/stdout
/dev/stderr
/dev/null
/dev/zero
/dev/full
/dev/random,urandom
/dev/fd
/dev/tcp|upd
/dev/loop
1、规范输出输入设备
还记住前次说的,linux重定向吗?能够看下:linux shell数据重定向(输入重定向与输出重定向)具体分析 。它们便是与几个特别文件描述符对应,fd0,fd1,fd2 (stdin,stdout,stderr)
如:
1
2
3
4
5
6
7
8
9
10
11
[chengmo@centos5 shell]$ cat>teststdin
test
#ctrl+D
#cat从/dev/stdin取得数据,然后将规范输出,输入的到teststdin文件
[chengmo@centos5 shell]$ cat teststdin
test
[chengmo@centos5 shell]$ cat>teststdin
test
#ctrl+D
#不指定输入,默许输入设备便是/dev/stdinn
/dev/stdin指的便是键盘设备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[chengmo@centos5 shell]$ cat test.sh >/dev/stdout |grep 'echo'
echo “very good!”;
echo “good!”;
echo “pass!”;
echo “no pass!”
#/dev/stdout指向便是规范输出,因而重定向给它的数据,终究发送到屏幕上(fd1)
[chengmo@centos5 shell]$ cat test.sh |grep 'echo'
echo “very good!”;
echo “good!”;
echo “pass!”;
echo “no pass!”;
[chengmo@centos5 shell]$ cat test.sh >/dev/stderr |grep 'echo'
#!/bin/sh
scores=40;
if [[ $scores -gt 90 ]]; then
echo “very good!”;
elif [[ $scores -gt 80 ]]; then
echo “good!”;
elif [[ $scores -gt 60 ]]; then
echo “pass!”;
else
echo “no pass!”;
fi;
#/dev/stderr 指是过错输出,默许也是输出到屏幕上面,可是它的内容不能经过管道传递给grep,管道只能传递规范输出
/dev/null设备
是个黑洞设备,它丢掉全部写入其间数据,空设备一般被用于丢掉不需要的输出流。记住当年用windows时分,有个类似的设备:NUL ,跟这个功用相同。任何写入该设备数据都会被丢掉掉。从这个里边读取数据回来是空。将一些不必内容常常发送给这个设备,丢掉不需要的数据。
如:
1
2
3
4
[chengmo@centos5 shell]$ cat /dev/null
[chengmo@centos5 shell]$ cat test.sh >/dev/null
#读该设备为空,写入该设备数据都丢掉了
/dev/zero设备
在类UNIX 操作体系中, /dev/zero 是一个特别的文件,当你读它的时分,它会供给无限的空字符(NULL, ASCII NUL, 0×00)。其间的一个典型用法是用它供给的字符流来掩盖信息,另一个常见用法是发生一个特定巨细的空白文件。
如:
1
2
3
4
5
6
7
8
9
10
11
12
[chengmo@centos5 shell]$ dd if=/dev/zero of=testzero count=1024 bs=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0107194 seconds, 97.8 MB/s
#创立一个巨细为1M文件,该文件一个块是1024字节,一共是1024块(刚好1M),用/dev/zero文件内容填充它。输出创立到:testzero文件
[chengmo@centos5 shell]$dd if=/dev/zero of=/dev/磁盘分区
#这个指令必定不要随意用,有点象windows里边的破坏文件东西。不过它是用x00填充整个分区。这样做数据是不能够康复的了。
[chengmo@centos5 shell]$cat /dev/zero>testinputzero
#这个指令也不能随意运用咯,/dev/zero设备一个特效是,假如你读取的话,是一个死循环会输出无量的\x00,这样你将创立一个用\x00填充的文件。假如你没有约束该用户磁盘配额。它将耗尽整个磁盘空间。
在linux资源配额约束里边,假如没有现在普通用户的磁盘空间运用,或内存运用。一个普通用户就能够经过上面办法一会就塞满整个磁盘。也能够经过while(true) {fork……}类程序,发动无限线程,耗尽整个体系内存。
/dev/full设备
类Unix体系中,/dev/full(常满设备)是一个特别设备文件,总是在向其写入时回来设备无剩下空间(过错码为ENOSPC),读取时则与/dev/zero类似,回来无限的空字符(NULL, ASCII NUL, 0×00)。这个设备一般被用来测验程序在遇到磁盘无剩下空间过错时的行为。
如:
1
2
3
4
5
[chengmo@centos5 shell]$ echo 'chengmo' >/dev/full
-bash: echo: write error: 设备上没有空间
[chengmo@centos5 shell]$ echo $?
1
#指令履行回来过错
/dev/random[urandom]
在类UNIX操作体系中,/dev/random是一个特别的设备文件,能够用作随机数发生器或伪随机数发生器。它答应程序拜访来自设备驱动程序或其它来历的背景噪声。常用作随机数发生器。具体参阅:linux shell完成随机数多种办法(date,random,uuid)
/dev/fd
记载用户翻开的文件描述符
[chengmo@centos5 shell]$ ls /dev/fd/
0 1 2 3
具体参阅:
linux shell数据重定向(输入重定向与输出重定向)具体分析 文件描述符介绍。
/dev/tcp[udp]/host/port
读取该类方式设备,将会创立一个衔接host主机port端口的tcp[upd]衔接。翻开一个socket通讯接口。
具体运用能够参阅:
linux shell 脚本完成tcp/upd协议通讯(重定向运用)
/dev/loop
在类UNIX操作体系中,Loop设备 能够把loop 文件,作为块设备挂载运用。
如:
[chengmo@centos5 shell]$mount -o loop example.img /home/chengmo/img
#将img镜像文件挂载到/home/chengmo/img目录下面,有了这个设备,咱们不需要经过虚拟光驱就能够读虚拟磁盘格式的文件。
说了许多linux 特别设备,其它象cpu,内存,磁盘,网络,键盘,终端设备。跟咱们windows里边常见差不多。有什么问题,欢迎沟通!