그러면 파일 시스템(여전히 열려 있음)에서 삭제된 파일이 차지하는 공간 목록이 제공됩니다.
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
(여기서는 킬로바이트 단위)