Theo dõi xuống không gian đĩa đã đi trên Linux?


532

Khi quản trị các hệ thống Linux, tôi thường thấy mình phải vật lộn để tìm ra thủ phạm sau khi một phân vùng bị đầy. Tôi thường sử dụng du / | sort -nrnhưng trên một hệ thống tập tin lớn, việc này mất nhiều thời gian trước khi bất kỳ kết quả nào được trả về.

Ngoài ra, điều này thường thành công trong việc làm nổi bật kẻ phạm tội tồi tệ nhất nhưng tôi thường thấy mình phải dùng đến dumà không có sort trường hợp tinh vi hơn và sau đó phải truy tìm đầu ra.

Tôi thích một giải pháp dòng lệnh dựa trên các lệnh Linux tiêu chuẩn vì tôi phải quản trị khá nhiều hệ thống và cài đặt phần mềm mới là một rắc rối (đặc biệt là khi hết dung lượng đĩa!)


1
@Bart cảm ơn vì đã dành thời gian để cải thiện bài viết ở đây, nhưng tôi có thể yêu cầu bạn cẩn thận hơn một chút khi thêm thẻ không? Thẻ không cho khả năng hiển thị, họ mô tả câu hỏi. Thẻ đĩa không phù hợp ở đây (xem mô tả thẻ của nó) và ít nhất hai trong số các thẻ bạn đã thêm trong chỉnh sửa được đề xuất này không phù hợp ở đó (Kali không phải là Debian và không có PPA liên quan).
Stephen Kitt

Câu trả lời:


614

Hãy thử ncdu, một bộ phân tích sử dụng đĩa dòng lệnh tuyệt vời:

nhập mô tả hình ảnh ở đây


6
Thông thường, tôi ghét bị yêu cầu cài đặt một cái gì đó để giải quyết một vấn đề đơn giản, nhưng điều này thật tuyệt vời.
gwg

14
sudo apt install ncdutrên Ubuntu có được nó dễ dàng. Thật tuyệt
Orion Edwards

10
Bạn hoàn toàn có thể biết hệ thống tập tin nào thiếu dung lượng. Trong trường hợp đó, bạn có thể sử dụng ncdu -xđể chỉ đếm các tệp và thư mục trên cùng một hệ thống tệp như thư mục đang được quét.
Luke anh em họ

7
câu trả lời hay nhất. Ngoài ra: sudo ncdu -rx /nên đọc sạch trên các tệp / thư mục lớn nhất CHỈ trên ổ đĩa gốc. ( -r= Read-only, -x = ở trên cùng một hệ thống tập tin (có nghĩa là: không đi qua gắn kết hệ thống tập tin khác))
bshea

5
Tôi có rất ít không gian mà tôi không thể cài đặt ncdu
Chris

338

Đừng đi thẳng tới du /. Sử dụng dfđể tìm phân vùng làm tổn thương bạn, sau đó thử ducác lệnh.

Một cái tôi thích thử là

# U.S.
du -h <dir> | grep '[0-9\.]\+G'
# Others
du -h <dir> | grep '[0-9\,]\+G'

bởi vì nó in các kích cỡ trong "dạng người có thể đọc được". Trừ khi bạn có các phân vùng thực sự nhỏ, grepping cho các thư mục trong gigabyte là một bộ lọc khá tốt cho những gì bạn muốn. Điều này sẽ khiến bạn mất một chút thời gian, nhưng trừ khi bạn có hạn ngạch được thiết lập, tôi nghĩ đó chỉ là cách nó sẽ diễn ra.

Như @jchavannes chỉ ra trong các bình luận, biểu thức có thể chính xác hơn nếu bạn tìm thấy quá nhiều thông tin sai. Tôi đã kết hợp đề xuất này, điều này làm cho nó tốt hơn, nhưng vẫn có những kết quả sai, vì vậy chỉ có sự đánh đổi (expr đơn giản hơn, kết quả tồi tệ hơn, expr phức tạp hơn và dài hơn, kết quả tốt hơn). Nếu bạn có quá nhiều thư mục nhỏ hiển thị trong đầu ra của mình, hãy điều chỉnh regex của bạn cho phù hợp. Ví dụ,

