การติดตามว่ามีพื้นที่ดิสก์เหลืออยู่บน Linux หรือไม่


532

เมื่อดูแลระบบ Linux ฉันมักพบว่าตัวเองกำลังดิ้นรนเพื่อติดตามผู้กระทำผิดหลังจากพาร์ติชันเต็ม ปกติฉันใช้du / | sort -nrแต่ในระบบไฟล์ขนาดใหญ่ใช้เวลานานกว่าจะได้ผลลัพธ์กลับมา

นอกจากนี้มักจะประสบความสำเร็จในการเน้นผู้กระทำความผิดที่เลวร้ายที่สุด แต่ฉันมักจะพบว่าตัวเองหันไปduโดยไม่ต้องsort ในกรณีที่ลึกซึ้งยิ่งขึ้นแล้วต้อง trawl ผ่านเอาท์พุท

ฉันต้องการโซลูชันบรรทัดคำสั่งที่ใช้คำสั่ง Linux มาตรฐานเนื่องจากฉันต้องดูแลระบบไม่กี่ระบบและการติดตั้งซอฟต์แวร์ใหม่นั้นเป็นเรื่องยุ่งยาก (โดยเฉพาะเมื่อพื้นที่ดิสก์ไม่เพียงพอ!)


1
@Bart ขอบคุณที่สละเวลาเพื่อปรับปรุงการโพสต์ที่นี่ แต่ขอให้คุณระมัดระวังเพิ่มอีกเล็กน้อยเมื่อเพิ่มแท็ก? แท็กไม่สามารถมองเห็นได้พวกเขาอธิบายคำถาม แท็กดิสก์ไม่เหมาะสมที่นี่ (ดูคำอธิบายแท็ก) และแท็กอย่างน้อยสองรายการที่คุณเพิ่มในการแก้ไขที่แนะนำนี้ไม่เหมาะสมที่นั่น (Kali ไม่ใช่ Debian และไม่มี PPA ที่เกี่ยวข้อง)
สตีเฟ่น Kitt

คำตอบ:


614

ลองncduใช้ตัววิเคราะห์การใช้ดิสก์บรรทัดคำสั่งที่ยอดเยี่ยม:

ป้อนคำอธิบายรูปภาพที่นี่


6
โดยทั่วไปแล้วฉันเกลียดการถูกขอให้ติดตั้งบางอย่างเพื่อแก้ไขปัญหาที่ง่าย แต่นี่ก็เยี่ยมมาก
gwg

14
sudo apt install ncduบน Ubuntu ได้รับมันอย่างง่ายดาย เยี่ยมมาก
Orion Edwards

10
คุณค่อนข้างจะรู้ว่าระบบไฟล์ใดขาดพื้นที่ ในกรณีนี้คุณสามารถใช้ncdu -xเพื่อนับไฟล์และไดเรกทอรีในระบบไฟล์เดียวกับไดเรกทอรีที่กำลังสแกน
ลุคลูกพี่ลูกน้อง

7
คำตอบที่ดีที่สุด ยัง: sudo ncdu -rx /ควรให้อ่านสะอาดบน dirs / ไฟล์ที่ใหญ่ที่สุดเท่านั้นในไดรฟ์พื้นที่ราก ( -r= อ่านอย่างเดียว-x = อยู่ในระบบไฟล์เดียวกัน (ความหมาย: ห้ามข้ามการติดตั้งระบบไฟล์อื่น))
bshea

5
ฉันมีพื้นที่เหลือน้อยที่ฉันไม่สามารถติดตั้ง ncdu ได้
Chris

338

du /อย่าตรงไปที่ ใช้dfเพื่อค้นหาพาร์ติชั่นที่ทำร้ายคุณแล้วลองduคำสั่ง

หนึ่งที่ฉันอยากลองคือ

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

เพราะมันพิมพ์ขนาดใน "รูปแบบที่มนุษย์อ่านได้" ถ้าคุณไม่มีพาร์ติชั่นขนาดเล็กมาก ๆ การโลภสำหรับไดเรกทอรีในกิกะไบต์เป็นตัวกรองที่ดีพอสำหรับสิ่งที่คุณต้องการ มันจะใช้เวลาสักพัก แต่ถ้าคุณไม่ได้ตั้งโควต้าฉันคิดว่านั่นเป็นวิธีที่มันจะเป็น

