كيفية الحصول على حجم ملف أو دليل في 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
.