Cách dòng lệnh để tìm các tệp / thư mục lớn để loại bỏ và giải phóng không gian?


203

Tìm kiếm một loạt các lệnh sẽ hiển thị cho tôi các tệp lớn nhất trên một ổ đĩa.


Một cái gì đó đồ họa sẽ tốt?
RolandiXor

5
Không, chạy trên dòng lệnh trên ssh.
Ryan Detzel

Điều kỳ lạ là tôi có hai máy chủ đang chạy cùng một thứ. Một là ở mức sử dụng đĩa 50% và cái còn lại là 99%. Tôi không thể tìm thấy những gì gây ra điều này.
Ryan Detzel

Vì vậy, tôi bối rối, nó nói 98% được sử dụng với du nhưng khi tôi chạy ứng dụng gt5 tôi nhận được: Grab.by/9Vv2
Ryan Detzel

Câu trả lời:


276

Nếu bạn chỉ cần tìm các tệp lớn, bạn có thể sử dụng findvới -sizetùy chọn. Lệnh tiếp theo sẽ liệt kê tất cả các tệp lớn hơn 10MiB ( không bị nhầm lẫn với 10MB ):

find / -size +10M -ls

Nếu bạn muốn tìm các tệp giữa một kích thước nhất định, bạn có thể kết hợp nó với tìm kiếm "kích thước thấp hơn". Lệnh tiếp theo tìm tệp trong khoảng từ 10MiB đến 12MiB:

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

apt-cache search 'disk usage'liệt kê một số chương trình có sẵn để phân tích sử dụng đĩa. Một ứng dụng có vẻ rất hứa hẹn là gt5.

Từ mô tả gói:

Nhiều năm đã trôi qua và các đĩa đã trở nên lớn hơn và lớn hơn, nhưng ngay cả trong kỷ nguyên ổ cứng cực kỳ lớn này, không gian dường như biến mất theo thời gian. Chương trình nhỏ và hiệu quả này cung cấp danh sách thuận tiện hơn so với du (1) mặc định. Nó hiển thị những gì đã xảy ra kể từ lần chạy trước và hiển thị kích thước thư mục và tổng tỷ lệ phần trăm. Có thể điều hướng và lên tới các thư mục bằng cách sử dụng các phím con trỏ với trình duyệt dựa trên văn bản (liên kết, elinks, lynx, v.v.)

Ảnh chụp màn hình của gt5

Trên phần "các gói liên quan" của gt5 , tôi đã tìm thấy ncdu. Từ mô tả gói của nó:

Ncdu là một người xem du dựa trên ncurses. Nó cung cấp một giao diện nhanh chóng và dễ sử dụng thông qua tiện ích du nổi tiếng. Nó cho phép duyệt qua các thư mục và hiển thị tỷ lệ phần trăm sử dụng đĩa với thư viện ncurses.

Ảnh chụp màn hình của ncdu


3
ncdu rất nhanh chóng và chỉ những gì tôi cần, cảm ơn! Tôi cũng đã thử gt5, nhưng chỉ hủy nó vì nó "suy nghĩ" quá lâu với bất kỳ phản hồi nào
Lukas

7
Holy crap, ncdu là tuyệt vời, cảm ơn bạn đã chia sẻ những phát hiện của bạn!
While-E

Tôi sẽ yêu nếu ncdu được chỉ ra mạnh mẽ hơn. Thỉnh thoảng tôi cần nó và tôi không thể nhớ tên.
Martin Thoma

Đủ để nhớ các lệnh nhờ ncdu :)
Mr Coder

1
@ Matt Nope, định dạng đầu ra cho -lssản lượng là hardcoded (xem mã nguồn cho pred_flslist_file chức năng). Bạn có thể thử ước tính đầu ra bằng cách sử dụng -printftùy chọn, xử lý hậu kỳ đầu ra bằng awk hoặc sử dụng cái gì đó nhưfind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

Tôi chỉ sử dụng kết hợp dusort.

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

Sau đó, đó là một trường hợp rửa và lặp lại . Nhắm mục tiêu các thư mục con mà bạn cho là quá lớn, hãy chạy lệnh cho chúng và bạn tìm ra nguyên nhân gây ra sự cố.

Lưu ý: Tôi sử dụng cờ ducủa mình -xđể giữ mọi thứ giới hạn trong một hệ thống tệp (Tôi có cách sắp xếp khá phức tạp các thứ được gắn chéo giữa SSD và RAID5).

Lưu ý 2: 2>/dev/nullchuyển hướng bất kỳ thông báo lỗi nào vào quên lãng. Nếu họ không làm phiền bạn, điều đó không bắt buộc.


1
Khi tôi chạy lệnh này du xuống các thư mục con. Từ dutrang man: "Tóm tắt việc sử dụng đĩa của từng TẬP TIN, đệ quy cho các thư mục."
Jamie

26

Giải pháp yêu thích của tôi sử dụng kết hợp từ một số câu trả lời tốt.

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

du tranh luận:

  • -acho "tất cả" tập tin và thư mục. Để lại nó cho các thư mục
  • -BM để xuất kích thước theo kích thước khối megabyte (M) (B)
  • 2>/dev/null - loại trừ các thông báo lỗi "quyền bị từ chối" (cảm ơn @Oli)

sort tranh luận:

  • -n cho "số"
  • -r cho "đảo ngược" (lớn nhất đến nhỏ nhất)

head tranh luận:

  • -n 50 cho 50 kết quả hàng đầu.
  • Bỏ đi morenếu sử dụng số nhỏ hơn

Lưu ý: Tiền tố sudođể bao gồm các thư mục mà tài khoản của bạn không có quyền truy cập.