@jchavannes ชี้ให้เห็นในความคิดเห็นการแสดงออกอาจแม่นยำมากขึ้นหากคุณพบว่ามีผลบวกผิดพลาดมากเกินไป ฉันรวมข้อเสนอแนะซึ่งทำให้ดีขึ้น แต่ยังคงมีข้อผิดพลาดที่เป็นเท็จดังนั้นจึงมีเพียงการแลกเปลี่ยน (expr ที่ง่ายกว่าผลลัพธ์ที่แย่กว่านั้นซับซ้อนกว่าและ expr ที่ยาวกว่าและผลลัพธ์ที่ดีกว่า) หากคุณมีไดเรกทอรีน้อยเกินไปที่แสดงในเอาต์พุตของคุณให้ปรับ regex ของคุณให้สอดคล้อง ตัวอย่างเช่น,

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

แม่นยำยิ่งขึ้น (จะไม่มีรายชื่อไดเรกทอรี <1GB)

ถ้าคุณทำมีโควต้าที่คุณสามารถใช้

quota -v

เพื่อค้นหาผู้ใช้ที่ใช้ดิสก์


2
นี่เป็นวิธีที่รวดเร็วง่ายและใช้งานได้จริง
zzapper

24
grep '[0-9]G'มีผลบวกเท็จจำนวนมากและไม่ได้ระบุทศนิยม สิ่งนี้ใช้ได้ผลดีกว่าสำหรับฉัน:sudo du -h / | grep -P '^[0-9\.]+G'
jchavannes

1
ในกรณีที่คุณมีไดเรกทอรีใหญ่จริง ๆ คุณจะต้องการ[GT]แทนที่จะเป็นเพียงG
Vitruvius

1
มีเครื่องมือที่จะตรวจสอบการใช้งานดิสก์อย่างต่อเนื่องในทุกไดเรกทอรี (ขี้เกียจ) ในระบบแฟ้มหรือไม่? มีสิ่งใดบ้างที่สามารถสตรีมไปยัง UI ของเว็บได้ ข้อมูลอ่อนนุ่มเรียลไทม์
CMCDragonkai

20
ฉันชอบที่จะใช้du -h | sort -hr | head
สิงหาคม

104

สำหรับรูปลักษณ์แรกใช้มุมมอง“ สรุป” ของdu:

