これにより、ファイルシステム(まだ開いている)から削除されたファイルが占めるスペースのリストが表示されます。
find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'
ただし、パイプファイル名のファイル記述子はサイズ0を返します。
find /proc/*/fd -ls 2>/dev/null | grep '(deleted)' \
| sed 's!.*\(/proc[^ ]*\).*!\1!' | xargs ls -lhas
まだコンテンツがあるので、wc -c
サイズは以下を使用して提供されます。
find /proc/*/fd -ls 2>/dev/null | grep '(deleted)' \
| sed 's!.*\(/proc[^ ]*\).*!\1!' | xargs wc -c | sort -nr |head -n 20
例:
2809946696 total
2387677184 /proc/15050/fd/26
67108864 /proc/1626/fd/23
67108864 /proc/1059/fd/6
10485760 /proc/11417/fd/298
10485760 /proc/11417/fd/239
10485760 /proc/11417/fd/155
10485760 /proc/11366/fd/499
しかし、どのファイルが最も多くのスペースを占めるかを調べるためのより良い方法(ラベル付きwc -c
ファイル記述子よりも)はありますか?(deleted)
(それとも、削除されたファイルのハンドルを開いたままにして最もスペースを占めるプロセスは何ですか?)
ベストアンサー1
そしてzsh
、
ls -lLrS /proc/*/fd/*(-l0)
ファイルサイズで並べ替えて一覧表示します(wc -c
たとえば、ディスク使用量を除く)。
ディスク使用量の場合は、次のことができます。
zmodload zsh/stat
bydu() zstat -A REPLY +block -- $REPLY
ls -lLsU /proc/*/fd/*(-l0no+bydu)
(GNUがソート解除ls
用であると仮定-U
)
プロセス固有のディスク使用量の場合は、次のことができます。
typeset -aU proc=(/proc/*/fd/*(-l0.:h:h:t))
for p ($proc) {du -Hksc /proc/$p/fd/*(-.l0) | sed -n "\$s/total\$/$p/p"} | sort -n
(ここではキロバイト単位)