特定のプログラム/コマンドで開かれたすべてのファイルをどのように計算/並べ替えることができますか? [コピー]

特定のプログラム/コマンドで開かれたすべてのファイルをどのように計算/並べ替えることができますか? [コピー]

以下のように、特定のPIDで開かれたファイルのみを一覧表示できます。

lsof -p 1000
lsof -p 1000 | wc -l

特定のプログラム/コマンド(例:java)で開かれたファイルをどのように一覧表示/計算できますか?

各プログラムで開いたファイルの数をグループ化できる場合は、より良いでしょう。どのプログラムで開かれたファイルの数が多いかを確認したいと思います。

私は次のようなものが欲しい

lsof -c "java" # -c is an imaginary argument similar to -p for process

Ubuntu 20.04を使用してください。

ベストアンサー1

私はlsofでこのようなものを実装することが議論の余地があるとは思わず、lsofバイナリでどのフラグを使用できるかわかりません。
ヘッダーを「grep java」に変更すると、欲しいものが得られるようです。

lsof | awk '{print $1}' | sort | uniq -c | sort -rn | head


ラソフ:デフォルトで開いているすべてのファイルを一覧表示します。
awk '{印刷$1}':プロセス名の最初の列のみを印刷します。
タイプ:uniqを適用する前にソートする必要があります。それ以外の場合は、数が分割されるため、lsofが印刷される順序に応じてJavaが複数回表示されることがあります。
ユニクロ-c:プロセス名と数行でグループ化します。
最後の2つは読みやすさのためのものです。

これの問題は、すべてのJavaインスタンスが一緒にグループ化されることです。同じロジックをPIDに適用してから、PIDに基づいてJavaインスタンスとサブプロセスをフィルタリングできるようです。

お役に立てば幸いです。

おすすめ記事