du -s /*

ผลกระทบคือการพิมพ์ขนาดของแต่ละข้อโต้แย้งของมันคือทุกโฟลเดอร์รากในกรณีข้างต้น

นอกจากนี้ทั้งGNUduและBSDduสามารถจำกัดความลึกได้ ( แต่ POSIX duไม่สามารถทำได้! ):

  • GNU (Linux, …):

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

    du -d 3
    

นี้จะจำกัด การแสดงผลเอาท์พุทที่ความลึก 3 ขนาดที่คำนวณและแสดงยังคงเป็นความลึกทั้งหมดของหลักสูตร แต่อย่างไรก็ตามการจำกัดความลึกของหน้าจอจะช่วยเร่งการคำนวณให้เร็วขึ้นอย่างมาก

ตัวเลือกที่เป็นประโยชน์อีกอย่างคือ-h(ทั้งบน GNU และ BSD แต่เป็นอีกครั้งที่ไม่ได้อยู่ใน POSIX เท่านั้นdu) สำหรับเอาต์พุต "ที่มนุษย์อ่านได้" (เช่นใช้ KiB, MiB เป็นต้น )


23
ถ้าduบ่นเกี่ยวกับความ-dพยายาม--max-depth 5แทน
ReactiveRaven

8
เยี่ยมมาก ดูเหมือนถูกต้องสำหรับฉัน du -hcd 1 /directoryผมขอแนะนำให้ -h สำหรับมนุษย์ที่อ่านได้, c สำหรับผลรวมและ d สำหรับความลึก

ฉันใช้du -hd 1 <folder to inspect> | sort -hr | head
jonathanccalix

du --max-depth 5 -h /* 2>&1 | grep '[0-9\.]\+G' | sort -hr | headเพื่อกรองการอนุญาตที่ถูกปฏิเสธ
srghma

49

คุณยังสามารถเรียกใช้คำสั่งต่อไปนี้โดยใช้du:

~# du -Pshx /* 2>/dev/null
  • -sตัวเลือกสรุปและแสดงรวมสำหรับแต่ละอาร์กิวเมนต์
  • h พิมพ์ Mio, Gio ฯลฯ
  • x = อยู่ในระบบไฟล์เดียว (มีประโยชน์มาก)
  • P = ไม่ติดตาม symlinks (ซึ่งอาจทำให้ไฟล์ถูกนับเป็นสองเท่า)

ระวัง/rootไดเรกทอรีจะไม่แสดงคุณจะต้องเรียกใช้~# du -Pshx /root 2>/dev/nullเพื่อให้ได้รับ (เมื่อฉันพยายามมากไม่ชี้ให้เห็นว่า/rootไดเรกทอรีของฉันเต็มแล้ว)

แก้ไข: ตัวเลือกที่ถูกต้อง -P


2
du -Pshx .* * 2>/dev/null+ ไดเรกทอรีที่ซ่อนไว้ / ระบบ
Mykhaylo Adamovych

27

การค้นหาไฟล์ที่ใหญ่ที่สุดในระบบไฟล์มักจะใช้เวลานาน ตามคำจำกัดความคุณจะต้องสำรวจทั้งระบบไฟล์เพื่อหาไฟล์ขนาดใหญ่ ทางออกเดียวที่น่าจะทำงาน cron ในทุกระบบของคุณเพื่อให้ไฟล์พร้อมล่วงหน้า

อีกอย่างหนึ่งตัวเลือก x ของ du มีประโยชน์ในการป้องกัน du ตามจุดเมานต์ในระบบไฟล์อื่น ๆ เช่น:

du -x [path]

คำสั่งทั้งหมดที่ฉันมักเรียกใช้คือ:

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

-mวิธีการแสดงผลการค้นหาเป็นเมกะไบต์และsort -rnจะเรียงลำดับผลการค้นหาในจำนวนมากที่สุดเป็นครั้งแรก จากนั้นคุณสามารถเปิด usage.txt ในเครื่องมือแก้ไขและโฟลเดอร์ที่ใหญ่ที่สุด (เริ่มต้นด้วย /) จะอยู่ด้านบนสุด


3
ขอบคุณสำหรับการชี้ให้เห็น-xธง!
SamB

1
"การค้นหาที่ใหญ่ที่สุดใช้เวลานาน .. " -> ขึ้นอยู่กับมัน แต่มีแนวโน้มที่จะไม่เห็นด้วย: ไม่ใช้เวลานานกับระบบสาธารณูปโภคncduอย่างน้อยเร็วกว่าduหรือfind(ขึ้นอยู่กับความลึกและข้อโต้แย้ง) ..
bshea

เพราะผมไม่ต้องการที่จะเป็นรากผมต้องปรับตัวเข้ากับที่ไฟล์จะถูกเขียน:sudo du -xm / | sort -rn > ~/usage.txt
บรูโน่

20

ฉันมักจะใช้du -sm * | sort -nซึ่งจะให้รายการที่เรียงลำดับของไดเรกทอรีย่อยของไดเรกทอรีการทำงานปัจจุบันที่ใช้ไปหมดในหน่วย mebibytes

นอกจากนี้คุณยังสามารถลองใช้ Konqueror ซึ่งมีโหมด "มุมมองขนาด" ซึ่งคล้ายกับที่ WinDirStat ทำบน Windows: ช่วยให้คุณมีตัวแทน / ไฟล์ที่ใช้พื้นที่ส่วนใหญ่ของคุณ

อัปเดต:ในเวอร์ชันล่าสุดคุณสามารถใช้ไฟล์du -sh * | sort -hที่จะแสดงขนาดไฟล์ที่มนุษย์สามารถอ่านได้และเรียงลำดับตาม (ตัวเลขจะถูกต่อท้ายด้วย K, M, G, ... )

สำหรับคนที่กำลังมองหาทางเลือกอื่นกับมุมมองขนาดไฟล์ Konqueror ของ KDE3 อาจดูที่เรื่องไฟล์แม้ว่ามันจะไม่ค่อยดีนัก


นั่นเป็นเพียง Konqueror 3.x เท่านั้น - มุมมองขนาดไฟล์ยังไม่ได้รับการย้ายไปยัง KDE4

'du -sh * | sort -h 'ทำงานได้อย่างสมบูรณ์บนกล่อง Linux (Centos distro) ของฉัน ขอบคุณ!
pahariayogi

18

ฉันใช้สิ่งนี้กับผู้กระทำผิดที่เลวร้ายที่สุด 25 อันดับแรกด้านล่างไดเรกทอรีปัจจุบัน

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

คำสั่งนี้ใช้กลอุบายเพื่อค้นหาโฟลเดอร์ที่ซ่อนอยู่ซึ่งดูเหมือนว่ามีขนาดเพิ่มขึ้นเมื่อเวลาผ่านไป ขอบคุณ!
thegreendroid

นี่เป็นไบต์หรือไม่
ผู้ใช้

ตามค่าเริ่มต้นในระบบของฉัน 'du -S' จะให้เอาต์พุตที่มนุษย์อ่านได้ดี คุณได้รับจำนวนไบต์ธรรมดาสำหรับไฟล์ขนาดเล็กจากนั้นตัวเลขที่มีส่วนต่อท้าย 'KB' หรือ 'MB' สำหรับไฟล์ขนาดใหญ่
serg10

คุณสามารถทำ du -Sh เพื่อรับเอาต์พุตที่มนุษย์อ่านได้
Siddhartha

@Siddhartha หากคุณเพิ่ม-hมันอาจจะเปลี่ยนผลของsort -nrคำสั่ง - หมายถึงการเรียงลำดับจะไม่ทำงานอีกต่อไปแล้วheadคำสั่งจะไม่ทำงานอีกต่อไป
Clare Macrae

14

ที่ บริษัท ก่อนหน้านี้เราเคยมีงาน cron ที่ทำงานข้ามคืนและระบุไฟล์ใด ๆ ในขนาดที่กำหนดเช่น

ค้นหา / - ​​ขนาด + 10,000k

คุณอาจต้องการเลือกเพิ่มเติมเกี่ยวกับไดเรกทอรีที่คุณกำลังค้นหาและระวังไดรฟ์ที่ติดตั้งจากระยะไกลซึ่งอาจออฟไลน์


คุณสามารถใช้-x ตัวเลือกการค้นหาเพื่อให้แน่ใจว่าคุณไม่พบไฟล์บนอุปกรณ์อื่นนอกเหนือจากจุดเริ่มต้นของคำสั่ง find วิธีนี้ช่วยแก้ไขปัญหาไดรฟ์ที่เชื่อมต่อจากระยะไกล
rjmunro

10

ทางเลือกหนึ่งคือการเรียกใช้คำสั่ง du / sort ของคุณเป็นงาน cron และส่งออกไปยังไฟล์ดังนั้นจึงมีอยู่แล้วเมื่อคุณต้องการ


9

สำหรับ commandline ฉันคิดว่าวิธี du / sort นั้นดีที่สุด หากคุณไม่ได้อยู่บนเซิร์ฟเวอร์ที่คุณควรจะดูที่Baobab - วิเคราะห์การใช้ดิสก์ โปรแกรมนี้ยังใช้เวลาในการรัน แต่คุณสามารถค้นหาไดเรคทอรีย่อยได้ลึกลึกลงไปในตำแหน่งที่ ISO ISO Linux เก่าทั้งหมดใช้งานได้


2
นอกจากนี้ยังสามารถสแกนโฟลเดอร์ระยะไกลผ่าน SSH, FTP, SMB และ WebDAV

มันเยี่ยมมาก บางสิ่งทำงานได้ดีขึ้นด้วย GUI เพื่อแสดงภาพและนี่คือหนึ่งในนั้น! ฉันต้องการ X-server บนเซิร์ฟเวอร์ของฉันต่อไปสำหรับ CrashPlan ดังนั้นมันก็ใช้ได้เช่นกัน
timelmer

9

ฉันใช้

du -ch --max-depth=2 .

และฉันเปลี่ยนความลึกสูงสุดเพื่อให้เหมาะกับความต้องการของฉัน ตัวเลือก "c" จะพิมพ์ผลรวมสำหรับโฟลเดอร์และตัวเลือก "h" จะพิมพ์ขนาดเป็น K, M หรือ G ตามความเหมาะสม อย่างที่คนอื่น ๆ บอกไว้มันยังสแกนไดเรกทอรีทั้งหมด แต่ก็ จำกัด เอาท์พุทในวิธีที่ฉันค้นหาง่ายขึ้นเพื่อค้นหาไดเรกทอรีขนาดใหญ่


9

xdiskusageฉันกำลังจะไปที่สอง แต่ฉันจะเพิ่มในบันทึกย่อว่าจริง ๆ แล้วมันเป็นส่วนหน้า du และสามารถอ่านผลลัพธ์ du จากไฟล์ เพื่อให้คุณสามารถเรียกใช้du -ax /home > ~/home-duบนเซิร์ฟเวอร์ของคุณscpไฟล์กลับมาแล้ววิเคราะห์กราฟิก หรือท่อผ่าน ssh


6

ลองป้อนผลลัพธ์ของ du ลงในสคริปต์ awk แบบง่าย ๆ ที่ตรวจสอบเพื่อดูว่าขนาดของไดเรกทอรีใหญ่กว่าขีด จำกัด บางส่วนหรือไม่ถ้าเป็นเช่นนั้นมันจะพิมพ์ออกมา คุณไม่ต้องรอให้ต้นไม้ทั้งหมดถูกสำรวจก่อนที่คุณจะเริ่มรับข้อมูล (เทียบกับคำตอบอื่น ๆ )

ตัวอย่างเช่นต่อไปนี้แสดงไดเรกทอรีใด ๆ ที่ใช้มากกว่า 500 MB

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

หากต้องการทำให้การนำกลับมาใช้ซ้ำได้อีกคุณสามารถกำหนดฟังก์ชันใน. bashrc ของคุณ (หรือคุณสามารถทำให้เป็นสคริปต์แบบสแตนด์อโลน)

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

ดังนั้นdubig 200 ~/ดูภายใต้ไดเรกทอรีบ้าน (โดยไม่ต้องติดตามอุปกรณ์เชื่อมโยงออก) สำหรับไดเรกทอรีที่ใช้มากกว่า 200 MB


มันเป็นเรื่องที่น่าเสียดายที่ grep hacks หลายสิบตัวถูกอัปโหลดมากขึ้น โอ้และdu -kจะทำให้มันเป็นบางอย่างที่ดูจะใช้หน่วย KB
ndemou

ความคิดที่ดีเกี่ยวกับ -k แก้ไข
Mark Borgerding

เรียบง่ายและมีประสิทธิภาพยิ่งขึ้น: du -kx $2 | awk '$1>'$(($1*1024))(หากคุณระบุเฉพาะเงื่อนไขรูปแบบ aka เพื่อ awk การกระทำเริ่มต้นคือprint $0)
dave_thompson_085

จุดดี @ date_thompson_085 นั่นเป็นเรื่องจริงสำหรับ awk ทุกรุ่นที่ฉันรู้จัก (net / free-BSD & GNU) @ mark-borgerding ดังนั้นนี่หมายความว่าคุณสามารถทำให้ตัวอย่างแรกของคุณง่ายขึ้นเป็นอย่างมากdu -kx / | awk '$1 > 500000'
ndemou

@ mark-borgerding: หากคุณมี kBytes เหลืออยู่ไม่กี่ที่คุณสามารถเก็บเอาท์พุททั้งหมดของ du เช่นนี้du -kx / | tee /tmp/du.log | awk '$1 > 500000'ได้ สิ่งนี้มีประโยชน์มากเพราะหากการกรองครั้งแรกของคุณไร้ผลคุณสามารถลองใช้ค่าอื่นเช่นนี้awk '$1 > 200000' /tmp/du.logหรือตรวจสอบผลลัพธ์ที่สมบูรณ์เช่นนี้sort -nr /tmp/du.log|lessโดยไม่ต้องสแกนระบบไฟล์ทั้งหมดอีกครั้ง
ndemou

4

ฉันชอบxdiskusage แบบเก่าที่ดีเป็นทางเลือกกราฟิกสำหรับ du (1)


สังเกตคำถามในส่วนนี้: "ฉันต้องการโซลูชันบรรทัดคำสั่งที่ใช้คำสั่ง Linux มาตรฐานตั้งแต่ ... "
ndemou

4

ฉันต้องการใช้สิ่งต่อไปนี้เพื่อดูภาพรวมและดูรายละเอียด ...

cd /folder_to_check
du -shx */

