削除されたがまだ開いているファイルをサイズで並べ替える

削除されたがまだ開いているファイルをサイズで並べ替える

これにより、ファイルシステム(まだ開いている)から削除されたファイルが占めるスペースのリストが表示されます。

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

(ここではキロバイト単位)

おすすめ記事