grep '^\s*[0-9\.]\+G'

thậm chí còn chính xác hơn (không có thư mục <1GB sẽ được liệt kê).

Nếu bạn làm có hạn ngạch, bạn có thể sử dụng

quota -v

để tìm người dùng đang ăn cắp đĩa.


2
Điều này rất nhanh chóng, đơn giản và thiết thực
zzapper

24
grep '[0-9]G'chứa rất nhiều dương tính giả và cũng bỏ qua bất kỳ số thập phân nào. Điều này làm việc tốt hơn đối với tôi:sudo du -h / | grep -P '^[0-9\.]+G'
jchavannes

1
Trong trường hợp bạn có những thư mục thực sự lớn, bạn sẽ muốn [GT]thay vì chỉG
Vitruvius

1
Có một công cụ sẽ liên tục theo dõi việc sử dụng đĩa trên tất cả các thư mục (một cách lười biếng) trong hệ thống tập tin không? Một cái gì đó có thể được truyền đến một giao diện người dùng web? Tốt nhất là thông tin thời gian thực mềm.
CMCDragonkai

20
Tôi thích sử dụngdu -h | sort -hr | head
augurar

104

Để có cái nhìn đầu tiên, hãy sử dụng chế độ xem tóm tắt của Wikipedia về du:

