インデックス24のファイル記述子の総数を印刷する方法

インデックス24のファイル記述子の総数を印刷する方法

Linuxで実行されているすべてのプロセスに対してインデックス24を使用してファイル記述子の総数を印刷するにはどうすればよいですか?

頑張った

$ ls /proc/*/fd 2> errors.txt > stdout.txt | grep "^24" stdout.txt | wc -l

このソリューションは毎回ゼロを返します。

私は私の課題を解決するために1行のコードを書く必要があると述べました。

答え1

使用できる

find /proc/[0-9]*/fd/ -name 24 2> /dev/null | wc -l

または使用に固執する場合ls(これはいくつかの例安全な場合はこれを実行してください):

ls /proc/[0-9]*/fd 2>/dev/null | grep -c '^24$'

出力をファイル(> output.txt)にリダイレクトするため、最初の試行は失敗します。つまり、grep一致する出力がないため、一致しません。|上記のようにパイプ()を使用したり、;コマンド&を区別して使用したりできます。

ls /proc/[0-9]*/fd 2> errors.txt > stdout.txt; grep "^24" stdout.txt | wc -l

答え2

ls電話をしたり、ここに来ても役に立ちませんfind。これはシェルがグローバルを拡張して行うことです。

のみ:

set -- /proc/[0-9]*/fd/24 && echo "$#"

Except をzsh受け取ると、1それが 1 つあるかどうか、パターンの不一致があるためかどうかはわかりません。

それでbashあなたはできます

shopt -s nullglob
fds=(/proc/[0-9]*/fd/24)
echo "${#fds[@]}"

別の移植性のあるオプションは、次のものを使用することですlsof

lsof -td24 | wc -l

関連情報