كيفية الحصول على حجم ملف أو دليل في Linux

عند استخدام duأمر Linux ، تحصل على استخدام القرص الفعلي والحجم الحقيقي لملف أو دليل. سنشرح سبب اختلاف هذه القيم.

الاستخدام الفعلي للقرص والحجم الحقيقي

نادرًا ما يكون حجم الملف والمساحة التي يشغلها على محرك الأقراص الثابتة لديك متماثلين. يتم تخصيص مساحة القرص في كتل. إذا كان الملف أصغر من كتلة ، فلا يزال يتم تخصيص كتلة كاملة له لأن نظام الملفات لا يحتوي على وحدة أصغر من العقارات لاستخدامها.

ما لم يكن حجم الملف مضاعفًا دقيقًا للكتل ، يجب دائمًا تقريب المساحة التي يستخدمها على القرص الصلب إلى الكتلة الكاملة التالية. على سبيل المثال ، إذا كان الملف أكبر من كتلتين ولكنه أصغر من ثلاثة ، فلا يزال يحتاج إلى ثلاث كتل من المساحة لتخزينه.

يتم استخدام قياسين فيما يتعلق بحجم الملف. الأول هو الحجم الفعلي للملف ، وهو عدد وحدات بايت المحتوى التي يتكون منها الملف. والثاني هو الحجم الفعال للملف على القرص الصلب. هذا هو عدد كتل نظام الملفات اللازمة لتخزين هذا الملف.

مثال

لنلق نظرة على مثال بسيط. سنعيد توجيه حرف واحد إلى ملف لإنشاء ملف صغير:

صدى "1"> geek.txt

الآن ، سنستخدم قائمة التنسيقات الطويلة  ls، لإلقاء نظرة على طول الملف:

ls -l geek.txt

الطول هو القيمة الرقمية التي تلي dave dave  الإدخالات ، وهي 2 بايت. لماذا هو اثنان بايت عندما أرسلنا فقط حرفًا واحدًا إلى الملف؟ دعنا نلقي نظرة على ما يحدث داخل الملف.

سنستخدم hexdumpالأمر ، الذي سيعطينا عددًا دقيقًا من البايت ويسمح لنا "برؤية" الأحرف غير المطبوعة كقيم سداسية عشرية. سنستخدم أيضًا -Cالخيار (الكنسي) لإجبار الإخراج على إظهار القيم السداسية العشرية في نص المخرجات ، بالإضافة إلى مكافئات الأحرف الأبجدية الرقمية:

hexdump -C geek.txt

يوضح لنا الإخراج أنه بدءًا من الإزاحة 00000000 في الملف ، هناك بايت يحتوي على قيمة سداسية عشرية تبلغ 31 ، وواحدًا يحتوي على قيمة سداسية عشرية تساوي 0A. الجزء الأيمن من الإخراج يصور هذه القيم كأحرف أبجدية رقمية ، حيثما أمكن ذلك.

يتم استخدام القيمة السداسية العشرية 31 لتمثيل الرقم واحد. تُستخدم القيمة السداسية العشرية 0A لتمثيل حرف تغذية السطر ، والذي لا يمكن عرضه كحرف أبجدي رقمي ، لذلك يتم عرضه كنقطة (.) بدلاً من ذلك. تمت إضافة حرف تغذية الخط بواسطة echo. بشكل افتراضي ،  echoيبدأ سطرًا جديدًا بعد أن يعرض النص الذي يحتاج إلى كتابته في نافذة المحطة الطرفية.

يتوافق هذا مع الإخراج من  ls ويتوافق مع طول الملف البالغ 2 بايت.

ذات صلة: كيفية استخدام الأمر ls لسرد الملفات والدلائل على Linux

الآن ، سنستخدم duالأمر للنظر في حجم الملف:

du geek.txt

تقول الحجم أربعة لكن أربعة من ماذا؟

هناك كتل ، وبعد ذلك هناك كتل