สิ่งนี้จะแสดงผลลัพธ์ที่มีเอาต์พุตที่มนุษย์สามารถอ่านได้เช่น GB, MB นอกจากนี้ยังจะป้องกันการข้ามผ่านระบบไฟล์ระยะไกล -sตัวเลือกเดียวที่แสดงให้เห็นว่าบทสรุปของแต่ละโฟลเดอร์พบเพื่อให้คุณสามารถเจาะลงต่อไปถ้ามีความสนใจในรายละเอียดเพิ่มเติมของโฟลเดอร์ โปรดทราบว่าโซลูชันนี้จะแสดงเฉพาะโฟลเดอร์ดังนั้นคุณจะไม่ต้องใส่เครื่องหมาย / หลังเครื่องหมายดอกจันหากคุณต้องการไฟล์ด้วย


4

ไม่ได้กล่าวถึงที่นี่ แต่คุณควรตรวจสอบ lsof ในกรณีที่ไฟล์ถูกลบ / หยุด ฉันมีไฟล์ tmp ที่ลบ 5.9GB จาก cronjob ที่วิ่งหนี

https://serverfault.com/questions/207100/how-can-i-find-phantom-storage-usageช่วยฉันในการค้นหาเจ้าของกระบวนการของไฟล์ดังกล่าว (cron) จากนั้นฉันก็สามารถข้าม/proc/{cron id}/fd/{file handle #}ไฟล์ใน คำถามเพื่อให้เริ่มต้นการวิ่งหนีแก้ปัญหานั้นแล้ว echo ""> ไฟล์เพื่อล้างพื้นที่และปล่อยให้ cron ปิดตัวเองอย่างสง่างาม


