web-dev-qa-db-ja.com

各ユーザーの開いているファイルの数を数えますか?

ユーザーごとに開いているファイルの数を降順に並べ替えるコマンドを探しています。

例えば ​​lsof -u postgres | wc -はpostgresユーザーに対してのみそれらをリストしますが、どのユーザーでハンドラーを失う可能性があるかを確認したいと思います。

注:ユーザー名ではなくPIDに当てはまる質問もありますが、それでも1つのライナーを探しています。

1
sorin

あなたがパイプにオープンであるならば、これはどうですか:

lsof | Perl -pe's/\ s\s +// g '|カット-d '' -f3 | grep -v ^ USER |並べ替え| uniq -c | sort -rn

これをMacOS10.10.2(Yosemite)、OEL 6.6、Ubuntu10.04.01でテストしました。

1
Warren Lavallee

Warren Lavalleeのスクリプトを実行しましたが、解釈が難しいことがわかりました。

代わりに、元のスクリプトを拡張して、すべてのユーザーをステップスルーし、次のようにしました。-

for f in $(sed</etc/passwd 's/:.*$//g'); do ( echo -n $f ' '; lsof -u $f 2>/dev/null | wc -l ); done | grep -v ' 0$'

これはUbuntu14.04で正常に機能します。多くのユーザーがアクティブなプロセスを持たないため、最後のgrepはゼロエントリを削除します。コマンドの最後に| sort -rnk 2を追加して、ファイル数の降順で並べ替えることもできます。

すべてのユーザーからのファイルを表示できるようにするには、ルートシェルにいる必要があります。

1
AFH