كيفية معرفة حجم الملف أو الدليل في لينكس

النقاط الرئيسية

  • يختلف الحجم الفعلي للملف، وهو عدد البايتات التي يتكون منها الملف، والحجم الفعلي على القرص الصلب، وهو عدد كتل نظام الملفات اللازمة لتخزينه، بسبب تخصيص مساحة القرص في الكتل.
  • يمكن استخدام الأمر du للتحقق من حجم الملفات والدلائل ومساحة القرص الإجمالية التي يستخدمها الدليل الحالي والدلائل الفرعية.
  • قم بتشغيل “du -h” لرؤية قائمة الملفات والمجلدات بتنسيق يمكن قراءته بواسطة الإنسان.



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


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

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

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

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


كيفية التحقق من حجم الملف

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

echo "1" > geek.txt

geek.txt في نافذة المحطة الطرفية” data-img-url=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/12/30.png” src=”https://static1.howtogeekimages.com/wordpress/wp-content/uploads/2019/12/30.png” style=”display:block;height:auto;max-width:100%;”/>

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

ls -l geek.txt

ls -l geek.txt في نافذة المحطة الطرفية

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


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

hexdump -C geek.txt

hexdump -C geek.txt في نافذة treminal

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


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

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

الآن سوف نستخدم du الأمر لمعرفة حجم الملف:

du geek.txt

قم بإنشاء ملف geek.txt في نافذة المحطة الطرفية

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


هناك كتل، ثم هناك كتل

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

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

  • حجم_الكتلة_DU
  • حجم الكتلة
  • حجم الكتلة

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

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

لاكتشاف حجم الكتلة التي يستخدمها نظام الملفات، سنستخدم tune2fs البرنامج. سوف نستخدم بعد ذلك -l (قائمة سوبر بلوك) الخيار، قم بتوجيه الإخراج من خلال grep، وثم خطوط الطباعة التي تحتوي على كلمة “كتلة”.


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

sudo tune2fs -l /dev/sda1 | grep Block

sudo tune2fs -l /dev/sda1 | grep حظر في نافذة المحطة الطرفية

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

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


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

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

استخدام du للتحقق من حجم الملف

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

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

du

دو في نافذة المحطة الطرفية


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

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

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

du ~/.cach/evolution/

دو ~/.cach/evolution/ في نافذة المحطة الطرفية

استخدام du على ملف محدد

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

du ~/.bash_aliases

دو ~/.bash_aliases في نافذة المحطة الطرفية


إعداد التقارير حول الملفات الموجودة في الدلائل

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

du -a

du -a في نافذة المحطة الطرفية

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

الإخراج من du -a في نافذة المحطة الطرفية

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

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


du -d 1

du -d 1 في نافذة المحطة الطرفية

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

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

du -d 2

du -d 2 في نافذة المحطة الطرفية

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

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

du --block=1


du --block=1 في نافذة المحطة الطرفية

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

du -m

du -m في نافذة المحطة الطرفية

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

du -h

du -h في نافذة المحطة الطرفية


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

du --apparent-size

du --apparent-size في نافذة المحطة الطرفية

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

du --apparent-size -a

du --apparent-size -a في نافذة المحطة الطرفية

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


الإخراج من du --apparent-size -a في نافذة المحطة الطرفية

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

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

du -h -s

du -h -s في نافذة المحطة الطرفية

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

du --apparent-size -s

du --apparent-size -s في نافذة المحطة الطرفية


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

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

du --time -d 2

du --time -d 2 في نافذة المحطة الطرفية

نتائج غريبة؟

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

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


أضف تعليق