כיצד תשתמש בלינוקס למציאת הקבצים שממלאים לך את השרת?

מחבר:
בתאריך:

נתקלתי בבעיה הזו אצל לקוחות וגם באתרים שלי שאחרי כמה חודשים מקום האחסון מתמלא בלי הסבר.

כדי למצוא את הקבצים והתיקיות הגדולים הגורמים לבעיה אני מריץ כמה פקודות בטרמינל:

כיצד למצוא את הקבצים והתיקיות הגדולים ביותר על שרת לינוקס

  1. נכנס לתיקיית השורש ונבדוק איזה תיקיות משתמשות בחלק הרב ביותר של שטח האחסון:

    $ df -hT
    • df פקודה להצגת שטח האחסון
    • האופציה -h להצגה בפורמט נוח לקריאה.
    • האופציה -T להצגת הסוג type

     

    אפשר לבחור להסתיר חלק מהתוצאות. לדוגמה, ניתן להסתיר את התוצאות שהם tmpfs:

    $ df -hT -x tmpfs
    • האופציה -x על פי exclude מיועדת להסתרה של תוצאות.
  2. עדיין בתיקיית השורש של האתר נבדוק את מידת השימוש במערכת הקבצים:

    $ du -h --max-depth=1 2> /dev/null | sort -hr | head
    • du -h היא פקודה לבדיקת הרכב האחסון על מערכת הפעלה לינוקס. האופציה h בשביל הצגת משקל הקבצים בפורמט קריא. לדוגמה: 4K, 8M.

      max-depth=1 כדי להגדיר לפקודה את עומק התיקיות אליו צריך לרדת. רושמים 1 כדי שהפקודה לא תכנס לתיקיות המשנה.

      הפנייה ל-dev/null/ כדי למנוע התראות על גישה לתיקיות שאין אליהם הרשאות מתאימות.

    • צריך להעביר את הפלט של תוכנה אחת לתוכנה שנייה ואת זה עושים באמצעות פייפים.

    • נתעל את פלט הפקודה לפקודה הבאה בשרשרת הפקודות: sort -hr בשביל לסדר את התיקיות על פי משקלם עם הכבדה ביותר בראש הרשימה.

    • head בשביל להציג את 10 התיקיות הכבדות ביותר, ולא מעבר.

  3. אחרי שאתרתי תיקייה שנראית לי מנופחת במיוחד אני נכנס אליה ומריץ שוב את הפקודה לעיל לאיתור 10 התיקיות הגדולות ביותר:

    $ du -h --max-depth=1 2> /dev/null | sort -hr | head

    אני מריץ, בנוסף, פקודה לאיתור 10 הקבצים הגדולים ביותר:

    $ ls -Slh | head -n 10
    • -S בשביל מיון לפי משקל הקובץ.
    • -l בשביל פורמט הצגה מפורט.
    • -h הצגת המשקלים באופן קריא. לדוגמה: 8M או 400K.
    • מתעלים לפקודה נוספת head -n 10 כולל מספר התוצאות שיש להציג.

   

חשוב לדעת לפני שממהרים למחוק

הרבה פעמים הקבצים שממלאים לך את השרת אילו קבצי לוג שלא רצוי למחוק ואם מוחקים צריך לעשות זאת תוך שימת לב אז הגישה הזהירה משתמשת ב-logrotate לניהול קבצי הלוגים.

   

ניקוי קובץ גדול מתוכנו

כמובן שהדבר הפשוט ביותר לעשות הוא למחוק את הקבצים הגדולים החוסמים את השרת אבל לעיתים אילה עלולים להיות קבצים שהמערכת לא תשחזר באופן אוטומטי. אז דרך טובה היא לנקות את הקובץ מתוכנו במקום למחוק.

רגע לפני שמוחקים תיקייה, קובץ, תוכן נושמים עמוק, מוודאים שאנחנו אכן רוצים למחוק, ובכל מקרה תמיד כדאי שיהיה גיבוי כי כשמוחקים באמצעות פקודה לטרמינל אי אפשר אח"כ לשחזר. אז דיר-באלק!

הפקודה לניקוי הקובץ מתוכנו:

$ truncate -s 0 <file_name>
  • הפקודה גורמת לגודל הקובץ להתכווץ ל-0 בייטים תוך שהיא מעבירה את הסמן pointer לתחילת הקובץ.

 

מחיקת תיקיות

לפעמים מחיקת קבצים לא מספיקה, וצריך למחוק תיקיות. אז כמו תמיד לפני שמוחקים מגבים כי כשמוחקים מהטרמינל אין אפשרות אח"כ לשחזר.

