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


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.


158
2018-04-20 14:01


gốc


Đồ họa nào đó có ổn không? - RolandiXor♦
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à 50% sử dụng đĩa và một là 99%. Tôi không thể tìm thấy nguyên nhân 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 các ứng dụng gt5 tôi nhận được: grab.by/9Vv2 - Ryan Detzel


Các câu trả lời:


Nếu bạn chỉ cần tìm các tệp lớn, bạn có thể sử dụng find với -size Tù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 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 các tệp giữa 10MiB và 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 mức sử dụng đĩa. Một ứng dụng trông rất hứa hẹn là gt5.

Từ mô tả gói:

Nhiều năm trôi qua và đĩ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 tiện lợi hơn so với mặc định (1). Nó hiển thị những gì đã xảy ra kể từ lần chạy cuối cùng 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à đi 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 ...)

Screenshot of gt5

Trên phần "gói có 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 lịch 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 lịch 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.

Screenshot of ncdu


223
2018-04-20 14:16



ncdu rất nhanh và chỉ là những gì tôi cần, cảm ơn! Tôi đã thử gt5 quá, nhưng chỉ cần hủy bỏ nó bởi vì nó đã được "suy nghĩ" quá dài w / o bất kỳ thông tin phản hồi - Lukas
Holy crap, ncdu thật 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 rất thích nếu ncdu được chỉ ra mạnh mẽ hơn. Tôi cần nó một lần trong một thời gian và tôi không thể nhớ tên. - Martin Thoma


Tôi chỉ sử dụng một sự kết hợp của du và 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

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

Lưu ý: tôi sử dụng du'S -x gắn cờ để giữ cho mọi thứ bị hạn chế đối với một hệ thống tệp (tôi có một sự sắp xếp khá phức tạp về các thứ được gắn chéo giữa SSD và RAID5).

Lưu ý 2: 2>/dev/null chuyể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, nó không bắt buộc.


29
2018-04-20 14:30



Khi tôi chạy lệnh này du đi sâu vào các thư mục con. Từ du trang người dùng: "Tóm tắt mức sử dụng đĩa của từng TẬP_TIN, đệ quy cho các thư mục". - Jamie


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 hay này.

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

du lập luận:

  • -a cho "tất cả" tệp và thư mục. Để nó chỉ cho các thư mục
  • -BM để xuất kích thước theo cỡ khối (MB) megabyte (B)
  • 2>/dev/null - loại trừ các thông báo lỗi "cho phép từ chối" (nhờ @Oli)

sort lập luận:

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

head lập luận:

  • -n 50 cho 50 kết quả hàng đầu.
  • Rời khỏi more nếu sử dụng một số nhỏ hơn

Lưu ý: Tiền tố với 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 số 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

16
2017-07-03 23:24



yêu nó, cảm ơn - electblake


Câu trả lời của qbi là chính xác nhưng nó sẽ rất chậm khi có rất nhiều tập tin vì nó sẽ bắt đầu một quá 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 tìm mà không cần các quá trình con sinh sản sẽ 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


8
2017-11-16 12:55



Xác nhận rằng điều này nhanh hơn nhiều - Cookie


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

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

hoặc (theo định hướng Unix):

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 các 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 -h có sẵn cho GNU sort chỉ, do đó, để làm cho nó hoạt động trên OSX / BSD đúng cách, bạn đã cài đặt nó từ coreutils. Sau đó, thêm thư mục của nó vào PATH.

Các bí danh này hữu ích trong rc tệp (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'

7
2018-03-05 14:17





Điều này có vẻ giống như ứ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 $DIRECTORY và thi hành ls -s về họ. 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 $DIRETORY hoặc bất kỳ thư mục con nào. Nếu bạn nhập tail -n 1 bạn sẽ chỉ thấy tệp lớn nhất.

Hơn nữa, bạn có thể chơi rất nhiều với find. Ví dụ: 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).


6
2018-04-20 14:26





Khi tôi cần 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 tin lớn hơn sau đó 50 MB và "du -h" làm cho danh sách tốt hơn các tập tin và "sắp xếp -n" sau khi ống làm cho danh sách số được sắp xếp theo kích thước tập tin.

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

2
2017-10-11 20:40





Hãy 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 tin và thư mục, bạn có thể thấy nơi mà các con lợn không gian thực và xoá chúng bằng một cú nhấp chuột https://help.ubuntu.com/community/Baobab


1
2018-01-29 11:47



Trong câu hỏi cụ thể này, OP thích phương thức dòng lệnh hơn. Xem nhận xét cho câu hỏi. Tôi cũng sẽ chỉnh sửa câu hỏi.


Để tìm tất cả các tập tin GB ví dụ tôi sẽ sử dụng du và grep, mặc dù các phương pháp khác được đề cập ở đây có vẻ tuyệt vời là tốt.

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

Bạn cũng có thể được ưa thích với tùy chọn --except mà du có.


1
2018-06-11 19:04





Bạn cũng có thể sắp xếp 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 hiện du -h cho mọi tệp, hiển thị 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/du theo cột đầu tiên (ở định dạng có thể đọc được của con người).

Tệp được in cuối cùng là tệp lớn nhất.


0
2017-09-08 12:28