3

จากเทอร์มินัลคุณสามารถรับการแสดงภาพการใช้ดิสก์ด้วยdutree

มันเร็วและเบามากเพราะถูกนำไปใช้ใน 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

ดูรายละเอียดการใช้งานทั้งหมดในเว็บไซต์


2

สำหรับบรรทัดคำสั่งdu (และเป็นตัวเลือก) น่าจะเป็นวิธีที่ดีที่สุด DiskHogดูเหมือนว่าจะใช้ข้อมูล du / df จากงาน cron ด้วยดังนั้นคำแนะนำของ Peterน่าจะเป็นการผสมผสานที่ดีที่สุดของความเรียบง่ายและมีประสิทธิภาพ

( FileLightและKDirStatเหมาะสำหรับ GUI)


2

คุณสามารถใช้เครื่องมือมาตรฐานเช่นfindและsortเพื่อวิเคราะห์การใช้พื้นที่ดิสก์ของคุณ

รายการไดเรกทอรีเรียงตามขนาดของพวกเขา:

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

รายการไฟล์เรียงตามขนาดของพวกเขา:

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

1
ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดในการตรวจสอบขนาดใหญ่ตามลำดับ
vimal krishna

2

อาจคุ้มค่าที่จะทราบว่าmc(Midnight Commander, ตัวจัดการไฟล์โหมดข้อความคลาสสิก) โดยค่าเริ่มต้นแสดงเฉพาะขนาดของ inodes ไดเรกทอรี (ปกติ 4096) แต่มีCtrlSpaceหรือมีเมนูเครื่องมือคุณสามารถดูพื้นที่ว่างในไดเรกทอรีที่เลือกในมนุษย์ที่อ่านได้ รูปแบบ (เช่นบางคนชอบ 103151M)

