通过文件跟踪程序的进度读取?

时间:2013-03-27 21:05:22

标签: linux

有没有办法找出程序正在读取的文件中的位置?似乎可能适用于stracedtrace

要澄清问题并给出动力,请说我有一个10GB的日志文件,并计算了唯一行的数量:

$ cat log.txt | sort | uniq | wc -l

我可以查看文件cat当前所在的位置,有效地提供命令的进度吗?使用lsof,我似乎无法获得上一次文件读取的偏移量,我认为这样可以解决问题:

$ lsof log.txt
COMMAND   PID USER   FD   TYPE DEVICE    SIZE/OFF       NODE NAME
cat     16021 erik    3r   REG   0,22 13416118210 1078133219 

编辑:我道歉,我给出的例子太狭隘了,错过了重点。理想情况下,对于任意程序,我希望看到文件读取的位置(无论管道是什么)。

3 个答案:

答案 0 :(得分:2)

而不是猫:

pv log.txt | sort | uniq | wc -l

用pv管道:

SIZE=$( ls -l log.txt | awk '{print $5}'); cat log.txt | sort | pv -s $SIZE | uniq | wc -l

答案 1 :(得分:1)

如果该示例确实是您的用例,那么我建议pipe viewerexample image from pv's website

答案 2 :(得分:1)

您可以使用progress command执行所需操作。它显示了coreutils工具(如cat或其他程序在读取文件时的进度。

Linux中的文件和偏移量信息位于/proc/<PID>/fd/proc/<PID>/fdinfo