큰 파일 / 디렉토리를 찾아서 공간을 확보하는 명령 줄 방법은 무엇입니까?


202

드라이브에서 가장 큰 파일을 보여주는 일련의 명령을 찾고 있습니다.


그래픽이 좋을까요?
RolandiXor

5
아니, ssh를 통해 명령 줄에서 실행됩니다.
Ryan Detzel

이상한 점은 동일한 것을 실행하는 두 대의 서버가 있다는 것입니다. 하나는 디스크 사용량이 50 %이고 다른 하나는 99 %입니다. 이 원인을 찾을 수 없습니다.
Ryan Detzel

그래서 혼란스러워, du와 함께 사용 된 98 %라고하지만 gt5 앱을 실행하면 grab.by/9Vv2
Ryan Detzel

답변:


275

큰 파일 만 찾으면 옵션 find과 함께 사용할 수 있습니다 -size. 다음 명령은 10MiB보다 큰 모든 파일을 나열합니다 ( 10MB와 혼동하지 마십시오 ).

find / -size +10M -ls

특정 크기 사이의 파일을 찾으려면 "크기보다 작음"검색과 결합 할 수 있습니다. 다음 명령은 10MiB와 12MiB 사이의 파일을 찾습니다.

find / -size +10M -size -12M -ls

apt-cache search 'disk usage'디스크 사용량 분석에 사용할 수있는 일부 프로그램을 나열합니다. 매우 유망한 것으로 보이는 하나의 응용 프로그램입니다 gt5.

패키지 설명에서 :

몇 년이 지났고 디스크가 점점 더 커졌지 만,이 엄청나게 큰 하드 디스크 시대에도 공간은 시간이 지남에 따라 사라지는 것 같습니다. 이 작고 효과적인 프로그램은 기본 du (1)보다 편리한 목록을 제공합니다. 마지막 실행 이후 발생한 상황을 표시하고 dir 크기 및 총 백분율을 표시합니다. 텍스트 기반 브라우저 (링크, elink, lynx 등)와 함께 커서 키를 사용하여 디렉토리를 탐색하고 승격 할 수 있습니다.

gt5의 스크린 샷

의 "관련 패키지"섹션에 GT5 , 내가 발견 ncdu. 패키지 설명에서 :

Ncdu는 ncurses 기반 du 뷰어입니다. 유명한 du 유틸리티를 통해 빠르고 사용하기 쉬운 인터페이스를 제공합니다. 디렉토리를 탐색하고 ncurses 라이브러리를 사용하여 디스크 사용량의 백분율을 표시 할 수 있습니다.

ncdu의 스크린 샷


3
ncdu는 매우 빠르고 매우 필요한 것입니다. 감사합니다! 나는 gt5도 시험해 보았지만 피드백없이 너무 오래 "생각"했기 때문에 취소했다
Lukas

7
신성 쓰레기, ncdu는 훌륭합니다. 결과를 공유해 주셔서 감사합니다!
While-E

ncdu 가 더 강력하게 지적 되면 좋을 것 입니다. 나는 때때로 그것을 필요로하고 이름을 기억할 수 없다.
Martin Thoma

ncdu 덕분에 명령을 충분히 기억할 수 있습니다 :)
Mr Coder

1
@matt Nope, 출력의 출력 형식 -ls은 하드 코드됩니다 (소스 코드 pred_flslist_file 함수 참조). -printf옵션을 사용하여 출력을 근사 하거나 awk로 출력을 후 처리하거나 다음과 같은 것을 사용할 수 있습니다.find ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

나는 단지 du와 의 조합을 사용합니다 sort.

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

그런 다음 헹구고 반복하십시오 . 너무 큰 것으로 생각되는 서브 디렉토리를 대상으로 지정하고 명령을 실행하여 문제점의 원인을 찾으십시오.

참고 : 나는 하나의 파일 시스템으로 제한하기 위해 du-x플래그를 사용합니다 (SSD와 RAID5 사이에 교차 마운트 된 것들을 상당히 복잡하게 배열했습니다).

참고 2 : 2>/dev/null오류 메시지를 망각으로 리디렉션합니다. 그들이 당신을 귀찮게하지 않으면, 그것은 의무가 아닙니다.


1
이 명령을 실행하면 du가 하위 디렉토리로 내려갑니다. 로부터 du매뉴얼 페이지 "재귀 적 디렉토리에 각 파일의 디스크 사용량을 요약합니다."
Jamie

26

내가 가장 좋아하는 솔루션은 이러한 좋은 답변 중 몇 가지를 혼합하여 사용합니다.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du 인수 :

  • -a"모든"파일 및 디렉토리. 디렉토리 만 남겨 두십시오.
  • -BM 메가 바이트 (M) 블록 크기 (B)로 크기를 출력
  • 2>/dev/null - "권한이 거부되었습니다"오류 메시지 제외 (@Oli 덕분에)

sort 인수 :

  • -n "숫자"
  • -r "반전"(가장 큰 것부터 작은 것까지)

head 인수 :

  • -n 50 상위 50 개 결과에 대해서만
  • more더 작은 숫자를 사용하는 경우 떠나십시오

참고 : 접두어는 sudo계정에 액세스 권한이없는 디렉토리를 포함합니다.

/ var에서 상위 10 개의 가장 큰 파일 및 디렉토리를 표시하는 예 (총계 포함).

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache

10