ตัวอย่างเช่นภาพด้านล่างแสดงขนาดเต็มของการกระจาย Vanilla TeX Live ปี 2018 และ 2017 ในขณะที่รุ่นปี 2015 และ 2016 แสดงขนาดของ inode เท่านั้น (แต่มีขนาดใกล้เคียงกัน 5 Gb)

นั่นคือCtrlSpaceจะต้องทำอย่างใดอย่างหนึ่งต่อหนึ่งเท่านั้นสำหรับระดับไดเรกทอรีจริง แต่มันรวดเร็วและมีประโยชน์เมื่อคุณนำทางด้วยmcบางทีคุณอาจไม่ต้องการncdu(ที่จริงแล้วเพียงเพื่อจุดประสงค์นี้จะดีกว่า) มิฉะนั้นคุณยังสามารถเรียกใช้จากncdu mcโดยไม่ต้องออกจากmcหรือเปิดขั้วอื่น

MWE



1

หากคุณรู้ว่ามีการเพิ่มไฟล์ขนาดใหญ่ในไม่กี่วันที่ผ่านมา (เช่น 3) คุณสามารถใช้คำสั่ง find ร่วมกับ " ls -ltra" เพื่อค้นหาไฟล์ที่เพิ่งเพิ่มเข้ามา:

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

