บรรทัดคำสั่งของวิธีการค้นหาไฟล์ / ไดเรกทอรีขนาดใหญ่เพื่อลบและเพิ่มพื้นที่ว่างคืออะไร


202

กำลังมองหาชุดคำสั่งที่จะแสดงไฟล์ที่ใหญ่ที่สุดในไดรฟ์


กราฟิกจะเป็นอะไรที่ดีไหม
RolandiXor

5
ไม่วิ่งบนบรรทัดคำสั่งมากกว่า ssh
Ryan Detzel

สิ่งที่แปลกคือฉันมีเซิร์ฟเวอร์สองเครื่องที่ทำงานเหมือนกัน หนึ่งคือการใช้ดิสก์ 50% และอื่น ๆ คือ 99% ฉันไม่พบสิ่งที่ทำให้เกิดสิ่งนี้
Ryan Detzel

ดังนั้นฉันสับสนมันบอกว่าใช้ 98% กับ du แต่เมื่อฉันเรียกใช้แอพ gt5 ฉันได้รับ: grab.by/9Vv2
Ryan Detzel

คำตอบ:


275

หากคุณต้องการค้นหาไฟล์ขนาดใหญ่คุณสามารถใช้findกับ-sizeตัวเลือก คำสั่งถัดไปจะแสดงรายการไฟล์ทั้งหมดที่มีขนาดใหญ่กว่า 10MiB ( เพื่อไม่ให้สับสนกับ 10MB ):

find / -size +10M -ls

หากคุณต้องการค้นหาไฟล์ระหว่างขนาดที่กำหนดคุณสามารถรวมกับการค้นหา "ขนาดต่ำกว่า" คำสั่งถัดไปค้นหาไฟล์ระหว่าง 10MiB และ 12MiB:

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

apt-cache search 'disk usage'แสดงรายการโปรแกรมที่มีอยู่สำหรับการวิเคราะห์การใช้ดิสก์ gt5แอพลิเคชันหนึ่งที่มีลักษณะที่มีแนวโน้มมากคือ

จากคำอธิบายแพคเกจ:

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

สกรีนช็อตของ gt5

ในส่วน "แพคเกจที่เกี่ยวข้องกัน" ของGT5ncduผมพบว่า จากคำอธิบายแพคเกจ:

Ncdu เป็นโปรแกรมดู du ตาม ncurses มันมีอินเตอร์เฟสที่รวดเร็วและใช้งานง่ายผ่านยูทิลิตี้ du ที่มีชื่อเสียง อนุญาตให้เรียกดูไดเรกทอรีและแสดงเปอร์เซ็นต์การใช้ดิสก์ด้วยไลบรารี ncurses

สกรีนช็อตของ ncdu


3
ncdu นั้นรวดเร็วมากและสิ่งที่ฉันต้องการขอบคุณ! ฉันได้ลอง gt5 ด้วยเช่นกัน แต่เพิ่งยกเลิกไปเพราะมันเป็น "ความคิด" นานเกินไปโดยไม่มีข้อเสนอแนะใด ๆ
Lukas

7
อึศักดิ์สิทธิ์, ncdu น่าทึ่งขอบคุณที่แบ่งปันสิ่งที่คุณค้นพบ!
ในขณะที่ -E

ฉันจะรักถ้าncduถูกชี้ให้เห็นที่แข็งแกร่งขึ้น ฉันต้องการมันนาน ๆ ครั้งและฉันจำชื่อไม่ได้
Martin Thoma

คำสั่งที่จำได้เพียงพอต้องขอบคุณ ncdu :)
Mr Coder

1
@matt Nope รูปแบบเอาต์พุตสำหรับ-lsเอาต์พุตเป็นฮาร์ดโค้ด (ดูซอร์สโค้ดpred_flsและฟังก์ชันlist_file ) คุณสามารถลองประมาณเอาท์พุทโดยใช้-printfตัวเลือกโพสต์กระบวนการประมวลผลด้วย awk หรือใช้สิ่งที่ต้องการfind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

ฉันเพียงแค่ใช้การรวมกันของและ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

จากนั้นก็จะเป็นกรณีของการล้างและทำซ้ำ กำหนดเป้าหมายไดเรกทอรีย่อยที่คุณคิดว่าใหญ่เกินไปเรียกใช้คำสั่งสำหรับพวกเขาแล้วคุณจะพบว่าอะไรเป็นสาเหตุของปัญหา