כדי למחוק את התיקיות והקבצים בני יותר מ-60 יום מתוך התיקייה בתוכה אנו נמצאים נשתמש בפקודה שתיכף נראה אבל לפני שאציג אותה צריך לברר מה עומדים למחוק. בשביל לברר מה הקבצים הישנים והתיקיות הריקות שעלולים למחוק יש להריץ את הפקודה הבאה:

$ find . -type f -mtime +60 -exec echo {} +
$ find . -type d -empty -mtime +60 -exec echo {} +

סיימת להריץ. תנשום עמוק, תעבור על הרשימה ותוודא. ורק אחרי שגיבית את הקבצים והתיקיות, ואתה בטוח ברצונך למחוק, אתה רשאי למחוק קבצים ישנים ותיקיות ריקות עם הפקודה הבאה:

$ find . -type f -mtime +60 -exec rm -f {} +
$ find . -type d -empty -exec rmdir {} +
  • הארגומנט הראשון הוא התיקייה בתוכה רוצים לעבוד. הנקודה בגלל שרוצים לעבוד על כל מה שבתוך התיקייה.
  • הארגומנט -type f מציין שרוצים לעבוד על קבצים. אם מעוניינים למחוק תיקיות הארגומנט צריך להיות -type d.
  • הארגומנט -mtime מציין כמה ימים אחורנית. במקרה זה, 60 יום.
  • הארגומנט -exec מאפשר לשרשר פקודות, דוגמת rm בשביל המחיקה. לפקודת המחיקה העברנו את הפרמטר -f {} + בשביל קבצים או rmdir {} + בשביל תיקיות.

 

פינוי מקום אגרסיבי על מערכות הפעלה של לינוקס מבוססות Debian

* אזהרה! הצעדים הבאים לפינוי מקום אגרסיבי על דיסטרו של לינוקס מסוג Debian (דוגמת: Ubuntu, Mint) מיועדים למומחים אז לפני שנוקטים בהם יש לוודא שמבינים היטב מה שעושים ושאכן הם נחוצים. וכמו תמיד, יש לגבות את הנתונים על השרת ולהעזר בדוקמנטציה ובכל מקור אפשרי ומהיימן.

ראשית, מבררים אילו תיקיות תופסות הכי הרבה מקום:

sudo du -xh / | sort -h | tail -n 20

APT

כדי לנקות מידע שהצטבר במנהל חבילות התוכנה APT:

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove --purge -y

ניתן גם למחוק את המטמון ידנית (משתמשים מתקדמים בלבד):

