Linux之字符设备文件

news/2024/11/20 13:36:13/

我们都知道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的打印都会打印在当前终端。


http://www.ppmy.cn/news/803596.html

相关文章

vue+大文件上传控件

总结一下大文件分片上传和断点续传的问题。因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况。http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件切片(…

Vue axios 实现文件下载

一、.net core 下载接口示例 using System; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using System.Collections.Generic; using System.IO; using System.Data; using AutoMapper; using Microsoft.AspNetCore.Mvc; using Microsof…

linux 默认的标准错误文件,Linux标准输入、输出和错误和文件重定向 专题

当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。 下面就是这些文件描述符及它们通常所对应的文件名: 文件文件描述…

weblogic获取classes下配置文件路径

网上的办法都不靠谱,没说到点上。 在发布war包时,weblogic会自动把classes下面的文件编译成一个_wl_cls_gen.jar 文件,放在WEB-INF/lib下面。 这时,我们不能使用先获取文件路径,再通过new File(filePath)的方式获取文件…

大文件上传及NIO

IO流 编码 UTF-8 编码与 GBK 和 GB2312 不同,不用查码表,所以在编码效率上 UTF-8 的效率会更好,所以在存储中文字符时 UTF-8 编码比较理想Java 的内存编码就是采用 UTF-16 编码。但是它不适合在网络之间传输,因为网络传输容易损坏…

mysql .xb文件恢复

系统版本centos7.8mysql5.7 首先需要安装mysql 由于CentOS7 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。 wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 然后进行repo的安装 rpm -ivh mysql57-community-release…

配置 default Jenkinsfile 文件

问题: 公司有很多代码工程(几十个),如果将Jenkinsfile文件放置在每个代码工程里面,维护量很大,且当脚本发生必要的变更后,所有的工程代码中的这个文件都要重新修改。 为了解决这个问题,我编写了一个通用的Jenkinsfile脚本。将该文件设置为全局默认的脚本文件。 设置方…

什么是docker –rm选项

在Docker上,-- --rm选项表示退出容器时会自动将其删除。 $ docker run --rm <container_id> 完成🙂 请继续阅读以了解有关--rm更多信息。 1.取出一个容器 在Dock