du -s /*

Hiệu quả là in kích thước của từng đối số của nó, tức là mọi thư mục gốc trong trường hợp trên.

Hơn nữa, cả GNUduBSDdu đều có thể bị giới hạn độ sâu ( nhưng POSIX dukhông thể! ):

  • GNU (Linux, Bitcoin):

    du --max-depth 3
  • BSD (macOS, ĐI):

    du -d 3
    

Điều này sẽ giới hạn hiển thị đầu ra ở độ sâu 3. Tất nhiên kích thước được tính toán và hiển thị vẫn là tổng độ sâu đầy đủ. Nhưng mặc dù vậy, việc hạn chế độ sâu hiển thị sẽ tăng tốc độ tính toán một cách mạnh mẽ.

Một tùy chọn hữu ích khác là -h(các từ trên cả GNU và BSD, nhưng, một lần nữa, không chỉ trên POSIX du) cho đầu ra có thể đọc được của con người (tức là sử dụng KiB, MiB, v.v. ).


23
nếu duphàn nàn về -dcố gắng --max-depth 5thay.
ReactiveRaven

8
Anwser tuyệt vời. Có vẻ đúng cho tôi. Tôi đề nghị du -hcd 1 /directory. -h cho con người có thể đọc được, c cho tổng và d cho độ sâu.

Tôi đang sử dụngdu -hd 1 <folder to inspect> | sort -hr | head
jonathanccalix đến

du --max-depth 5 -h /* 2>&1 | grep '[0-9\.]\+G' | sort -hr | headđể lọc Quyền bị từ chối
srghma

49

Bạn cũng có thể chạy lệnh sau bằng cách sử dụng du:

~# du -Pshx /* 2>/dev/null
  • Các -stùy chọn tóm tắt và tổng số hiển thị cho mỗi đối số.
  • h in Mio, Gio, v.v.
  • x = ở trong một hệ thống tập tin (rất hữu ích).
  • P = không theo liên kết tượng trưng (có thể khiến các tệp được tính hai lần chẳng hạn).

Hãy cẩn thận, /rootthư mục sẽ không được hiển thị, bạn phải chạy ~# du -Pshx /root 2>/dev/nullđể có được điều đó (một lần, tôi đã vật lộn rất nhiều khi không chỉ ra rằng /rootthư mục của tôi đã bị đầy).

Chỉnh sửa: Tùy chọn đã sửa -P


2
du -Pshx .* * 2>/dev/null+ thư mục ẩn / hệ thống
Mykhaylo Adamovych

27

Việc tìm kiếm các tệp lớn nhất trên hệ thống tập tin sẽ luôn mất nhiều thời gian. Theo định nghĩa, bạn phải duyệt toàn bộ hệ thống tập tin đang tìm kiếm các tập tin lớn. Giải pháp duy nhất có lẽ là chạy một công việc định kỳ trên tất cả các hệ thống của bạn để có tệp sẵn sàng trước thời hạn.

Một điều khác, tùy chọn x của du rất hữu ích để giữ cho du không theo các điểm gắn kết vào các hệ thống tập tin khác. I E:

du -x [path]

Lệnh đầy đủ tôi thường chạy là:

sudo du -xm / | sort -rn > usage.txt

Các -mphương tiện trả về kết quả tính bằng megabyte và sort -rnsẽ sắp xếp kết quả số lớn nhất trước tiên. Sau đó, bạn có thể mở used.txt trong trình chỉnh sửa và các thư mục lớn nhất (bắt đầu bằng /) sẽ ở trên cùng.


3
Cảm ơn đã chỉ ra -xcờ!
SamB

1
"tìm kiếm lớn nhất mất nhiều thời gian .." -> Cũng tùy, nhưng có xu hướng không đồng ý: không mất nhiều thời gian với các tiện ích như ncdu- ít nhất là nhanh hơn duhoặc find(tùy thuộc vào độ sâu và đối số) ..
bshea

vì tôi không thích root, tôi phải điều chỉnh nơi tập tin được viết:sudo du -xm / | sort -rn > ~/usage.txt
Bruno

20

Tôi luôn luôn sử dụng du -sm * | sort -n, nó cung cấp cho bạn một danh sách được sắp xếp bao nhiêu thư mục con của thư mục làm việc hiện tại sử dụng hết, trong mebibytes.

Bạn cũng có thể dùng thử Konqueror, có chế độ "xem kích thước", tương tự như WinDirStat thực hiện trên Windows: nó cung cấp cho bạn một đại diện thực tế về các tệp / thư mục sử dụng hầu hết dung lượng của bạn.

Cập nhật: trên các phiên bản gần đây hơn, bạn cũng có thể sử dụng du -sh * | sort -hsẽ hiển thị các tệp có thể đọc được của con người và sắp xếp theo các phiên bản đó. (các số sẽ được thêm vào với K, M, G, ...)

Đối với những người đang tìm kiếm một giải pháp thay thế cho chế độ xem kích thước tệp Konqueror của KDE3 có thể hãy xem qua đèn chiếu, mặc dù nó không đẹp lắm.


Tuy nhiên, đó chỉ là Konqueror 3.x - chế độ xem kích thước tệp vẫn chưa được chuyển sang KDE4.

'du -sh * | sort -h 'hoạt động hoàn hảo trên hộp Linux (Centos distro) của tôi. Cảm ơn!
pahariayogi

18

Tôi sử dụng điều này cho 25 kẻ phạm tội tồi tệ nhất bên dưới thư mục hiện tại

# -S to not include subdir size, sorted and limited to top 25
du -S . | sort -nr | head -25

Lệnh này đã thực hiện thủ thuật để tìm một thư mục ẩn dường như đang tăng kích thước theo thời gian. Cảm ơn!
thegreendroid

Đây có phải là byte không?
Người dùng

Theo mặc định, trên hệ thống của tôi, 'du -S' cung cấp đầu ra dễ đọc cho con người. Bạn nhận được một số byte đơn giản cho các tệp nhỏ, sau đó là một số có hậu tố 'KB' hoặc 'MB' cho các tệp lớn hơn.
serg10

Bạn có thể thực hiện du -Sh để có được đầu ra có thể đọc được của con người.
Siddhartha

@Siddhartha Nếu bạn thêm -h, nó có thể sẽ thay đổi tác dụng của sort -nrlệnh - nghĩa là sắp xếp sẽ không còn hoạt động, và sau đó headlệnh cũng sẽ không còn hoạt động nữa
Clare Macrae

14

Tại một công ty trước đây, chúng tôi đã từng có một công việc định kỳ được chạy qua đêm và xác định bất kỳ tệp nào có kích thước nhất định, ví dụ:

tìm / kích thước + 10000k

Bạn có thể muốn được lựa chọn nhiều hơn về các thư mục mà bạn đang tìm kiếm và xem ra bất kỳ ổ đĩa được gắn từ xa nào có thể ngoại tuyến.


Bạn có thể sử dụng -x tùy chọn tìm để đảm bảo bạn không tìm thấy tệp trên các thiết bị khác ngoài điểm bắt đầu của lệnh find. Điều này khắc phục vấn đề ổ đĩa gắn từ xa.
rjmunro

10

Một tùy chọn sẽ là chạy lệnh du / sort của bạn dưới dạng công việc định kỳ và xuất ra tệp, vì vậy nó đã có sẵn khi bạn cần.


9

Đối với dòng lệnh tôi nghĩ rằng phương pháp du / sort là tốt nhất. Nếu bạn không ở trên máy chủ, bạn nên xem Baobab - Trình phân tích sử dụng đĩa . Chương trình này cũng mất một chút thời gian để chạy, nhưng bạn có thể dễ dàng tìm thấy thư mục con sâu, sâu bên dưới tất cả các ISO Linux cũ.


2
Nó cũng có thể quét các thư mục từ xa thông qua SSH, FTP, SMB và WebDAV.

Điều đó thật tuyệt. Một số thứ chỉ hoạt động tốt hơn với GUI để trực quan hóa chúng, và đây là một trong số chúng! Tôi cần một máy chủ X trên máy chủ của mình dù sao cho CrashPlan, vì vậy nó cũng hoạt động trên đó.
timelmer

9

tôi sử dụng

du -ch --max-depth=2 .

và tôi thay đổi độ sâu tối đa cho phù hợp với nhu cầu của tôi. Tùy chọn "c" in tổng số cho các thư mục và tùy chọn "h" in các kích thước theo K, M hoặc G nếu phù hợp. Như những người khác đã nói, nó vẫn quét tất cả các thư mục, nhưng nó giới hạn đầu ra theo cách mà tôi thấy dễ dàng hơn để tìm các thư mục lớn.


9

Tôi sẽ về thứ hai xdiskusage. Nhưng tôi sẽ thêm vào lưu ý rằng nó thực sự là một frontend du và có thể đọc đầu ra du từ một tập tin. Vì vậy, bạn có thể chạy du -ax /home > ~/home-dutrên máy chủ của mình, scpquay lại tệp và sau đó phân tích đồ họa. Hoặc đường ống thông qua ssh.


6

Hãy thử đưa đầu ra của du vào một tập lệnh awk đơn giản để kiểm tra xem kích thước của thư mục có lớn hơn ngưỡng nào không, nếu có thì nó sẽ in ra. Bạn không cần phải đợi toàn bộ cây được duyệt trước khi bắt đầu nhận thông tin (so với nhiều câu trả lời khác).

Ví dụ: phần dưới đây hiển thị bất kỳ thư mục nào tiêu thụ nhiều hơn khoảng 500 MB.

du -kx / | awk '{ if ($1 > 500000) { print $0} }'

Để làm cho phần trên có thể tái sử dụng nhiều hơn một chút, bạn có thể định nghĩa một hàm trong .bashrc, (hoặc bạn có thể biến nó thành một tập lệnh độc lập).

dubig() {
    [ -z "$1" ] && echo "usage: dubig sizethreshMB [dir]" && return
    du -kx $2 | awk '{ if ($1 > '$1'*1024) { print $0} }'
}

Vì vậy, dubig 200 ~/xem trong thư mục chính (không theo symlink tắt thiết bị) cho các thư mục sử dụng hơn 200 MB.


Thật đáng tiếc khi một tá các hack grep được nâng cấp nhiều hơn. Ồ và du -ksẽ làm cho nó hoàn toàn chắc chắn rằng du đang sử dụng các đơn vị KB
ndemou

Ý kiến ​​hay về -k. Đã chỉnh sửa.
Mark Borgerding

Thậm chí đơn giản và mạnh mẽ hơn: du -kx $2 | awk '$1>'$(($1*1024))(nếu bạn chỉ xác định một mẫu điều kiện aka để đánh thức hành động mặc định là print $0)
dave_thedom_085

Điểm tốt @ date_thndry_085. Điều đó đúng với tất cả các phiên bản awk mà tôi biết (net / free-BSD & GNU). @ mark-borgerding vì vậy điều này có nghĩa là bạn có thể đơn giản hóa rất nhiều ví dụ đầu tiên của mình thànhdu -kx / | awk '$1 > 500000'
ndemou

@ mark-borgerding: Nếu bạn chỉ còn vài kBytes ở đâu đó, bạn cũng có thể giữ toàn bộ đầu ra của du như thế này du -kx / | tee /tmp/du.log | awk '$1 > 500000'. Điều này rất hữu ích vì nếu bộ lọc đầu tiên của bạn không có kết quả, bạn có thể thử các giá trị khác như thế này awk '$1 > 200000' /tmp/du.loghoặc kiểm tra đầu ra hoàn chỉnh như thế này sort -nr /tmp/du.log|lessmà không quét lại toàn bộ hệ thống tệp
ndemou

4

Tôi thích xdiskusage cũ tốt như là một thay thế đồ họa cho du (1).


Lưu ý phần này của câu hỏi: "Tôi thích một giải pháp dòng lệnh dựa trên các lệnh Linux tiêu chuẩn kể từ ..."
ndemou

4

Tôi thích sử dụng những điều sau đây để có cái nhìn tổng quan và đi sâu vào đó ...

cd /folder_to_check
du -shx */