sudo rm -rf /var/cache/apt/archives/*

Journal

journal הם לוגים של מנהל המערכת והשירותים, systemd. המערכת יכולה לצבור כמות גדולה שלהם כשהשטח הולך ואוזל, אפשר לקצץ:

sudo journalctl --vacuum-time=3d
  • לשמירת לוגים של 3 ימים בלבד.
sudo journalctl --vacuum-size=50M
  • להגבלת סך הלוגים ל־50MB.

ניהול kernel

kernel מהווה את ליבת מערכת ההפעלה של לינוקס. לאחר עדכוני מערכת יש לעיתים קרובות גרסאות קרנל ישנות שלא נחוצות יותר. יש להיזהר ולא למחוק את הקרנל הפעיל.

כדי לראות את הקרנלים המותקנים:

dpkg --list | grep linux-image

כדי לבדוק איזה קרנל רץ כרגע:

uname -r
  • זהירות! יש לשים לב לא למחוק את הקרנל הפעיל.

להסרת חבילות עם סטטוס rc (קבצי קונפיגורציה שנותרו לאחר הסרה):

sudo dpkg --purge $(dpkg -l | awk '/^rc/ {print $2}')

ניקוי הקאשים של APT ו-Snap

מנהלי החבילות, APT ו- Snap שומרים מטמוני הורדות. ניקוי שלהם יכול לפנות מקום מיידי.

ניקוי מטמון APT:

sudo apt-get clean
sudo rm -rf /var/cache/apt/archives/*

ניקוי מטמון Snap:

sudo rm -rf /var/lib/snapd/cache/*

הסרת גרסאות Snap ישנות

Snaps שומרות לעתים מספר גרסאות. ניתן להסיר את אלו שמסומנות כ־disabled כדי לשחרר מקום:

sudo snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do
  sudo snap remove "$snapname" --revision="$revision"
done
  • הסקריפט מקבל את כל ה־snaps המסומנים כ־disabled ומסיר כל גרסה ישנה שלהן.

אם רוצים לשמור באופן שוטף רק מספר קטן של גרסאות (למשל 2), ניתן לקבוע זאת כך:

sudo snap set system refresh.retain=2

ניקוי לוגים של Apache (אופציונלי, מומלץ לגבות קודם)

לפני שמוחקים לוגים של Apache מומלץ לגבות אותם:

sudo tar -czf ~/apache_logs_backup_$(date +%F).tar.gz /var/log/apache2

לאחר הגיבוי, הפקודות הבאות מוחקות קבצים דחוסים וגרסאות logrotate, ומאפשרות את איפוס הלוגים הנוכחיים:

sudo find /var/log/apache2 -type f -name "*.gz" -delete
sudo find /var/log/apache2 -type f -name "*.1" -delete
sudo truncate -s 0 /var/log/apache2/*.log

כדי לשחרר ידיות פתוחות לקבצים שאולי מוחזקים על ידי תהליכים, יש להפעיל את Apache מחדש:

sudo systemctl restart apache2

ניקוי שאריות לוגים במערכת

במקרים קיצוניים ניתן לשקול לנקות שאריות לוגים דחוסים וגרסאות ישנות בתיקיית /var/log (פעולה המחייבת זהירות מירבית!):

sudo journalctl --vacuum-time=1d
sudo rm -rf /var/log/*.gz
sudo rm -rf /var/log/*.[0-9]
  • פקודות אלה מוחקות קבצי לוג דחוסים וקבצי logrotate ישנים. ודא שאינך מוחק לוגים שאתה עדיין צריך.

טיפ! בדיקת שטח פנוי (לאחר הניקוי)

לאחר שביצעת את הניקויים, בדוק את השטח הפנוי במערכת:

df -h /

טיפים ואזהרות!!

  • תמיד יש לגבות קבצים חשובים לפני מחיקה, במיוחד לפני מחיקת לוגים או הסרת חבילות.
  • אלו פקודות בעלות פוטנציאל להשפעה רחבה. אם אינך בטוח, קודם נסה על סביבה שאינה פרודקשן.
  • ודא שאינך מוחק קרנל פעיל; בדוק uname -r לפני הסרת גרסאות ישנות.
  • לאחר מחיקה, בדוק קבצים שנמחקו שבכל זאת דרושים למערכת באמצעות הרצת הפקודה: sudo lsof +L1. ואם קיימים כאלה, יש לשקול לשחזר אותם.

לסיכום

הצעדים המפורטים כאן מאפשרים שחרור מקום משמעותי במערכות Debian/Ubuntu, החל מניקוי מטמוני חבילות ועד למחיקה מבוקרת של לוגים וגרסאות Snap ישנות. עם זאת, מדובר בפעולות מתקדמות. יש לבצע אותן בזהירות, לאחר גיבוי ותכנון, ולהבין את ההשלכות על עבודתה התקינה של המערכת.

 

טיפ! כלי עזר אינטראקטיבי

ncdu הוא כלי נוח ואינטרקטיבי שמאפשר לסרוק ספרייה ולהציג רשימה ממוינת לפי גודל של קבצים ותיקיות. להתקנה:

sudo apt install ncdu

מריצים:

ncdu

ורואים את רשימת הקבצים ממוינים לפי גודלם.

See the list of files sorted by size by using ncdu linux command line tool

  • השתמש במקשי החצים כדי לנוע למעלה ולמטה ברשימת הקבצים והתיקיות.
  • לחץ על "Enter" כדי להיכנס לתיקייה ועל "Q" כדי לצאת.
  • הקלק על "d" כדי למחוק קובץ או ספרייה (המערכת תבקש אישור).
  • הקלק על "i" כדי לראות מידע נוסף על קובץ או ספרייה שנבחרו.
  • ניתן לנווט או לציין כל נתיב ולהפעיל עליו את הפקודה. לדוגמה: ncdu /var/log/.

Use ncdu to delete a file / directory

    

אולי גם זה יעניין אותך:

לינוקס - צינורות והפניות

מערכת הקבצים של Linux - מה שרצית לדעת ולא העזת לשאול

ניהול הרשאות, משתמשים וקבוצות בלינוקס

5 פילטרים של לינוקס שחובה להכיר

   

לכל המדריכים בסדרת הלינוקס

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.

למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך קוראים בעברית לצ`ופצ`יק של הקומקום?