如何跟踪/监视 Linux 命令的 I/O

lov*_*ing 6 command-line disk debugging io

find / -name abc.html再次运行此命令后不久就跑了。这次它非常快,所以我知道find一定是在某处缓存了结果。

如何找出缓存的存储位置?

psu*_*usi 8

事实上,正如@zongfu 指出的那样,find它不会将其结果缓存在文件中,而是内核缓存find正在读取的目录,以便可以在不接触磁盘的情况下再次读取它们,这就是它更快的原因。如果您仍然想查看程序正在执行什么样的 IO,您可以使用strace. 该程序运行您指定的另一个程序并记录该程序进行的系统调用。没有任何参数,它会打印所有信息,这可能是很多信息,因此您希望将其限制为仅某些调用,例如,open()您可以查看程序将打开哪些文件。这看起来像:

strace -eopen someprogram
Run Code Online (Sandbox Code Playgroud)


zho*_*gfu 5

find不缓存任何东西,尤其是在磁盘上。第二次运行要快得多的原因是 Linux 将访问的数据(在本例中为目录列表)缓存在内存中(请参阅 参考资料free)。