Điều này sẽ hiển thị kết quả với đầu ra có thể đọc được của con người như GB, MB. Nó cũng sẽ ngăn chặn truyền qua các hệ thống tập tin từ xa. Các -slựa chọn duy nhất cho thấy bản tóm tắt của mỗi thư mục tìm thấy, do đó bạn có thể đi sâu hơn nữa nếu muốn biết thêm chi tiết của một thư mục. Hãy nhớ rằng giải pháp này sẽ chỉ hiển thị các thư mục, do đó bạn sẽ muốn bỏ qua / sau dấu hoa thị nếu bạn cũng muốn các tệp.


4

Không được đề cập ở đây nhưng bạn cũng nên kiểm tra lsof trong trường hợp tệp bị xóa / treo. Tôi đã có một tệp tmp 5,9 GB đã bị xóa từ một cronjob.

https://serverfault.com/questions/207100/how-can-i-find-ph Phantom-st Storage-usage Đã giúp tôi tìm ra chủ sở hữu quy trình của tệp đã nói (cron) và sau đó tôi có thể goto /proc/{cron id}/fd/{file handle #}bớt tệp trong câu hỏi để bắt đầu chạy trốn, giải quyết nó, và sau đó lặp lại tập tin ""> để dọn sạch không gian và để cron duyên dáng tự đóng lại.


