2

プログラムがファイルのどこから読み取っているのかを把握する方法はありますか? straceまたはdtraceで実行できるようです。

質問を明確にして動機を与えるために、10 GB のログ ファイルがあり、一意の行の数を数えているとします。

$ 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 に答える
1

この例が本当にあなたのユース ケースである場合は、パイプ ビューアーをお勧めします。 pvのウェブサイトからのサンプル画像

于 2013-03-27T21:27:25.543 に答える