/ dev / null文件实际上是否具有固定大小?


23

我刚刚发现这/dev/null是文件而不是目录。

我只是想知道它是否具有实际文件大小。

Answers:


35

/dev/null并不是真正的文件。这是一个角色设备

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

c权限字符串(crw-rw-rw-)的第一个字母表示这一点。对于常规文件,它将-改为一个。

简单地说:/dev/null不是文件,而是映射到文件系统中此路径的虚拟设备,其唯一目的是吞没和消失数据-就像黑洞一样。
不过,它也可以用作输入,然后它就像一个空文件(大小为0)并立即返回EOF(文件末尾)。

因此,您不能真正说它/dev/null具有特定的文件大小,因为它不是任何存储介质上的常规文件。


输入?它提供了无穷无尽的NUL字符列表吗?
乔纳森(Jonathon)

@JonathonWisnoski我不完全知道,我从来没有像这样使用过它,所以我可以给你这个指向StackOverflow上的问题的链接,在此进行解释。
字节指挥官

7
@JonathonWisnoski,否-它的行为就像输入的大小为零的文件,因此从它的第一次读取报告该文件位于EOF。
godlygeek

是的,没错。
godlygeek

3
@JonathonWisnoski为此查看/ dev / zero。
圣保罗Ebermann

16

/dev/null是一种称为“ 设备文件 ” 的特殊文件

设备文件充当某些内核功能的接口。它们仅占用目录条目(“ inode ”)所需的空间,但没有任何实际内容,也没有实际文件大小。

其他设备文件例如是/dev/sda(通常是HDD或SSD),/dev/zero(读取时生成零的文件)或/dev/random(读取时生成随机数据的文件)。实际上,其中的所有文件/dev/都是设备文件或指向设备文件的链接。


尽管我发现大多数答案是正确的(+1),但我认为说它们占据了索引节点条目的大小有点误导。如果指的是磁盘空间,它们要么不占用任何空间,要么,如果将其整个实现称为字符设备,则它们占用更多的空间。
kos

2
就像任何其他文件一样,设备文件也需要一个inode来存储所有者,权限,主要/次要编号和其他元数据。这取决于文件系统如何存储此inode以及将其存储在何处(可用于mknod在所需的任何位置创建设备文件)。对于虚拟文件系统,例如/dev/inode不会占用磁盘空间,而是会占用一些内存。
Florian Diesch 2015年

究竟。我想我表现得不好,所以让我改一下。也许我要指出的是有些挑剔,所以请原谅我。我的意思是,如果您声明每个字符设备由于其inode条目而在内存中占用了一定的空间,那么也许您想指出的是,在此类设备上读取/写入时要调用的函数以及它们一起加载,也是。
kos 2015年

说一个文件占用了其索引节点表项所占用的空间,这真的正确吗?我认为人们(以及人们编写的软件)通常不会在谈论文件大小时将其包含在内。特别是,询问lsdu报告字符特殊设备的大小,例如/dev/null或会/dev/random产生0
伊利亚·卡根

抱歉,但是我对此回答不满意,因为除非有人对我所说的(我可能是)证明我错了,否则我仍然认为陈述字符设备占用了inode条目的空间是不正确的。
kos 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.