3

Từ thiết bị đầu cuối, bạn có thể có được một đại diện trực quan về việc sử dụng đĩa với dutree

Nó rất nhanh và nhẹ vì được triển khai trong Rust

dutree

$ dutree -h
Usage: dutree [options] <path> [<path>..]

Options:
    -d, --depth [DEPTH] show directories up to depth N (def 1)
    -a, --aggr [N[KMG]] aggregate smaller than N B/KiB/MiB/GiB (def 1M)
    -s, --summary       equivalent to -da, or -d1 -a1M
    -u, --usage         report real disk usage instead of file size
    -b, --bytes         print sizes in bytes
    -f, --files-only    skip directories for a fast local overview
    -x, --exclude NAME  exclude matching files or directories
    -H, --no-hidden     exclude hidden files
    -A, --ascii         ASCII characters only, no colors
    -h, --help          show help
    -v, --version       print version number

Xem tất cả các chi tiết sử dụng trong trang web


2

Đối với dòng lệnh du (và tùy chọn của nó) dường như là cách tốt nhất. DiskHog trông giống như nó sử dụng thông tin du / df từ một công việc định kỳ, vì vậy đề xuất của Peter có lẽ là sự kết hợp tốt nhất giữa đơn giản và hiệu quả.

( FileLightKDirStat là lý tưởng cho GUI.)


