삭제되었지만 아직 열려 있는 파일을 크기별로 정렬

삭제되었지만 아직 열려 있는 파일을 크기별로 정렬

그러면 파일 시스템(여전히 열려 있음)에서 삭제된 파일이 차지하는 공간 목록이 제공됩니다.

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

(여기서는 킬로바이트 단위)

관련 정보