为什么 /proc/stat 的大小显示为零?

为什么 /proc/stat 的大小显示为零?
ls -rlth /proc/stat
-r--r--r-- 1 root root 0 Feb 21 04:25 /proc/stat

虽然如果我们cat这样做,它的内容就足够了。

答案1

那是因为它是一个虚拟文件,没有预定义的已知大小,实际大小,即返回的数据量将根据您读取它的时间而变化。

某些/proc文件可能具有非空大小,因为它是预先知道的。

   /proc/kcore
          This  file  represents the physical memory of the system and is stored in the ELF core file for-
          mat.  With this pseudo-file, and an unstripped kernel (/usr/src/linux/vmlinux) binary,  GDB  can
          be used to examine the current state of any kernel data structures.

          The total length of the file is the size of physical memory (RAM) plus 4KB.

然而,考虑到我的机器上没有 128 TB RAM,报告的值和可能读取的大小与文档不匹配:

$ ls -lh /proc/kcore
-r--------. 1 root root 128T Feb 23 16:10 /proc/kcore

答案2

proc 是一个虚拟文件系统,将文件名映射到内部 linux 结构/变量;所以 /proc/stat 有 0 字节是正常的。

来自维基百科:进程文件系统

proc 文件系统 (procfs) 是类 Unix 操作系统中的一种特殊文件系统,它以类似分层文件的结构呈现有关进程的信息和其他系统信息,为动态访问内核中保存的进程数据提供了一种比传统的跟踪方法或直接访问内核内存。通常,它在启动时映射到名为 /proc 的安装点。 proc 文件系统充当内核中内部数据结构的接口。它可用于获取有关系统的信息并在运行时更改某些内核参数(sysctl)。

来自 TLDPLinux 文件系统层次结构:/proc

该目录中的文件最显着的特点是,除了 kcore、mtrr 和 self 之外,所有文件的文件大小均为 0。

注意:实际上,在我的服务器中,只有 mtrr 和 self 的大小为 0 - kcore 是您能够寻址的内存,即内核虚拟内存地址,因此为 128TB。与此讨论相关的还有/proc/kcore未在 MIPS 和 ARM 架构中实现的问题。

答案3

/proc是一种特殊的文件系统。它不是您存储文件的东西。它是一个虚拟文件系统,我知道这不是正确的类比,但可以将其视为目录中的设备驱动程序/dev。您写入文件的内容/dev会以某种方式传递到系统。同样,当您读取文件时,它会从系统中提取这些值。因此,由于这些文件中没有实际存储的信息,因此大小显示为零。

相关内容