2

Bạn có thể sử dụng các công cụ tiêu chuẩn như findsortđể phân tích việc sử dụng không gian đĩa của bạn.

Liệt kê các thư mục được sắp xếp theo kích thước của chúng:

find / -mount -type d -exec du -s "{}" \; | sort -n

Liệt kê các tệp được sắp xếp theo kích thước của chúng:

find / -mount -printf "%k\t%p\n" | sort -n

1
Tôi thấy đây là câu trả lời tốt nhất, để phát hiện kích thước lớn theo thứ tự được sắp xếp
vimal krishna

2

Có thể đáng lưu ý rằng mc(Midnight Commander, trình quản lý tệp chế độ văn bản cổ điển) theo mặc định chỉ hiển thị kích thước của các nút thư mục (thông thường 4096) nhưng với CtrlSpacehoặc với menu Công cụ bạn có thể thấy không gian bị chiếm bởi thư mục đã chọn trong một con người có thể đọc được định dạng (ví dụ, một số thích 103151M).

Chẳng hạn, hình ảnh bên dưới hiển thị kích thước đầy đủ của các bản phân phối TeX Live vanilla 2018 và 2017, trong khi các phiên bản 2015 và 2016 chỉ hiển thị kích thước của inode (nhưng chúng thực sự có gần 5 Gb mỗi cái).

Đó là, CtrlSpacephải được thực hiện một cho một, chỉ cho cấp thư mục thực tế, nhưng nó rất nhanh và tiện dụng khi bạn điều hướng với mcđiều đó có thể bạn sẽ không cần ncdu(thực sự, chỉ với mục đích này là tốt hơn). Nếu không, bạn cũng có thể chạy ncdutừ mc. không thoát ra mchoặc khởi chạy một thiết bị đầu cuối khác.

mwe



1

Nếu bạn biết rằng các tệp lớn đã được thêm vào trong vài ngày qua (giả sử 3), thì bạn có thể sử dụng lệnh find kết hợp với " ls -ltra" để khám phá các tệp được thêm gần đây:

find /some/dir -type f -mtime -3 -exec ls -lart {} \;

Điều này sẽ chỉ cung cấp cho bạn các tệp (" -type f"), không phải thư mục; chỉ các tệp có thời gian sửa đổi trong 3 ngày qua (" -mtime -3") và thực thi " ls -lart" đối với từng tệp được tìm thấy (" -exec" phần).


1

Để hiểu việc sử dụng không gian đĩa không cân xứng, thường bắt đầu từ thư mục gốc và đi qua một số đứa trẻ lớn nhất của nó.

Chúng ta có thể làm điều này bằng cách

  • lưu đầu ra của du vào một tập tin
  • grepping thông qua kết quả lặp đi lặp lại

Đó là:

# sum up the size of all files and directories under the root filesystem
du -a -h -x / > disk_usage.txt
# display the size of root items
grep $'\t/[^/]*$' disk_usage.txt

Bây giờ hãy nói / usr xuất hiện quá lớn

# display the size of /usr items
grep $'\t/usr/[^/]*$' disk_usage.txt

bây giờ nếu / usr / local lớn một cách đáng ngờ

# display the size /usr/local items
grep $'\t/usr/local/[^/]*$' disk_usage.txt

và v.v.


1

Tôi đã sử dụng lệnh này để tìm các tệp lớn hơn 100Mb:

find / -size +100M -exec ls -l {} \;

0

