有没有办法找出程序正在读取的文件中的位置?似乎可能适用于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
编辑:我道歉,我给出的例子太狭隘了,错过了重点。理想情况下,对于任意程序,我希望看到文件读取的位置(无论管道是什么)。
答案 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 viewer。
答案 2 :(得分:1)
您可以使用progress
command执行所需操作。它显示了coreutils工具(如cat
或其他程序在读取文件时的进度。
Linux中的文件和偏移量信息位于/proc/<PID>/fd
和/proc/<PID>/fdinfo
。