2

有没有办法找出程序从文件中读取的位置?似乎可以使用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 

编辑:我很抱歉,我给出的例子太狭窄了,没有抓住重点。理想情况下,对于任意程序,我想查看文件读取的位置(无论管道如何)。

4

3 回答 3

2

而不是 cat :

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
于 2013-03-27T21:08:35.687 回答
2

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

文件和偏移信息在 Linux/proc/<PID>/fd/proc/<PID>/fdinfo.

于 2016-06-20T10:03:32.533 回答
1

如果该示例确实是您的用例,那么我建议您使用pipe viewer来自 pv 网站的示例图片

于 2013-03-27T21:27:25.543 回答