Tôi đã thành công trong việc theo dõi những kẻ phạm tội tồi tệ nhất dẫn đường duđầu ra ở dạng có thể đọc được egrepvà khớp với biểu thức chính quy.

Ví dụ:

du -h | egrep "[0-9]+G.*|[5-9][0-9][0-9]M.*"

sẽ cung cấp cho bạn mọi thứ trở lại 500 megs hoặc cao hơn.


Đừng sử dụng grep cho các phép toán số học - thay vào đó hãy sử dụng awk : du -k | awk '$1 > 500000'. Nó dễ hiểu hơn nhiều, chỉnh sửa và sửa lỗi ngay lần thử đầu tiên.
ndemou

0

Nếu bạn muốn tốc độ, bạn có thể bật hạn ngạch trên các hệ thống tệp bạn muốn theo dõi (bạn không cần đặt hạn ngạch cho bất kỳ người dùng nào) và sử dụng tập lệnh sử dụng lệnh hạn ngạch để liệt kê không gian đĩa được sử dụng bởi mỗi người dùng. Ví dụ:

quota -v $user | grep $filesystem | awk '{ print $2 }'

sẽ cung cấp cho bạn việc sử dụng đĩa theo khối cho người dùng cụ thể trên hệ thống tệp cụ thể. Bạn sẽ có thể kiểm tra tập quán trong vài giây theo cách này.

Để bật hạn ngạch, bạn sẽ cần thêm usrquota vào các tùy chọn hệ thống tệp trong tệp / etc / fstab của mình và sau đó có thể khởi động lại để có thể chạy báo giá trên hệ thống tệp nhàn rỗi trước khi gọi quotaon.


0

Đây là một ứng dụng nhỏ sử dụng lấy mẫu sâu để tìm khối u trong bất kỳ đĩa hoặc thư mục nào. Nó đi trên cây thư mục hai lần, một lần để đo nó và lần thứ hai để in ra các đường dẫn đến 20 byte "ngẫu nhiên" trong thư mục.

void walk(string sDir, int iPass, int64& n, int64& n1, int64 step){
    foreach(string sSubDir in sDir){
        walk(sDir + "/" + sSubDir, iPass, n, n1, step);
    }
    foreach(string sFile in sDir){
        string sPath = sDir + "/" + sFile;
        int64 len = File.Size(sPath);
        if (iPass == 2){
            while(n1 <= n+len){
               print sPath;
               n1 += step;
            }
        }
        n += len;
    }
}

void dscan(){
    int64 n = 0, n1 = 0, step = 0;
    // pass 1, measure
    walk(".", 1, n, n1);
    print n;
    // pass 2, print
    step = n/20; n1 = step/2; n = 0;
    walk(".", 2, n, n1);
    print n;
}

Đầu ra trông như thế này cho thư mục Tệp chương trình của tôi:

 7,908,634,694
.\ArcSoft\PhotoStudio 2000\Samples\3.jpg
.\Common Files\Java\Update\Base Images\j2re1.4.2-b28\core1.zip
.\Common Files\Wise Installation Wizard\WISDED53B0BB67C4244AE6AD6FD3C28D1EF_7_0_2_7.MSI
.\Insightful\splus62\java\jre\lib\jaws.jar
.\Intel\Compiler\Fortran\9.1\em64t\bin\tselect.exe
.\Intel\Download\IntelFortranProCompiler91\Compiler\Itanium\Data1.cab
.\Intel\MKL\8.0.1\em64t\bin\mkl_lapack32.dll
.\Java\jre1.6.0\bin\client\classes.jsa
.\Microsoft SQL Server\90\Setup Bootstrap\sqlsval.dll
.\Microsoft Visual Studio\DF98\DOC\TAPI.CHM
.\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\Windows CE\sqlce20sql2ksp1.exe
.\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\docs\Partition II Metadata.doc
.\Microsoft Visual Studio .NET 2003\Visual Studio .NET Enterprise Architect 2003 - English\Logs\VSMsiLog0A34.txt
.\Microsoft Visual Studio 8\Microsoft Visual Studio 2005 Professional Edition - ENU\Logs\VSMsiLog1A9E.txt
.\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wce500\mipsiv\NETCFv2.wce5.mipsiv.cab
.\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i\UafxcW.lib
.\Microsoft Visual Studio 8\VC\ce\Dll\mipsii\mfc80ud.pdb
.\Movie Maker\MUI\0409\moviemk.chm
.\TheCompany\TheProduct\docs\TheProduct User's Guide.pdf
.\VNI\CTT6.0\help\StatV1.pdf
7,908,634,694