หมายเหตุ: ผมใช้du's -xธงเพื่อให้สิ่งที่ จำกัด เพียงหนึ่งระบบแฟ้ม (ฉันมีค่อนข้างจัดซับซ้อนของสิ่งที่ข้ามติดตั้งอยู่ระหว่าง SSD และ RAID5)

หมายเหตุ 2: 2>/dev/nullเปลี่ยนเส้นทางข้อความแสดงข้อผิดพลาดไปสู่การให้อภัย หากพวกเขาไม่รบกวนคุณก็ไม่จำเป็น


1
เมื่อฉันเรียกใช้คำสั่งนี้ลงไปในไดเรกทอรีลูก จากduหน้า man: "สรุปการใช้งานดิสก์ของแต่ละไฟล์เรียกใช้ซ้ำสำหรับไดเรกทอรี"
Jamie

26

โซลูชันที่ฉันโปรดปรานใช้การผสมผสานจากคำตอบที่ดีหลายข้อ

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

du ข้อโต้แย้ง:

  • -aสำหรับไฟล์และไดเรกทอรี "all" ทิ้งไว้เพื่อเป็นเพียงไดเรกทอรี
  • -BM เพื่อส่งออกขนาดในหน่วยเมกะไบต์ (M) ขนาดบล็อก (B)
  • 2>/dev/null - ยกเว้นข้อความแสดงข้อผิดพลาด "การปฏิเสธสิทธิ์" (ขอบคุณ @Oli)

sort ข้อโต้แย้ง:

  • -n สำหรับ "ตัวเลข"
  • -r สำหรับ "ย้อนกลับ" (มากไปน้อยที่สุด)

head ข้อโต้แย้ง:

  • -n 50 สำหรับผลลัพธ์เพียง 50 อันดับแรก
  • ออกmoreหากใช้จำนวนน้อย

หมายเหตุ: คำนำหน้าด้วยsudoเพื่อรวมไดเรกทอรีที่บัญชีของคุณไม่ได้รับอนุญาตให้เข้าถึง

ตัวอย่างแสดงไฟล์และไดเรกทอรีที่ใหญ่ที่สุด 10 อันดับแรกใน / var (รวมยอดรวมทั้งหมด)

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

คำตอบของ qbi นั้นถูกต้อง แต่มันจะช้ามากเมื่อมีไฟล์จำนวนมากเนื่องจากมันจะเริ่มกระบวนการ ls ใหม่สำหรับแต่ละรายการ

รุ่นที่เร็วกว่ามากโดยใช้การค้นหาโดยไม่ใช้กระบวนการลูกวางไข่จะใช้ printf เพื่อพิมพ์ขนาดเป็นไบต์ (% s) และพา ธ (% p)

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


1
ยืนยันว่านี่เร็วกว่ามาก
คุกกี้

10

หากต้องการแสดงไดเรกทอรี top-20 ที่ใหญ่ที่สุด (เรียกซ้ำ) ในโฟลเดอร์ปัจจุบันให้ใช้หนึ่งซับต่อไปนี้:

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

หรือ (เน้น Unix เพิ่มเติม):

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

สำหรับไฟล์ที่ใหญ่ที่สุด 20 อันดับแรกในไดเรกทอรีปัจจุบัน (เรียกซ้ำ):

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

หรือขนาดที่มนุษย์อ่านได้:

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

โปรดทราบว่า-hสามารถใช้ได้สำหรับการ GNU sortเท่านั้นดังนั้นเพื่อให้การทำงานใน OSX / BSD coreutilsถูกต้องคุณได้ติดตั้งจาก PATHแล้วเพิ่มโฟลเดอร์ของคุณลงใน

ดังนั้นชื่อแทนเหล่านี้มีประโยชน์ที่จะมีในไฟล์rcของคุณ(ทุกครั้งเมื่อคุณต้องการ):

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

8

ดูเหมือนว่าเป็นแอปพลิเคชันที่สมบูรณ์แบบสำหรับfind:

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

