linux - ماهو - unix شرح




استخدام ls لإدراج الدلائل وأحجامها الإجمالية (14)

هل من الممكن استخدام ls في Unix لسرد الحجم الإجمالي للدليل الفرعي وكافة محتوياته على عكس 4K المعتاد الذي (أفترض) هو مجرد ملف الدليل نفسه؟ أي

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

بعد تجوب صفحات الرجل سأخرج فارغة.


du -sm * | نوع -nr

الانتاج حسب الحجم


أنا دائما استخدام du -sk ( -k العلم تظهر حجم الملف بالكيلوبايت) بدلا من ذلك.


الأمر الذي تريده هو 'du -sk' du = "استخدام القرص"

يمنحك العلم -k الإخراج بالكيلو بايت ، بدلاً من الثنائي الافتراضي لقرص القرص (كتل 512 بايت).

ستحدد علامة -s فقط الأشياء الموجودة في دليل المستوى الأعلى (أي ، الدليل الحالي ، بشكل افتراضي ، أو الدليل المحدد في سطر الأوامر). من الغريب أن دو لديها سلوك معاكس لـ ls في هذا الصدد. بشكل افتراضي ، ستقوم du بشكل متكرر بمنحك استخدام القرص لكل دليل فرعي. في المقابل ، سوف تعطي ls فقط ملفات القائمة في الدليل المحدد. (ls -R يمنحك السلوك العودي).


انظر إلى الأمر du لهذا


حسنًا ، أفضل طريقة هي استخدام هذا الأمر:

du -h -x / | sort -hr >> /home/log_size.txt

ثم ستتمكن من الحصول على جميع مجلدات الأحجام على كل خادمك. من السهل مساعدتك في العثور على أكبر الأحجام.


دو -sch * في نفس الدليل.


لسرد أكبر دليل من الدليل الحالي بتنسيق مقروء بشري:

du -sh * | sort -hr

أفضل طريقة لتقييد عدد الصفوف يمكن أن يكون

du -sh * | sort -hr | head -n10

حيث يمكنك زيادة لاحقة -n flag لتقييد عدد الصفوف المدرجة

عينة:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

يجعلها أكثر ملاءمة للقراءة :)


لعرض ملفات الدليل الحالي والأحجام الفرعية بشكل متكرر:

du -h .

لعرض معلومات الحجم نفسها ولكن دون طباعة أدلةها الفرعية بشكل متكرر (والتي يمكن أن تكون قائمة ضخمة) ، ما عليك سوى استخدام خيار - max-deep :

du -h --max-depth=1 .

لفترة من الوقت ، استخدمت Nautilus (على سطح مكتب Gnome على RHEL 6.0) لحذف الملفات على مجلد منزلي بدلاً من استخدام الأمر rm في bash. ونتيجة لذلك ، فإن الحجم الإجمالي الذي تظهره

du -sh

لم تتطابق مع مجموع استخدام القرص لكل دليل فرعي ، عندما استخدمت

du -sh *

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


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

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

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"

هذه كلها اقتراحات رائعة ، ولكن تلك التي استخدمها هي:

du -ksh * | sort -n -r

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

الجانب السلبي الوحيد لهذا الأمر هو أن الكمبيوتر لا يعرف أن Gigabyte أكبر من Megabyte لذا سيتم الترتيب حسب الأرقام فقط وستجد في كثير من الأحيان قوائم مثل:

120K
12M
4G

فقط كن حذرا لإلقاء نظرة على الوحدة.

يعمل هذا الأمر أيضًا على نظام Mac (بينما لا يعمل sort -h على سبيل المثال).


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

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


du -S

دو لديه خيار آخر مفيد: -S, --separate-dirs يخبر du لا يشمل حجم الأدلة الفرعية - مفيد في بعض المناسبات.

المثال 1 - يعرض فقط أحجام الملفات في الدليل:

du -Sh  * 
3,1G    10/CR2
280M    10

المثال 2 - يوضح أحجام الملفات والدلائل الفرعية في الدليل:

du -h  * 
3,1G    10/CR2 
3,4G    10

du -h --max-depth=1 . | sort -n -r




unix