Nó cho tôi biết rằng thư mục là 7.9gb, trong đó

  • ~ 15% vào trình biên dịch Intel Fortran
  • ~ 15% vào VS .NET 2003
  • ~ 20% chuyển đến VS 8

Nó là đủ đơn giản để hỏi nếu bất kỳ trong số này có thể được dỡ xuống.

Nó cũng cho biết về các loại tệp được phân phối trên toàn hệ thống tệp, nhưng được kết hợp với nhau thể hiện cơ hội tiết kiệm không gian:

  • ~ 15% đại khái là tập tin .cab và .MSI
  • ~ 10% đại khái là đi đến đăng nhập tệp văn bản

Nó cũng cho thấy rất nhiều thứ khác trong đó, mà tôi có thể làm mà không cần, như hỗ trợ "SmartDevices" và "ce" (~ 15%).

Nó mất thời gian tuyến tính, nhưng nó không phải được thực hiện thường xuyên.

Ví dụ về những điều nó đã tìm thấy:

  • sao lưu các bản sao của DLL trong nhiều kho lưu trữ mã, mà thực sự không cần phải lưu
  • một bản sao lưu ổ cứng của ai đó trên máy chủ, trong một thư mục tối nghĩa
  • tập tin internet tạm thời đồ sộ
  • tài liệu cổ xưa và các tập tin trợ giúp quá khứ là cần thiết

0

Tôi đã có một vấn đề tương tự, nhưng câu trả lời trên trang này không đủ. Tôi thấy lệnh sau đây là hữu ích nhất cho danh sách:

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

Mà sẽ cho tôi thấy 20 tội phạm lớn nhất. Tuy nhiên, ngay cả khi tôi chạy nó, nó không cho tôi thấy vấn đề thực sự, vì tôi đã xóa tập tin. Điều đáng chú ý là có một quá trình vẫn đang chạy đang tham chiếu tệp nhật ký đã xóa ... vì vậy tôi phải hủy quá trình đó trước khi không gian đĩa hiển thị là miễn phí.


Điểm tốt nhưng đây phải là một nhận xét và không phải là một câu trả lời - câu hỏi này chịu quá nhiều câu trả lời
ndemou

0

Bạn có thể sử dụng DiskReport.net để tạo báo cáo web trực tuyến về tất cả các đĩa của mình.

Với nhiều lần chạy, nó sẽ hiển thị cho bạn biểu đồ lịch sử cho tất cả các thư mục của bạn, dễ dàng tìm thấy những gì đã phát triển


Công cụ này không khớp với hai điểm chính của câu hỏi "Tôi thường thấy mình phải vật lộn để truy tìm thủ phạm sau khi phân vùng bị đầy" và "Tôi thích một giải pháp dòng lệnh dựa trên các lệnh Linux tiêu chuẩn"
ndemou

0

Có một phần mềm miễn phí đa nền tảng được gọi là JDiskReport bao gồm GUI để khám phá những gì chiếm hết không gian đó.

Ảnh chụp màn hình ví dụ:
Ảnh chụp màn hình JDiskReport

Tất nhiên, bạn sẽ cần phải dọn sạch một chút dung lượng thủ công trước khi bạn có thể tải xuống và cài đặt nó, hoặc tải nó xuống một ổ đĩa khác (như ổ USB).


( Sao chép ở đây từ câu trả lời của cùng tác giả cho câu hỏi trùng lặp)

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.