qbi의 대답은 정확하지만 각 파일에 대해 새로운 프로세스를 시작하기 때문에 많은 파일이있을 때 속도가 느려집니다.

자식 프로세스를 생성하지 않고 find를 사용하는 훨씬 빠른 버전은 printf를 사용하여 크기를 바이트 (% s)와 경로 (% p)로 인쇄하는 것입니다

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries


1
이것이 더 빠른지 확인하십시오
Cookie

10

현재 폴더에서 가장 큰 최상위 20 개 디렉토리를 (재귀 적으로) 표시하려면 다음 한 줄짜리를 사용하십시오.

du -ah . | sort -rh | head -20

또는 (보다 유닉스 지향) :

du -a . | sort -rn | head -20

현재 디렉토리에서 상위 20 개 파일의 경우 (재귀 적으로) :

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

또는 사람이 읽을 수있는 크기로 :

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

그주의 사항 -hGNU 사용할 수 있습니다 sort그래서 당신은에서를 설치했습니다, 제대로 OSX / BSD에서 작동하도록 만 coreutils. 그런 다음 폴더를에 추가하십시오 PATH.

따라서 이러한 별칭은 rc 파일에 필요할 때마다 (필요할 때마다) 유용합니다 .

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

8

이것은 다음에 대한 완벽한 응용 프로그램처럼 보입니다 find.

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

이 명령은 디렉토리에서 모든 파일을 찾아서 $DIRECTORY실행 ls -s합니다. 마지막 명령은 파일의 할당 된 크기와 파일 이름을 인쇄합니다. 결과는 숫자로 정렬되고 마지막 5 개의 항목이 표시됩니다. 결과적으로 가장 큰 5 개 파일 $DIRETORY또는 하위 디렉토리가 표시됩니다. 입력 tail -n 1하면 가장 큰 파일 만 표시됩니다.

또한 당신은로 많이 놀 수 있습니다 find. 예를 들어 n 일 미만 ( -ctime -n)이거나 특수 사용자 ( -user johndoe)에 속하는 파일을 찾을 수 있습니다 .


5

서버에서 여유 공간을 더 확보해야 할 때이 명령을 사용합니다. 50MB보다 큰 모든 파일을 찾은 다음 "du -h"는 파일 크기를 기준으로 파이프 정렬 목록을 숫자 순으로 정렬 한 후 더 나은 파일 목록을 만들고 "sort -n"을 찾습니다.

find / -size +50M -type f -exec du -h {} \; | sort -n

1

Baobab을 사용해보십시오. 파일과 폴더에 대한 그래픽 개요를 제공합니다. 실제 공간 호그의 위치를 ​​확인하고 한 번의 클릭으로 삭제할 수 있습니다 https://help.ubuntu.com/community/Baobab


2
이 특정 질문에서 OP는 명령 줄 방법을 선호합니다. 질문에 대한 의견을 참조하십시오. 질문도 편집하겠습니다.

1

예를 들어 모든 GB 파일을 찾으려면 du와 grep을 사용하지만 여기에 언급 된 다른 방법도 훌륭하게 보입니다.

du -h -a /dir | grep "[0-9]G\b"  

du에있는 --except 옵션을 사용하여 멋지게 만들 수도 있습니다.


0

크기별로 파일을 정렬 할 수도 있습니다.

find . -type f -exec du -h {} \; | sort -k1 -h

파일 만 찾고 du -h모든 파일에 대해 실행 되며 파일 크기를 보여줍니다. 마지막으로, 첫 번째 열 (인간이 읽을 수있는 형식)에 따라 find/ 의 출력을 정렬합니다 du.

마지막으로 인쇄 된 파일이 가장 큰 파일입니다.


0

명령을 사용하여 디렉토리를 건너 뛰면서 가장 큰 파일을 볼 수 있습니다.

sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10

100MiB보다 큰 모든 파일을 찾으려면 100MB가 아닙니다 . 혼란 스러우면 여기를 참조 하십시오 .

find / -size +100M -ls

아래 명령은 폴더에서 가장 큰 5 개의 파일을 표시합니다 $DIRECTORY.

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

사용 du: 뒤를 사용하는 아래의 명령을 홈 작업 폴더에있는 20 개 가장 큰 크기의 디렉토리를 표시합니다

sudo du -a /home | sort -n -r | head -n 20

이제 하위 폴더를 포함하여 가장 큰 디렉토리 / 파일을 표시하려면 다음을 실행하십시오.

du -Sh | sort -rh | head -n 10

사용 ls:

/ bin 디렉토리에서 가장 큰 5 개의 파일을 나열하려면 아래 명령을 실행하십시오.

ls -lSh /bin | head -5

예를 들어 여기 에 표시된대로 디스크 사용량 분석기 또는 Baobao 를 사용할 수도 있습니다 .


0

비슷한 질문 에 대한 답변에서 참조되는 훌륭하고 사용자 친화적 인 도구 는 NCurses Disk Usage도구입니다.

sudo ncdu /

글쎄, 파일 시스템의 루트에서 시작하는 것은 나에게 무의미한 반대였습니다. 전체 파일 시스템에서 공간을 절약하기 위해 가장 중요한 대상을 식별 할 수있었습니다. 어쨌든 언급 된 내용을 사용하여 모든 디렉토리에서 시작할 수 있습니다. 해당 도구에 대한 문서를 확인하십시오. 그러나 요청에 따라 소스 답변에 대한 링크는 다음과 같습니다 .
janoside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.