最大のオープンファイルを見つける方法は?

最大のオープンファイルを見つける方法は?

プロセスで開かれたすべてのファイルの中で最大のファイルを見つけます。 lsofすでに開いているファイルとサイズがあります。正しいパラメータを渡してlsof出力を処理できます。

ベストアンサー1

洗練された方法は次のとおりです。

lsof \
| grep REG \
| grep -v "stat: No such file or directory" \
| grep -v DEL \
| awk '{if ($NF=="(deleted)") {x=3;y=1} else {x=2;y=0}; {print $(NF-x) "  " $(NF-y) } }'  \
| sort -n -u  \
| numfmt  --field=1 --to=iec

出力

...
....
129M  /var/log/maillog
166M  /var/log/nginx/access_log
172M  /var/log/metrics/kubernetes/kubelet.log
185M  /var/log/metrics/kubernetes/etcd.log
257M  /var/log/metrics/kubernetes/etcd.log.1
335M  /var/log/metrics/kubernetes/kubelet.log.1

私はそれが完璧ではないことを知っています。たとえば、ファイル名に「DEL」が含まれている場合、出力リストからファイルが消去されます。に記載されているオプションlsofもあります。-F他のプログラムの出力部分。使用する方が簡単かもしれません。

詳細

lsof次のように印刷します。

COMMAND      PID    TID           USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd        1                  root  cwd       DIR              253,0      4096        128 /
tuned       2975                  root    7u      REG              253,0      4096  805307770 /tmp/ffiKkVeXD (deleted)
python2    49888  49890           root  DEL       REG               0,18            196039884 /dev/shm/sem.NXPFow
systemd        1                  root  mem       REG              253,0     90664      10063 /usr/lib64/libz.so.1.2.7
java      149435 175229            box   69r      REG              253,0 350872273  808108999 /box/var/log/metrics/kubernetes/kubelet.log.1
java      149435 149580            box  107w     FIFO                0,8       0t0  272526226 pipe
prometheu 147867 148211           root  mem       REG              253,6             31457463 /lib64/ld-2.12.so (stat: No such file or directory)

grep REG一般ファイルのアーカイブ


grep -v "stat: No such file or directory"統計エラーのあるファイルを削除します。 (なぜこれが起こるのかわかりません)


grep -v DEL削除されたLinuxマッピングファイルを削除します。

lsofから文書:

「DEL」は削除されたLinuxマッピングファイルを表します。


この処理の後、次のような結果が得られる。

tuned       2975                  root    7u      REG              253,0      4096  805307770 /tmp/ffiKkVeXD (deleted)
systemd        1                  root  mem       REG              253,0     90664      10063 /usr/lib64/libz.so.1.2.7
java      149435 175229            box   69r      REG              253,0 350872273  808108999 /box/var/log/metrics/kubernetes/kubelet.log.1

サイズは、最後の列の値に応じて、下から3番目または2番目の列です。最後の列が(deleted)最後から3番目の列を選択した場合、それ以外の場合は2番目の列を選択します。

awk '{if ($NF=="(deleted)") {x=3;y=1} else {x=2;y=0}; {print $(NF-x) " " $(NF-y) } }'


sort -n -u | numfmt --field=1 --to=iec

バイト数を並べ替え、一意化、人が読めるように設定

おすすめ記事