คำสั่งนี้จะค้นหาไฟล์ทั้งหมดในไดเรกทอรี$DIRECTORYและดำเนินการls -sกับพวกเขา คำสั่งสุดท้ายพิมพ์ขนาดที่จัดสรรของไฟล์พร้อมกับชื่อไฟล์ ผลลัพธ์จะถูกจัดเรียงเป็นตัวเลขและจะแสดงห้ารายการสุดท้าย ดังนั้นคุณจะเห็นไฟล์ที่ใหญ่ที่สุด 5 ไฟล์ใน$DIRETORYหรือไดเรกทอรีย่อยใด ๆ หากคุณป้อนtail -n 1คุณจะเห็นไฟล์ที่ใหญ่ที่สุดเท่านั้น

findนอกจากนี้คุณสามารถเล่นรอบมากด้วย ตัวอย่างเช่นคุณสามารถค้นหาไฟล์ที่อายุน้อยกว่าnวัน ( -ctime -n) หรือไฟล์ที่เป็นของผู้ใช้พิเศษ ( -user johndoe)


5

เมื่อฉันต้องการเพิ่มพื้นที่ว่างบนเซิร์ฟเวอร์ฉันใช้คำสั่งนี้ ค้นหาไฟล์ทั้งหมดที่ใหญ่กว่า 50 MB และ "du -h" สร้างรายการไฟล์ที่ดีขึ้นและ "sort -n" หลังจากไพพ์ทำให้รายการเป็นตัวเลขเรียงตามขนาดไฟล์

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

1

ลอง Baobab มันจะให้ภาพรวมแบบกราฟิกของไฟล์และโฟลเดอร์คุณสามารถดูว่าพื้นที่หมูจริงอยู่ที่ไหนและลบออกได้ด้วยคลิกเดียว https://help.ubuntu.com/community/Baobab


2
ในคำถามเฉพาะนี้ OP ชอบวิธีบรรทัดคำสั่ง ดูความคิดเห็นต่อคำถาม ฉันจะแก้ไขคำถามด้วย

1

เพื่อค้นหาไฟล์ GB ทั้งหมดเช่นฉันจะใช้ du และ grep แม้ว่าวิธีการอื่น ๆ ที่กล่าวถึงที่นี่ก็ดูดีเช่นกัน

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

คุณยังสามารถจินตนาการด้วยตัวเลือก - ยกเว้นที่คุณมี


0

คุณสามารถจัดเรียงไฟล์ตามขนาด:

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

มันจะค้นหาเฉพาะไฟล์และเรียกใช้งานdu -hสำหรับทุกไฟล์ซึ่งแสดงขนาดของไฟล์ สุดท้ายเราเรียงลำดับผลลัพธ์ของfind/ duตามคอลัมน์แรก (ในรูปแบบที่มนุษย์อ่านได้)

ไฟล์ที่พิมพ์ล่าสุดเป็นไฟล์ที่มีขนาดใหญ่ที่สุด


0

คุณสามารถใช้คำสั่งเพื่อดูไฟล์ที่ใหญ่ที่สุดในขณะที่ข้ามไดเรกทอรี:

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

หากต้องการค้นหาไฟล์ทั้งหมดที่มีขนาดใหญ่กว่า 100MiB (นี่ไม่ใช่ 100MB ดูที่นี่ถ้าคุณสับสน):

find / -size +100M -ls

คำสั่งด้านล่างจะแสดงไฟล์ที่ใหญ่ที่สุด 5 ไฟล์ในโฟลเดอร์$DIRECTORY:

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

การใช้du: คำสั่งด้านล่างซึ่งใช้ du แสดงไดเรกทอรีที่มีขนาดใหญ่ที่สุด 20 โฟลเดอร์การทำงานที่บ้าน:

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

ตอนนี้เพื่อแสดงไดเรกทอรี / ไฟล์ที่ใหญ่ที่สุดรวมถึงโฟลเดอร์ย่อยให้รัน:

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

การใช้ls:

หากต้องการแสดงรายการไฟล์ที่ใหญ่ที่สุด 5 อันดับแรกในไดเรกทอรี / bin ให้ใช้คำสั่งด้านล่าง:

ls -lSh /bin | head -5

นอกจากนี้คุณยังสามารถใช้วิเคราะห์การใช้ Disk หรือBaobaoตามที่แสดงไว้ที่นี่เช่น


0

เครื่องมือที่ยอดเยี่ยมและใช้งานง่ายที่อ้างถึงในคำตอบของคำถามที่คล้ายกันคือNCurses Disk Usageเครื่องมือ:

sudo ncdu /

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