กำลังมองหาชุดคำสั่งที่จะแสดงไฟล์ที่ใหญ่ที่สุดในไดรฟ์
กำลังมองหาชุดคำสั่งที่จะแสดงไฟล์ที่ใหญ่ที่สุดในไดรฟ์
คำตอบ:
หากคุณต้องการค้นหาไฟล์ขนาดใหญ่คุณสามารถใช้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 และเปอร์เซ็นต์รวม มันเป็นไปได้ที่จะนำทางและขึ้นสู่ไดเรกทอรีโดยใช้เคอร์เซอร์คีย์กับเบราว์เซอร์ที่ใช้ข้อความ (ลิงก์, ลิงก์, ลิ้งค์ ฯลฯ )

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

-lsเอาต์พุตเป็นฮาร์ดโค้ด (ดูซอร์สโค้ดpred_flsและฟังก์ชันlist_file ) คุณสามารถลองประมาณเอาท์พุทโดยใช้-printfตัวเลือกโพสต์กระบวนการประมวลผลด้วย awk หรือใช้สิ่งที่ต้องการfind ... -type f -exec ls -ldh {} \; | column -t
ฉันเพียงแค่ใช้การรวมกันของและ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เปลี่ยนเส้นทางข้อความแสดงข้อผิดพลาดไปสู่การให้อภัย หากพวกเขาไม่รบกวนคุณก็ไม่จำเป็น
duหน้า man: "สรุปการใช้งานดิสก์ของแต่ละไฟล์เรียกใช้ซ้ำสำหรับไดเรกทอรี"
โซลูชันที่ฉันโปรดปรานใช้การผสมผสานจากคำตอบที่ดีหลายข้อ
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
คำตอบของ qbi นั้นถูกต้อง แต่มันจะช้ามากเมื่อมีไฟล์จำนวนมากเนื่องจากมันจะเริ่มกระบวนการ ls ใหม่สำหรับแต่ละรายการ
รุ่นที่เร็วกว่ามากโดยใช้การค้นหาโดยไม่ใช้กระบวนการลูกวางไข่จะใช้ printf เพื่อพิมพ์ขนาดเป็นไบต์ (% s) และพา ธ (% p)
find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries
หากต้องการแสดงไดเรกทอรี 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สามารถใช้ได้สำหรับการ GNUsortเท่านั้นดังนั้นเพื่อให้การทำงานใน OSX / BSDcoreutilsถูกต้องคุณได้ติดตั้งจาก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'
ดูเหมือนว่าเป็นแอปพลิเคชันที่สมบูรณ์แบบสำหรับ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)
เมื่อฉันต้องการเพิ่มพื้นที่ว่างบนเซิร์ฟเวอร์ฉันใช้คำสั่งนี้ ค้นหาไฟล์ทั้งหมดที่ใหญ่กว่า 50 MB และ "du -h" สร้างรายการไฟล์ที่ดีขึ้นและ "sort -n" หลังจากไพพ์ทำให้รายการเป็นตัวเลขเรียงตามขนาดไฟล์
find / -size +50M -type f -exec du -h {} \; | sort -n
ลอง Baobab มันจะให้ภาพรวมแบบกราฟิกของไฟล์และโฟลเดอร์คุณสามารถดูว่าพื้นที่หมูจริงอยู่ที่ไหนและลบออกได้ด้วยคลิกเดียว https://help.ubuntu.com/community/Baobab
เพื่อค้นหาไฟล์ GB ทั้งหมดเช่นฉันจะใช้ du และ grep แม้ว่าวิธีการอื่น ๆ ที่กล่าวถึงที่นี่ก็ดูดีเช่นกัน
du -h -a /dir | grep "[0-9]G\b"
คุณยังสามารถจินตนาการด้วยตัวเลือก - ยกเว้นที่คุณมี
คุณสามารถจัดเรียงไฟล์ตามขนาด:
find . -type f -exec du -h {} \; | sort -k1 -h
มันจะค้นหาเฉพาะไฟล์และเรียกใช้งานdu -hสำหรับทุกไฟล์ซึ่งแสดงขนาดของไฟล์ สุดท้ายเราเรียงลำดับผลลัพธ์ของfind/ duตามคอลัมน์แรก (ในรูปแบบที่มนุษย์อ่านได้)
ไฟล์ที่พิมพ์ล่าสุดเป็นไฟล์ที่มีขนาดใหญ่ที่สุด
คุณสามารถใช้คำสั่งเพื่อดูไฟล์ที่ใหญ่ที่สุดในขณะที่ข้ามไดเรกทอรี:
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ตามที่แสดงไว้ที่นี่เช่น
เครื่องมือที่ยอดเยี่ยมและใช้งานง่ายที่อ้างถึงในคำตอบของคำถามที่คล้ายกันคือNCurses Disk Usageเครื่องมือ:
sudo ncdu /