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.
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.
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 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.)
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.
-ls
sản lượng là hardcoded (xem mã nguồn cho pred_fls
và list_file chức năng). Bạn có thể thử ước tính đầu ra bằng cách sử dụng -printf
tù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
Tôi chỉ sử dụng kết hợp 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 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ờ du
củ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/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, điều đó không bắt buộc.
du
trang 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."
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:
-a
cho "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.more
nếu sử dụng số nhỏ hơnLư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
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
Để 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
-h
chỉ có sẵn cho GNUsort
, 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ạnPATH
.
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'
Đâ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 $DIRECTORY
và thực hiện ls -s
trê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 $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 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
).
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
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
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 -h
cho 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
/ du
theo 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.
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.
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ự là NCurses Disk Usage
công cụ:
sudo ncdu /