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