Ví dụ hiển thị 10 tệp và thư mục lớn nhất trong / var (bao gồm tổng lớn).

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

Câu trả lời của qbi là đúng nhưng sẽ rất chậm khi có rất nhiều tệp vì nó sẽ bắt đầu một quy trình ls mới cho mỗi mục.

một phiên bản nhanh hơn nhiều bằng cách sử dụng find mà không sinh ra các tiến trình con sẽ là sử dụng printf để in kích thước theo byte (% s) và đường dẫn (% p)

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


1
Xác nhận rằng việc này nhanh hơn nhiều
Cookie

10

Để hiển thị 20 thư mục lớn nhất (đệ quy) trong thư mục hiện tại, hãy sử dụng một trong các thư mục sau:

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

hoặc (hướng Unix nhiều hơn):

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

Đối với 20 tệp lớn nhất trong thư mục hiện tại (đệ quy):

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

hoặc với kích thước có thể đọc được của con người:

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

Xin lưu ý rằng -hchỉ có sẵn cho GNU sort, vì vậy để làm cho nó hoạt động đúng trên OSX / BSD, bạn phải cài đặt nó từ đó coreutils. Sau đó thêm thư mục của nó vào của bạn PATH.

Vì vậy, các bí danh này rất hữu ích để có trong các tệp RC của bạn (mỗi khi bạn cần):

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

8

Đây có vẻ như là ứng dụng hoàn hảo cho find:

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

Lệnh này sẽ tìm tất cả các tệp trong thư mục $DIRECTORYvà thực hiện ls -strên chúng. Lệnh cuối cùng in kích thước được phân bổ của một tệp cộng với tên tệp. Kết quả được sắp xếp theo số lượng và năm mục cuối cùng được hiển thị. Vì vậy, kết quả là bạn sẽ thấy 5 tệp lớn nhất trong $DIRETORYhoặc bất kỳ thư mục con nào. Nếu bạn nhập, tail -n 1bạn sẽ chỉ thấy tệp lớn nhất.

Hơn nữa, bạn có thể chơi xung quanh rất nhiều với find. Chẳng hạn, bạn có thể tìm các tệp nhỏ hơn n ngày ( -ctime -n) hoặc thuộc về người dùng đặc biệt ( -user johndoe).


5

Khi tôi cần tạo thêm không gian trống trên máy chủ, tôi sử dụng lệnh này. Nó tìm thấy tất cả các tệp lớn hơn 50 MB và "du -h" tạo danh sách các tệp tốt hơn và "sort -n" sau khi đường ống tạo danh sách số được sắp xếp theo kích thước tệp.

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

1

Hãy dùng thử Baobab, nó cung cấp cho bạn một cái nhìn tổng quan về đồ họa của các tệp và thư mục, bạn có thể xem vị trí của không gian thực và xóa chúng chỉ bằng một cú nhấp https://help.ub Ubuntu.com/community/baobab


2
Trong câu hỏi cụ thể này, OP thích phương thức dòng lệnh. Xem các ý kiến ​​cho câu hỏi. Tôi cũng sẽ chỉnh sửa câu hỏi.

1

Để tìm tất cả các tệp GB chẳng hạn, tôi sẽ sử dụng du và grep, mặc dù các phương thức khác được đề cập ở đây có vẻ rất tốt.

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

Bạn cũng có thể trở nên lạ mắt với tùy chọn --except mà du có.


0

Bạn cũng có thể sắp xếp các tệp theo kích thước:

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

Nó chỉ tìm thấy các tệp và thực thi du -hcho mọi tệp, cho thấy kích thước của tệp. Cuối cùng, chúng tôi sắp xếp đầu ra của find/ dutheo cột đầu tiên (ở định dạng có thể đọc được của con người).

Các tập tin in cuối cùng là tập tin lớn nhất.


0

Bạn có thể sử dụng lệnh để xem các tệp lớn nhất trong khi bỏ qua các thư mục:

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

Để tìm tất cả các tệp lớn hơn 100MiB (đây không phải là 100 MB, hãy xem tại đây nếu bạn bối rối):

find / -size +100M -ls

lệnh bên dưới sẽ hiển thị 5 tệp lớn nhất trong thư mục $DIRECTORY:

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

SỬ DỤNG du: Lệnh bên dưới sử dụng du, hiển thị các thư mục có 20 kích thước lớn nhất trong thư mục làm việc tại nhà:

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

Bây giờ để hiển thị các thư mục / tệp lớn nhất bao gồm các thư mục con, hãy chạy:

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

Sử dụng ls:

Để liệt kê 5 tệp lớn nhất hàng đầu trong thư mục / bin, hãy dùng lệnh dưới đây:

ls -lSh /bin | head -5

Bạn cũng có thể sử dụng Trình phân tích sử dụng đĩa hoặc Baobao như được hiển thị ở đây chẳng hạn.


0

Một công cụ tuyệt vời, thân thiện với người dùng được tham chiếu trong câu trả lời cho một câu hỏi tương tựNCurses Disk Usagecông cụ:

sudo ncdu /

Chà, bắt đầu từ thư mục gốc của hệ thống tập tin hoàn toàn trái ngược với tôi. Nó cho phép tôi xác định những nơi quan trọng nhất để nhắm mục tiêu tiết kiệm không gian trên toàn bộ hệ thống tập tin. Bất kể, bạn có thể sử dụng đề cập để bắt đầu tại bất kỳ thư mục. Kiểm tra các tài liệu cho công cụ đó. Nhưng, theo yêu cầu, đây là liên kết đến câu trả lời nguồn .
janoside
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.