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

有没有办法找出程序读取文件的位置? strace或dtrace似乎可能是可行的?

为了澄清问题并提供动力,例如我有一个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 

编辑:我很抱歉,我给出的例子太狭隘,错过了一点。 理想情况下,对于一个任意的程序,我想看看在哪里读取文件(不pipepipe道)。

你可以用progress 命令做你想做的事情。 它显示了读取文件时coreutils工具(如cat或其他程序)的进度。

文件和偏移量信息在/proc/<PID>/fd/proc/<PID>/fdinfo中的Linux中可用。

而不是猫:

 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 

如果这个例子真的是你的用例,那么我会推荐管道查看器 。 来自PV网站的示例图像