כיצד להשיג את גודל הקובץ או הספריה בלינוקס

כאשר אתה משתמש duבפקודה Linux , אתה משיג את השימוש בפועל בדיסק ואת הגודל האמיתי של קובץ או ספריה. נסביר מדוע ערכים אלה אינם זהים.

שימוש בפועל בדיסק ובגודל אמיתי

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

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

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

דוגמה

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

הד "1"> geek.txt

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

ls -l geek.txt

האורך הוא הערך המספרי העוקב אחר dave dave  הערכים, שהוא שני בתים. מדוע מדובר בשני בתים כאשר שלחנו רק תו אחד לקובץ? בואו נסתכל על מה שקורה בתוך הקובץ.

נשתמש hexdumpבפקודה, שתיתן לנו ספירת בתים מדויקת ותאפשר לנו "לראות" תווים שאינם מודפסים כערכים הקסדצימאליים. נשתמש גם באפשרות -C(קנונית) כדי לאלץ את הפלט להציג ערכים הקסדצימליים בגוף הפלט, כמו גם את מקבילות התווים האלפאנומריות שלהם:

hexdump -C geek.txt

הפלט מראה לנו, שמתחיל בקיזוז 00000000 בקובץ, יש בתים שמכילים ערך הקסדצימלי של 31, וערך המכיל ערך הקסדצימלי של 0A. החלק הימני של הפלט מתאר ערכים אלה כתווים אלפאנומריים, בכל מקום אפשרי.

הערך ההקסדצימלי של 31 משמש לייצוג הספרה אחת. הערך ההקסדצימלי של 0A משמש לייצוג התו Feed Feed, שאי אפשר להציג אותו כתו אלפאנומרי, ולכן הוא מוצג כתקופה (.) במקום זאת. התו Feed Feed נוסף על ידי echo. כברירת מחדל,  echoמתחיל שורה חדשה לאחר שהיא מציגה את הטקסט שהוא צריך לכתוב לחלון המסוף.

זה מסתכם עם הפלט של  ls ומסכים עם אורך הקובץ של שני בתים.

קשורים: כיצד להשתמש בפקודה ls כדי לרשום קבצים וספריות ב- Linux

כעת נשתמש duבפקודה בכדי לבחון את גודל הקובץ:

du geek.txt

זה אומר שהגודל הוא ארבע, אבל ארבעה ממה?

יש בלוקים, ואז יש בלוקים

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

ראשית, הוא בודק את משתני הסביבה הבאים:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • גודל בלוק

אם כל אלה קיימים, גודל הבלוק מוגדר duומפסיק לבדוק. אם לא מוגדר אף אחד,  duברירת המחדל היא לגודל בלוק של 1,024 בתים. אלא אם כן, מוגדר משתנה סביבה שנקרא POSIXLY_CORRECT. אם זה המקרה, duברירת המחדל היא לגודל בלוק של 512 בתים.

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

כדי לגלות את גודל החסימה שבו מערכת הקבצים משתמשת, נשתמש tune2fsבתוכנית. לאחר מכן נשתמש באפשרות -l(רשימת סופר-בלוק), נקפיד את הפלט grepואז נדפיס שורות המכילות את המילה "חסום".

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

sudo tune2fs -l / dev / sda1 | grep Block

גודל החסימה של מערכת הקבצים הוא 4,096 בתים. אם נחלק את זה לפי התוצאה שקיבלנו מ du (ארבעה), זה מראה  du שגודל ברירת המחדל של החסימה הוא 1,024 בתים. כעת אנו יודעים כמה דברים חשובים.

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

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

לבסוף, מלבד שימוש בגדלים שונים בלוק, את התשובות מן duו tune2fs להעביר אותה המשמעות. tune2fsהתוצאה היתה גוש אחד של 4096 בייטים, ואת duהתוצאה היתה ארבע קוביות של 1024 בייטים.

באמצעות du

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

בואו נסתכל על דוגמה:

דו

הגודל מדווח על גודל החסימה המוגדר כברירת מחדל של 1,024 בתים לחסימה. עץ ספריה המשנה כולו נחצה.

שימוש duבמדריך אחר

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

du ~ / .cach / evolution /

שימוש duבקובץ ספציפי

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

du ~ / .bash_aliases

דיווח על קבצים בספריות

כדי לקבל duדיווח על הקבצים בספריה הנוכחית ובספריות המשנה הנוכחיות, השתמש באפשרות -a(כל הקבצים):

דו-א

עבור כל ספריה מדווחים על גודל כל קובץ, כמו גם על סך כל ספריה.

הגבלת עומק עץ המדריך

אתה יכול להורות duלרשום את עץ הספריות לעומק מסוים. לשם כך, השתמש באפשרות -d(עומק מרבי) וספק ערך עומק כפרמטר. שים לב שכל ספריות המשנה נסרקות ומשמשות לחישוב הסכומים המדווחים, אך לא כולם מפורטים. כדי להגדיר עומק ספרייה מרבי של רמה אחת, השתמש בפקודה זו:

du -d 1

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

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

דו-ד 2

הגדרת גודל הבלוק

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

du - block = 1

אם ברצונך להשתמש בגודל בלוק של מגה-בייט אחד, תוכל להשתמש באפשרות -m(מגה-בת), שהיא זהה ל --block=1M:

du -m

אם ברצונך שהגדלים ידווחו בגודל החסימה המתאים ביותר בהתאם לשטח הדיסק המשמש את הספריות והקבצים, השתמש באפשרות -h(קריאה לאדם):

דו -ה

כדי לראות את גודל הקובץ לכאורה ולא את כמות שטח הכונן הקשיח המשמש לאחסון הקובץ, השתמש --apparent-sizeבאפשרות:

du - גודל אבא

אתה יכול לשלב את זה עם האפשרות -a(הכל) כדי לראות את הגודל לכאורה של כל קובץ:

du - גודל -אבי

כל קובץ מופיע ברשימה, יחד עם גודלו לכאורה.

מציג סה"כ בלבד

אם ברצונך  du לדווח רק על הסכום הכולל עבור הספריה, השתמש באפשרות -s(סיכום). אתה יכול גם לשלב זאת עם אפשרויות אחרות, כגון האפשרות -h(קריאה לאדם):

דו -ה-ס

כאן נשתמש בו עם --apparent-sizeהאפשרות:

du - גודל בגודל -אבי

מציג זמני שינוי

כדי לראות את זמן היצירה או השינוי האחרון והתאריך, השתמש --timeבאפשרות:

du -time -d 2

תוצאות מוזרות?

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

אם אתה צריך להתאים לפלט של פקודות אחרות, התנסה --blockבאפשרות ב du.