عندما du يبلغ حجم الملف في كتل ، فإن الحجم الذي يستخدمه يعتمد على عدة عوامل. يمكنك تحديد حجم الكتلة الذي يجب استخدامه في سطر الأوامر. إذا لم تجبر duعلى استخدام حجم كتلة معين ، فإنه يتبع مجموعة من القواعد لتحديد أي واحدة يجب استخدامها.

أولاً ، يتحقق من متغيرات البيئة التالية:

  • DU_BLOCK_SIZE
  • مقاس الكتله
  • مقاس الكتله

في حالة وجود أي منها ، يتم تعيين حجم الكتلة ، duويتوقف عن التحقق. إذا لم يتم تعيين أي منها ، يتم تعيين  duالإعدادات الافتراضية على حجم كتلة يبلغ 1،024 بايت. ما لم POSIXLY_CORRECTيتم تعيين متغير بيئة يسمى . إذا كان الأمر كذلك ، يتم duتعيين حجم كتلة افتراضيًا على 512 بايت.

إذن ، كيف يمكننا معرفة أيهما قيد الاستخدام؟ يمكنك التحقق من كل متغير بيئة للعمل عليه ، ولكن هناك طريقة أسرع. دعنا نقارن النتائج بحجم الكتلة الذي يستخدمه نظام الملفات بدلاً من ذلك.

لاكتشاف حجم الكتلة الذي يستخدمه نظام الملفات ، سنستخدم tune2fsالبرنامج. سنستخدم بعد ذلك الخيار -l(list superblock) ، ونمرر الإخراج عبره grep، ثم نطبع الأسطر التي تحتوي على كلمة "Block".

في هذا المثال ، سنلقي نظرة على نظام الملفات على القسم الأول من القرص الصلب الأول ، sda1وسنحتاج إلى استخدام sudo:

sudo tune2fs -l / dev / sda1 | كتلة grep

حجم كتلة نظام الملفات هو 4096 بايت. إذا قسمنا ذلك على النتيجة التي حصلنا عليها من du (أربعة) ،  du فسيظهر حجم الكتلة الافتراضي هو 1،024 بايت. نحن نعرف الآن العديد من الأشياء المهمة.

أولاً ، نعلم أن أصغر قدر من عقارات نظام الملفات التي يمكن تخصيصها لتخزين ملف هو 4096 بايت. هذا يعني أنه حتى ملفنا الصغير ذو البايتين يشغل 4 كيلوبايت من مساحة القرص الصلب.

الشيء الثاني أن نأخذ في الاعتبار هو تطبيقات مخصصة للإبلاغ عن إحصاءات محرك ونظام الملفات الصعبة، مثل du، lsو  tune2fs، يمكن أن يكون لها مفاهيم مختلفة لما تعني "كتلة". و tune2fsطلب تقارير أحجام كتلة نظام الملفات الحقيقية، في حين  lsو duيمكن تكوين أو أجبروا على استخدام أحجام كتلة أخرى. لا يُقصد بهذه الأحجام أن تتعلق بحجم كتلة نظام الملفات ؛ إنها مجرد "أجزاء" تستخدمها تلك الأوامر في إخراجها.

وأخيرا، وغيرها من استخدام أحجام كتلة مختلفة، والأجوبة من duو tune2fs ينقل نفس المعنى. كانت tune2fsالنتيجة كتلة واحدة من 4096 بايت ، وكانت duالنتيجة أربع كتل من 1،024 بايت.

باستخدام du

مع عدم وجود معلمات أو خيارات لسطر الأوامر ، duيسرد إجمالي مساحة القرص التي يستخدمها الدليل الحالي وجميع الدلائل الفرعية.

دعنا نلقي نظرة على مثال:

دو

يتم الإبلاغ عن الحجم في حجم الكتلة الافتراضي وهو 1،024 بايت لكل كتلة. يتم اجتياز شجرة الدليل الفرعي بأكملها.

استخدام duفي دليل مختلف

