النقاط الرئيسية
- يختلف الحجم الفعلي للملف، وهو عدد البايتات التي يتكون منها الملف، والحجم الفعلي على القرص الصلب، وهو عدد كتل نظام الملفات اللازمة لتخزينه، بسبب تخصيص مساحة القرص في الكتل.
- يمكن استخدام الأمر du للتحقق من حجم الملفات والدلائل ومساحة القرص الإجمالية التي يستخدمها الدليل الحالي والدلائل الفرعية.
- قم بتشغيل “du -h” لرؤية قائمة الملفات والمجلدات بتنسيق يمكن قراءته بواسطة الإنسان.
عندما تستخدم لينكس du باستخدام الأمر، يمكنك الحصول على الاستخدام الفعلي للقرص والحجم الحقيقي للملف أو الدليل. سنشرح لك سبب اختلاف هذه القيم.
لماذا يختلف الاستخدام الفعلي للقرص والحجم الحقيقي؟
نادرًا ما يكون حجم الملف والمساحة التي يشغلها على القرص الصلب متماثلين. يتم تخصيص مساحة القرص في كتل. إذا كان الملف أصغر من كتلة، فسيتم تخصيص كتلة كاملة له لأن نظام الملفات لا يحتوي على وحدة أصغر من المساحة لاستخدامها.
ما لم يكن حجم الملف مضاعفًا دقيقًا لعدد من الكتل، فيجب دائمًا تقريب المساحة التي يستخدمها على القرص الصلب إلى الكتلة الكاملة التالية. على سبيل المثال، إذا كان حجم الملف أكبر من كتلتين ولكنه أصغر من ثلاث كتل، فسيظل يحتاج إلى ثلاث كتل من المساحة لتخزينه.
يتم استخدام مقياسين فيما يتعلق بحجم الملف. الأول هو الحجم الفعلي للملف، وهو عدد بايتات المحتوى التي يتكون منها الملف. والثاني هو الحجم الفعلي للملف على القرص الصلب. وهو عدد كتل نظام الملفات اللازمة لتخزين هذا الملف.
كيفية التحقق من حجم الملف
دعونا نلقي نظرة على مثال بسيط. سنقوم بإعادة توجيه حرف واحد إلى ملف لإنشاء ملف صغير:
echo "1" > geek.txt
الآن، سوف نستخدم القائمة ذات التنسيق الطويل، ls، للنظر في طول الملف:
ls -l geek.txt
الطول هو القيمة العددية التي تتبع dave dave الإدخالات، والتي تتكون من بايتين. لماذا تكون بايتين عندما نرسل حرفًا واحدًا فقط إلى الملف؟ دعنا نلقي نظرة على ما يحدث داخل الملف.
سوف نستخدم hexdump الأمر الذي سيعطينا عدد البايتات الدقيق ويسمح لنا بـ “رؤية” الأحرف غير القابلة للطباعة كقيم سداسية عشريةسوف نستخدم أيضًا -C خيار (canonical) لإجبار الإخراج على إظهار القيم السداسية عشرية في نص الإخراج، بالإضافة إلى ما يعادلها من أحرف أبجدية رقمية:
hexdump -C geek.txt
يُظهِر لنا الناتج أنه بدءًا من الإزاحة 00000000 في الملف، يوجد بايت يحتوي على قيمة سداسية عشرية 31، وبايت يحتوي على قيمة سداسية عشرية 0A. يصور الجزء الأيمن من الناتج هذه القيم كأحرف أبجدية رقمية، حيثما أمكن ذلك.
يتم استخدام القيمة السداسية العشرية 31 لتمثيل الرقم واحد. يتم استخدام القيمة السداسية العشرية 0A لتمثيل حرف تغذية السطر، والذي لا يمكن عرضه كحرف أبجدي رقمي، لذلك يتم عرضه كنقطة (.) بدلاً من ذلك. تتم إضافة حرف تغذية السطر بواسطة echo . افتراضيا، echoيبدأ سطرًا جديدًا بعد عرض النص الذي يحتاج إلى كتابته في نافذة المحطة الطرفية.
وهذا يتوافق مع الناتج من ls ويتفق مع طول الملف الذي يبلغ بايتين.
الآن سوف نستخدم du الأمر لمعرفة حجم الملف:
du geek.txt
يقول أن الحجم هو أربعة، ولكن أربعة من ماذا؟
هناك كتل، ثم هناك كتل
متى du يقوم البرنامج بإظهار أحجام الملفات في كتل، ويعتمد الحجم الذي يستخدمه على عدة عوامل. يمكنك تحديد حجم الكتلة الذي يجب استخدامه على سطر الأوامر. إذا لم تقم بفرض du لاستخدام حجم كتلة معين، يجب اتباع مجموعة من القواعد لتحديد الحجم الذي سيتم استخدامه.
أولاً، يتحقق مما يلي متغيرات البيئة:
- حجم_الكتلة_DU
- حجم الكتلة
- حجم الكتلة
إذا كان أي من هذه العناصر موجودًا، فسيتم تعيين حجم الكتلة، و du يتوقف الفحص. إذا لم يتم تعيين أي شيء، du يتم تعيين حجم الكتلة افتراضيًا إلى 1024 بايت. ما لم يكن هناك متغير بيئي يسمى POSIXLY_CORRECT تم ضبطه. إذا كانت هذه هي الحالة، du افتراضيًا، حجم الكتلة هو 512 بايت.
إذن، كيف يمكننا معرفة أيهما قيد الاستخدام؟ يمكنك التحقق من كل متغير بيئي لمعرفة ذلك، ولكن هناك طريقة أسرع. دعنا نقارن النتائج بحجم الكتلة التي يستخدمها نظام الملفات بدلاً من ذلك.
لاكتشاف حجم الكتلة التي يستخدمها نظام الملفات، سنستخدم tune2fs البرنامج. سوف نستخدم بعد ذلك -l (قائمة سوبر بلوك) الخيار، قم بتوجيه الإخراج من خلال grep، وثم خطوط الطباعة التي تحتوي على كلمة “كتلة”.
في هذا المثال، سنلقي نظرة على نظام الملفات الموجود على القسم الأول من القرص الصلب الأول، sda1، وسوف نحتاج إلى استخدام sudo:
sudo tune2fs -l /dev/sda1 | grep Block
حجم كتلة نظام الملفات هو 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/
استخدام du على ملف محدد
إذا أردت du للإبلاغ عن ملف معين، مرر المسار إلى هذا الملف على سطر الأوامر. يمكنك أيضًا تمرير نمط غلاف لتحديد مجموعة من الملفات، مثل *.txt:
du ~/.bash_aliases
إعداد التقارير حول الملفات الموجودة في الدلائل
أن يكون لديه du تقرير عن الملفات الموجودة في الدليل الحالي والدلائل الفرعية، استخدم -a الخيار (جميع الملفات):
du -a
بالنسبة لكل دليل، يتم الإبلاغ عن حجم كل ملف، بالإضافة إلى الإجمالي لكل دليل.
تحديد عمق شجرة الدليل
يمكنك أن تقول du لإدراج شجرة الدليل بعمق معين. للقيام بذلك، استخدم -d (العمق الأقصى) الخيار وتوفير قيمة العمق كمعلمة. لاحظ أن جميع الدلائل الفرعية يتم فحصها واستخدامها لحساب الإجماليات المبلغ عنها، ولكنها ليست كلها مدرجة. لتعيين عمق أقصى للدليل بمستوى واحد، استخدم هذا الأمر:
du -d 1
يسرد الإخراج الحجم الإجمالي لهذا الدليل الفرعي في الدليل الحالي ويوفر أيضًا الإجمالي لكل واحد.
لإدراج الدلائل على مستوى أعمق، استخدم هذا الأمر:
du -d 2
ضبط حجم الكتلة
يمكنك استخدام block خيار لتعيين حجم الكتلة لـ du للعملية الحالية. لاستخدام حجم كتلة يبلغ بايتًا واحدًا، استخدم الأمر التالي للحصول على الأحجام الدقيقة للدلائل والملفات:
du --block=1
إذا كنت تريد استخدام حجم كتلة يبلغ ميغا بايت واحد، فيمكنك استخدام -m خيار (ميغا بايت)، وهو نفس الخيار --block=1M:
du -m
إذا كنت تريد عرض الأحجام بحجم الكتلة الأكثر ملاءمة وفقًا لمساحة القرص التي تستخدمها الدلائل والملفات، فاستخدم -h خيار (قابل للقراءة من قبل الإنسان):
du -h
لرؤية الحجم الظاهري للملف بدلاً من مقدار مساحة القرص الصلب المستخدمة لتخزين الملف، استخدم --apparent-size خيار:
du --apparent-size
يمكنك دمج هذا مع -a (الكل) خيار لرؤية الحجم الظاهر لكل ملف:
du --apparent-size -a
يتم إدراج كل ملف، إلى جانب حجمه الواضح.
عرض الإجماليات فقط
إذا أردت du للإبلاغ عن الإجمالي للدليل فقط، استخدم -s (الخيار الملخص). يمكنك أيضًا دمج هذا مع خيارات أخرى، مثل -h خيار (قابل للقراءة من قبل الإنسان):
du -h -s
هنا، سوف نستخدمه مع --apparent-size خيار:
du --apparent-size -s
عرض أوقات التعديل
لرؤية وقت وتاريخ الإنشاء أو التعديل الأخير، استخدم --time خيار:
du --time -d 2
نتائج غريبة؟
إذا رأيت نتائج غريبة من du وخاصةً عند مقارنة الأحجام بإخراج أوامر أخرى، فعادةً ما يكون ذلك بسبب أحجام الكتل المختلفة التي يمكن تعيين أوامر مختلفة عليها أو تلك التي يتم تعيينها افتراضيًا عليها. وقد يكون ذلك أيضًا بسبب الاختلافات بين أحجام الملفات الحقيقية ومساحة القرص المطلوبة لتخزينها.
إذا كنت بحاجة إلى مطابقة إخراج الأوامر الأخرى، فقم بالتجربة باستخدام --block خيار في du.