Ordenar arquivos apagados (mas ainda abertos) por tamanho

3

Isto lhe dá uma lista de arquivos deletados em seu sistema de arquivos ocupando espaço (como ainda aberto):

find /proc/*/fd -ls 2>/dev/null | grep '(deleted)'

No entanto, os nomes de arquivo dos descritores de arquivos retornam o tamanho 0:

find /proc/*/fd -ls 2>/dev/null | grep '(deleted)' \
    | sed 's!.*\(/proc[^ ]*\).*!!' | xargs ls -lhas

Como eles ainda têm conteúdo, usar wc -c fornece o tamanho:

find /proc/*/fd -ls 2>/dev/null | grep '(deleted)' \ 
     | sed 's!.*\(/proc[^ ]*\).*!!' | xargs wc -c | sort -nr |head -n 20

Exemplo:

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

No entanto, existe uma maneira melhor (que wc -c dos descritores de arquivos marcados como (deleted) ) para descobrir quais arquivos ocupam mais espaço? (ou melhor ainda, qual processo ocupa mais espaço do que manter alças abertas para arquivos excluídos?)

    
por Grzegorz Wierzowiecki 17.12.2017 / 16:32

1 resposta

1

com zsh ,

ls -lLrS /proc/*/fd/*(-l0)

listaria os pedidos por tamanho de arquivo (como wc -c , portanto, não uso de disco).

Para uso do disco, você pode fazer:

zmodload zsh/stat
bydu() zstat -A REPLY +block -- $REPLY
ls -lLsU /proc/*/fd/*(-l0no+bydu)

(assumindo o GNU ls para o seu -U para não classificar)

Para um uso de disco por processo, você pode fazer:

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

(aqui no kibibytes)

    
por 17.12.2017 / 16:57