บทความ

ดูขนาดโฟลเดอร์บน Linux ยังไง

ใช้ du -sh ดูขนาดรวมของโฟลเดอร์ ใช้ du -h -d 1 | sort -h ไล่หาโฟลเดอร์ย่อยที่ใหญ่ที่สุด และใช้ df -h ดูว่าดิสก์ทั้งเครื่องเหลือเท่าไหร่

เผยแพร่
อัปเดต
— เพิ่ม sort -h, df -h และวิธีไล่หาว่าอะไรทำดิสก์ VPS เต็ม
เวลาอ่าน
2 นาที
แท็ก
#Linux

บางทีเวลาทำงานบนเซิร์ฟเวอร์ เราอยากรู้ว่าแต่ละโฟลเดอร์ใช้พื้นที่ไปเท่าไหร่ เช่น ไฟล์ที่ผู้ใช้ upload เข้ามาในเว็บเรากินพื้นที่ไปแล้วเท่าไหร่ บน Linux มีคำสั่ง du (disk usage) ให้เช็คได้เลย คำสั่งในโพสต์นี้ใช้ได้กับ Ubuntu และ Linux ตัวอื่น ส่วนบน macOS ใช้ได้เกือบทั้งหมด ต่างกันแค่จุดเดียวซึ่งมีบอกไว้ด้านล่าง

ดูขนาดรวมของโฟลเดอร์ด้วย du -sh

du -sh .
  • -s (summarize) แสดงแค่ขนาดรวมของโฟลเดอร์
  • -h (human readable) แสดงขนาดแบบคนอ่านรู้เรื่อง เช่น 140M แทน 143260 ที่เป็นกิโลไบต์

ถ้าไม่ใส่ -s คำสั่งจะ list ทุกโฟลเดอร์ย่อยข้างในออกมาหมด ถ้ามีโฟลเดอร์อย่าง vendor หรือ node_modules ก็ยาวเป็นหน้า ๆ เลย 😅

ผลลัพธ์ประมาณนี้

8.1G    .

จะดูโฟลเดอร์อื่นก็ใส่ path แทน . เช่น du -sh storage/app หรือดูหลายโฟลเดอร์พร้อมกันก็ได้ เช่น du -sh storage vendor node_modules

ดูว่าโฟลเดอร์ย่อยไหนใหญ่ด้วย --max-depth

ขนาดรวมยังไม่บอกว่าโฟลเดอร์ย่อยไหนกินพื้นที่ ใส่ --max-depth (หรือ -d) เพื่อบอกว่าจะให้ list ลงไปกี่ชั้น แล้วส่งต่อให้ sort -h เรียงจากเล็กไปใหญ่ ตัวที่ใหญ่ที่สุดจะอยู่ล่างสุด อ่านง่ายกว่าเยอะ

du -h --max-depth=1 | sort -h
24K     ./routes
40K     ./tests
56K     ./misc
156K    ./config
216K    ./lang
244K    ./bootstrap
884K    ./app
7.4M    ./resources
45M     ./node_modules
104M    ./vendor
226M    ./storage
634M    ./.git
2.3G    ./public
4.9G    ./database
8.1G    .

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

ดูพื้นที่ที่เหลือทั้งดิสก์ด้วย df -h

du บอกว่าโฟลเดอร์ใช้ไปเท่าไหร่ ส่วน df บอกว่าดิสก์แต่ละลูกมีเท่าไหร่ ใช้ไปเท่าไหร่ และเหลือเท่าไหร่

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        79G   71G  8.0G  90% /
tmpfs           2.0G     0  2.0G   0% /dev/shm

ดูแถวที่ Mounted on เป็น / ถ้า Use% ขึ้นไปถึง 90% ก็ถึงเวลาไล่หาว่าอะไรกินพื้นที่แล้ว

ไล่หาว่าอะไรทำดิสก์ VPS เต็ม

เริ่มจาก root ของเครื่อง ใช้ sudo เพราะหลายโฟลเดอร์ user ทั่วไปอ่านไม่ได้

sudo du -xh -d 1 / 2>/dev/null | sort -h

-x ให้ du นับแค่ดิสก์ลูกเดียวกับ / ไม่ข้ามไปนับดิสก์ที่ mount เพิ่ม ส่วน 2>/dev/null ซ่อนข้อความ error ของโฟลเดอร์ที่อ่านไม่ได้ จากนั้นก็ไล่ลงไปทีละชั้นเหมือนเดิม

บนเซิร์ฟเวอร์ที่รันเว็บ Laravel ลองดูที่พวกนี้ก่อน

  • /var/lib/mysql ถ้าในนั้นมีไฟล์ binlog.000xxx เยอะ ๆ นั่นคือ binary log ของ MySQL อ่านวิธีลบอย่างปลอดภัยได้ใน ไฟล์ binlog ใน MySQL กินพื้นที่ดิสก์ ลบยังไง ห้ามลบไฟล์พวกนี้ด้วย rm เอง

  • storage/logs ของ Laravel ถ้าใช้ log channel แบบ single ไฟล์ laravel.log จะโตไปเรื่อย ๆ ไม่มีวันหยุด เปลี่ยนเป็นแบบ daily ใน .env ให้ Laravel ขึ้นไฟล์ใหม่ทุกวันและลบไฟล์ที่เก่ากว่าจำนวนวันที่ตั้งไว้ (เอกสาร Laravel)

    LOG_STACK=daily
    LOG_DAILY_DAYS=14
    
  • /var/log โดยเฉพาะ log ของ systemd ดูขนาดด้วย journalctl --disk-usage แล้วลดลงด้วย sudo journalctl --vacuum-size=500M

ถ้าไล่ด้วย du แล้วเหนื่อย ลองติดตั้ง ncdu (sudo apt install ncdu) แล้วสั่ง sudo ncdu -x / จะได้หน้าจอที่เรียงโฟลเดอร์จากใหญ่ไปเล็ก กดลูกศรเข้าออกโฟลเดอร์ได้เลย

ดูขนาดไฟล์ทีละไฟล์ด้วย ls -lh

du เหมาะกับโฟลเดอร์ ถ้าอยากเห็นขนาดของแต่ละไฟล์ในโฟลเดอร์ ใช้ ls -lh ใส่ -S เพิ่มให้เรียงไฟล์ใหญ่ขึ้นก่อน

ls -lhS storage/logs

อ่านต่อ

ล่าสุด

ดูทั้งหมด →