linux dev 常见特殊设备介绍与应用(loop,null,zero,full,random)

2019-09-23 09:23:13王旭

/dev/stdin指的就是键盘设备

[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 ,跟这个功能一样。任何写入该设备数据都会被丢弃掉。从这个里面读取数据返回是空。将一些不用内容经常发送给这个设备,丢弃不需要的数据。

如:

[chengmo@centos5 shell]$ cat /dev/null
[chengmo@centos5 shell]$ cat test.sh >/dev/null
#读该设备为空,写入该设备数据都丢弃了

/dev/zero设备

在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。

如:

[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……}类程序,启动无限线程,耗尽整个系统内存。