我试图了解原因wc并stat报告不同的事情/proc/[pid]/cmdline。
wc说我的 shellcmdline文件大小为 6 个字节:
$ wc --bytes /proc/$$/cmdline
6 /proc/10425/cmdline
Run Code Online (Sandbox Code Playgroud)
stat表示文件大小为 0 字节:
$ stat --format='%s' /proc/$$/cmdline
0
Run Code Online (Sandbox Code Playgroud)
file同意stat:
$ file /proc/$$/cmdline
/proc/10425/cmdline: empty
Run Code Online (Sandbox Code Playgroud)
cat给出这个输出:
$ cat -vE /proc/$$/cmdline
-bash^@
Run Code Online (Sandbox Code Playgroud)
所有这些都在 Linux 上进行,而不是在任何其他 *nix 操作系统上进行。
stat和程序是否wc有不同的算法来计算文件中的字节数?
ilk*_*chu 11
下面的文件/proc不是常规文件,而是由内核动态创建的虚拟文件。对于大多数(全部?)来说,系统不会事先计算大小,但读取它的程序只会获取要获取的任何数据。
wc你所做的和stat例如所做的之间的区别ls在于,在这里wc打开文件,读取它并计算它得到的内容,同时stat使用ls系统stat()调用向系统询问文件的元数据,包括大小(而且还获得例如所有者和权限)。对于虚拟文件,这些不会给出相同的结果。
如果运行 eg ls -l /proc/$$/,您将看到许多大小为 0 的文件,尽管其中大多数文件都可以读取数据。
设备节点/dev/sda类似,尽管在它们的情况下ls甚至不显示大小,而是显示设备编号。
特别是file,您可以file -s要求它只读取数据而不关心它是否是特殊文件。