สิ่งนี้จะทำให้คุณมีเพียงไฟล์ (" -type f") ไม่ใช่ไดเรกทอรี เพียงไฟล์ที่มีเวลาแก้ไขในช่วง 3 วันที่ผ่านมา (" -mtime -3") และเรียกใช้งาน " ls -lart" เทียบกับแต่ละไฟล์ที่พบ (" -exec" ส่วน)


1

เพื่อให้เข้าใจถึงการใช้พื้นที่ดิสก์ที่ไม่สมส่วนมักเป็นประโยชน์ในการเริ่มต้นที่ไดเรกทอรีรากและเดินผ่านลูกที่ใหญ่ที่สุดบางส่วน

เราสามารถทำได้โดย

  • การบันทึกผลลัพธ์ของ du ลงในไฟล์
  • grepping ผ่านผลลัพธ์ซ้ำ ๆ

นั่นคือ:

# 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

ตอนนี้สมมติว่า/ usrใหญ่เกินไป

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

ตอนนี้ถ้า/ usr / localมีขนาดใหญ่อย่างน่าสงสัย

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

และอื่น ๆ ...


1

ฉันใช้คำสั่งนี้เพื่อค้นหาไฟล์ที่มีขนาดใหญ่กว่า 100Mb:

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

0

ฉันประสบความสำเร็จในการติดตามผู้กระทำความผิดที่เลวร้ายที่สุดที่duส่งออกท่อในรูปแบบที่มนุษย์อ่านได้egrepและจับคู่กับนิพจน์ทั่วไป

ตัวอย่างเช่น:

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

ซึ่งควรให้คุณกลับทุกอย่าง 500 megs หรือสูงกว่า


อย่าใช้ grep สำหรับดำเนินการทางคณิตศาสตร์ - การใช้ awk du -k | awk '$1 > 500000'แทน: มันง่ายกว่าที่จะเข้าใจแก้ไขและแก้ไขในการลองครั้งแรก
ndemou

0

หากคุณต้องการความเร็วคุณสามารถเปิดใช้งานโควต้าในระบบไฟล์ที่คุณต้องการตรวจสอบ (คุณไม่จำเป็นต้องตั้งโควต้าสำหรับผู้ใช้ใด ๆ ) และใช้สคริปต์ที่ใช้คำสั่ง quota เพื่อแสดงรายการพื้นที่ดิสก์ที่ผู้ใช้แต่ละคนใช้ ตัวอย่างเช่น

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

จะให้การใช้งานดิสก์ในบล็อกสำหรับผู้ใช้เฉพาะบนระบบไฟล์เฉพาะ คุณควรจะสามารถตรวจสอบประเพณีได้ในเวลาไม่กี่วินาทีด้วยวิธีนี้

ในการเปิดใช้งานโควต้าคุณจะต้องเพิ่ม usrquota ลงในตัวเลือกระบบไฟล์ในไฟล์ / etc / fstab ของคุณจากนั้นอาจจะรีบูตเพื่อให้สามารถรัน quotacheck บนระบบไฟล์ที่ไม่ได้ใช้งานก่อนที่จะมีการเรียกใช้โควต้า


0

นี่คือแอพเล็ก ๆ ที่ใช้การสุ่มตัวอย่างแบบลึกเพื่อค้นหาเนื้องอกในดิสก์หรือไดเรกทอรีใด ๆ มันเดินแผนผังไดเรกทอรีสองครั้งหนึ่งครั้งเพื่อวัดและครั้งที่สองเพื่อพิมพ์เส้นทางถึง 20 ไบต์ "สุ่ม" ภายใต้ไดเรกทอรี

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;
}

ผลลัพธ์มีลักษณะเช่นนี้สำหรับไดเรกทอรี Program Files ของฉัน:

 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

มันบอกฉันว่าไดเรกทอรีเป็น 7.9gb ซึ่ง

  • ~ 15% จะเข้าสู่คอมไพเลอร์ Intel Fortran
  • ~ 15% ไปที่ VS .NET 2003
  • ~ 20% ไปที่ VS 8