إذا كنت تريد  du الإبلاغ عن دليل مختلف عن الدليل الحالي ، فيمكنك تمرير المسار إلى الدليل في سطر الأوامر:

du ~ / .cach / Evolution /

استخدام duفي ملف معين

إذا كنت تريد  du الإبلاغ عن ملف معين ، فمرر المسار إلى هذا الملف في سطر الأوامر. يمكنك أيضًا تمرير نمط shell إلى مجموعة محددة من الملفات ، مثل *.txt:

du ~ / .bash_aliases

الإبلاغ عن الملفات في الدلائل

للحصول على duتقرير عن الملفات الموجودة في الدليل الحالي والأدلة الفرعية ، استخدم خيار -a(جميع الملفات):

دو -a

لكل دليل ، يتم الإبلاغ عن حجم كل ملف ، بالإضافة إلى إجمالي كل دليل.

تحديد عمق شجرة الدليل

يمكنك معرفة duقائمة شجرة الدليل بعمق معين. للقيام بذلك ، استخدم خيار -d(أقصى عمق) وقم بتوفير قيمة عمق كمعامل. لاحظ أنه يتم فحص جميع الأدلة الفرعية واستخدامها لحساب الإجماليات المبلغ عنها ، ولكنها ليست كلها مدرجة. لتعيين أقصى عمق دليل بمستوى واحد ، استخدم هذا الأمر:

دو- د 1

يسرد الإخراج الحجم الإجمالي لهذا الدليل الفرعي في الدليل الحالي ويوفر أيضًا إجماليًا لكل دليل.

لسرد الدلائل بمستوى أعمق ، استخدم هذا الأمر:

دو-د 2

ضبط حجم الكتلة

يمكنك استخدام blockالخيار لتعيين حجم كتلة du للعملية الحالية. لاستخدام حجم كتلة من بايت واحد ، استخدم الأمر التالي للحصول على الأحجام الدقيقة للأدلة والملفات:

du --block = 1

إذا كنت تريد استخدام كتلة بحجم واحد ميغا ، يمكنك استخدام -mخيار (ميغا) ، وهو نفس الخيار --block=1M:

دو م

إذا كنت تريد الإبلاغ عن الأحجام بأنسب حجم للكتلة وفقًا لمساحة القرص المستخدمة بواسطة الدلائل والملفات ، فاستخدم خيار -h(يمكن للبشر قراءته):

دو -ه

لمعرفة الحجم الظاهر للملف بدلاً من مقدار مساحة القرص الصلب المستخدمة لتخزين الملف ، استخدم --apparent-sizeالخيار:

du - حجم ظاهر

يمكنك دمج هذا مع -aخيار (الكل) لرؤية الحجم الظاهر لكل ملف:

دو - حجم واضح -a

يتم سرد كل ملف ، إلى جانب حجمه الظاهر.

عرض الإجماليات فقط

إذا كنت تريد  du الإبلاغ عن إجمالي الدليل فقط ، فاستخدم -sخيار (تلخيص). يمكنك أيضًا دمج هذا مع خيارات أخرى ، مثل خيار -h(يمكن للبشر قراءته):

du -h -s

هنا ، سنستخدمه مع --apparent-sizeالخيار:

du --حجم واضح

عرض أوقات التعديل

لمشاهدة وقت وتاريخ الإنشاء أو التعديل الأخير ، استخدم --timeالخيار:

دو - الوقت - د 2

نتائج غريبة؟

إذا رأيت نتائج غريبة من du، خاصةً عندما تقوم بإحالة الأحجام إلى الإخراج من أوامر أخرى ، فعادةً ما يرجع ذلك إلى أحجام الكتل المختلفة التي يمكن تعيين أوامر مختلفة عليها أو تلك التي يتم تعيينها افتراضيًا. قد يكون أيضًا بسبب الاختلافات بين أحجام الملفات الحقيقية ومساحة القرص المطلوبة لتخزينها.

إذا كنت بحاجة إلى مطابقة إخراج الأوامر الأخرى ، فجرّب --blockالخيار في du.