มันง่ายพอที่จะถามว่าสิ่งเหล่านี้สามารถยกเลิกการโหลด

นอกจากนี้ยังบอกเกี่ยวกับประเภทไฟล์ที่กระจายไปทั่วระบบไฟล์ แต่การรวมกันเป็นตัวแทนของโอกาสในการประหยัดพื้นที่:

  • ประมาณ 15% ไปที่ไฟล์. cab และ. MSI
  • ประมาณ 10% ไปที่การบันทึกไฟล์ข้อความ

มันแสดงให้เห็นสิ่งอื่น ๆ อีกมากมายในนั้นเช่นกันซึ่งฉันอาจจะทำได้โดยไม่ต้องเช่น "SmartDevices" และ "ce" สนับสนุน (~ 15%)

ใช้เวลาเชิงเส้น แต่ไม่ต้องทำบ่อย

ตัวอย่างของสิ่งที่พบ:

  • สำเนาสำรองของ DLLs ในที่เก็บรหัสที่บันทึกไว้จำนวนมากซึ่งไม่จำเป็นต้องถูกบันทึกจริงๆ
  • สำเนาสำรองของฮาร์ดไดรฟ์ของใครบางคนบนเซิร์ฟเวอร์ภายใต้ไดเรกทอรีคลุมเครือ
  • ไฟล์อินเทอร์เน็ตชั่วคราวขนาดใหญ่
  • doc โบราณและไฟล์ช่วยเหลือที่ผ่านมาเป็นสิ่งจำเป็น

0

ฉันมีปัญหาที่คล้ายกัน แต่คำตอบในหน้านี้ไม่เพียงพอ ฉันพบว่าคำสั่งต่อไปนี้มีประโยชน์มากที่สุดสำหรับรายชื่อ:

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

ซึ่งจะแสดงให้ฉันเห็นผู้กระทำผิดที่ใหญ่ที่สุด 20 คน อย่างไรก็ตามแม้ว่าฉันจะเรียกใช้มันก็ไม่ได้แสดงให้ฉันเห็นปัญหาที่แท้จริงเพราะฉันได้ลบไฟล์ไปแล้ว จับได้ว่ามีกระบวนการยังคงทำงานที่อ้างอิงไฟล์บันทึกที่ถูกลบ ... ดังนั้นฉันต้องฆ่ากระบวนการนั้นก่อนแล้วพื้นที่ดิสก์ปรากฏเป็นอิสระ


จุดดี แต่นี่ควรเป็นความคิดเห็นและไม่ใช่คำตอบด้วยตัวเอง - คำถามนี้ทนทุกข์ทรมานจากคำตอบมากมาย
ndemou

0

คุณสามารถใช้DiskReport.netเพื่อสร้างรายงานเว็บออนไลน์ของดิสก์ทั้งหมดของคุณ

ด้วยการรันหลายครั้งมันจะแสดงกราฟประวัติสำหรับโฟลเดอร์ทั้งหมดของคุณและง่ายต่อการค้นหาสิ่งที่มีการเติบโต


เครื่องมือนี้ไม่ตรงกับสองประเด็นหลักของคำถาม "ฉันมักจะพบว่าตัวเองกำลังดิ้นรนเพื่อติดตามผู้กระทำผิดหลังจากพาร์ทิชันเต็ม" และ "ฉันต้องการโซลูชันบรรทัดคำสั่งที่อาศัยคำสั่ง Linux มาตรฐาน"
ndemou

0

มีฟรีแวร์ข้ามแพลตฟอร์มที่เรียกว่าJDiskReportซึ่งรวมถึง GUI เพื่อสำรวจสิ่งที่ทำให้เกิดพื้นที่ทั้งหมด

ภาพตัวอย่าง:
ภาพหน้าจอ JDiskReport

แน่นอนว่าคุณต้องล้างพื้นที่ด้วยตนเองเล็กน้อยก่อนที่คุณจะสามารถดาวน์โหลดและติดตั้งหรือดาวน์โหลดไปยังไดรฟ์อื่น (เช่น USB thumbdrive)


(คัดลอกมาที่นี่จากคำตอบของผู้เขียนคนเดียวกันกับคำถามที่ซ้ำกัน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.