یک پنجره ترمینال لینوکس در لپ تاپ به سبک اوبونتو.
Fatmawati Achmad Zaenuri / Shutterstock

وقتی از دستور [Linux] du استفاده می کنید ، هم استفاده واقعی دیسک و هم اندازه واقعی را بدست می آورید. از یک پرونده یا فهرست. ما توضیح خواهیم داد که چرا این مقادیر یکسان نیستند.

استفاده واقعی دیسک و اندازه واقعی

اندازه یک پرونده و فضای موجود در دیسک سخت شما به ندرت یکسان هستند. فضای دیسک به صورت بلوک اختصاص داده می شود. اگر یک پرونده کوچکتر از یک بلوک باشد ، هنوز یک بلوک کامل به آن اختصاص داده می شود زیرا سیستم پرونده واحدی کوچکتر از املاک و مستغلات برای استفاده ندارد.

مگر اینکه اندازه یک پرونده تعداد زیادی بلوک باشد ، فضا استفاده از آن بر روی دیسک سخت همیشه باید تا کل بلوک بعدی گرد شود. به عنوان مثال ، اگر یک پرونده بزرگتر از دو بلوک است اما از سه اندازه کوچکتر است ، برای ذخیره کردن آن هنوز سه بلوک از فضای لازم طول می کشد.

دو اندازه گیری در رابطه با اندازه پرونده استفاده می شود. اولین مورد اندازه واقعی پرونده است ، یعنی تعداد بایت های محتوا که پرونده را تشکیل می دهند. مورد دوم اندازه موثر پرونده روی دیسک سخت است. این تعداد بلوک سیستم فایل برای ذخیره آن پرونده ضروری است.

یک مثال

بیایید به یک مثال ساده نگاه کنیم. برای ایجاد یک پرونده کوچک ، یک کاراکتر واحد را به یک فایل تغییر مسیر خواهیم داد:

 echo "1"> geek.txt 

 دستور geek.txt "در یک پنجره ترمینال." width = "646" height = "57" src = "/ pagespeed_static / 1.JiBnMqyl6S.gif" onload = "pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (این)؛" onerror = "this.onerror = null؛ pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this)؛" />

اکنون ، ما از فهرست فرمت های طولانی ، ls استفاده می کنیم تا به طول پرونده نگاه کنیم:

 ls -l geek.txt 

 طول

طول عددی است که از ورودی های dave dave پیروی می کند ، که دو بایت است. چرا وقتی فقط یک کاراکتر را به پرونده ارسال می کنیم ، دو بایت است؟ بیایید نگاهی به آنچه در پرونده رخ می دهد نگاهی بیندازیم.

ما از دستور hexdump استفاده خواهیم کرد که یک تعداد بایت دقیق به ما می دهد و به ما امکان می دهد تا شخصیت های غیر چاپی را به عنوان مقادیر شش ضلعی "ببینیم". . ما همچنین از گزینه -C (canonical) استفاده خواهیم کرد تا خروجی را مجبور کنیم مقادیر شش ضلعی در بدن خروجی را نشان دهد ، و همچنین معادل های آنها را با مشخصات alphanumeric آنها:

 hexdump -C geek.txt 

 خروجی

خروجی به ما نشان می دهد که ، با شروع از جبران 00000000 در پرونده ، یک بایت وجود دارد که دارای مقدار شش ضلعی 31 و یک مورد است که دارای مقدار شش ضلعی 0A است. قسمت سمت راست خروجی ، این مقادیر را به عنوان شخصیت های الفبایی ، هر جا که ممکن باشد نشان می دهد.

از مقدار شش ضلعی 31 برای نشان دادن رقم استفاده می شود. مقدار hexadecimal 0A برای نشان دادن شخصیت Line Feed استفاده می شود ، که نمی تواند به عنوان یک شخصیت alphanumeric نشان داده شود ، بنابراین به جای آن یک دوره (.) نشان داده می شود. کاراکتر Line Feed توسط echo اضافه شده است. به طور پیش فرض ، echo بعد از نمایش متن مورد نیاز برای نوشتن در پنجره ترمینال ، خط جدیدی را شروع می کند.

این بلندای با خروجی از ls است و با طول پرونده موافق است. از دو بایت.

مرتبط: نحوه استفاده از دستور ls برای لیست کردن پرونده ها و دایرکتوری ها در لینوکس

اکنون ، ما از du استفاده خواهیم کرد ] دستور برای بررسی اندازه پرونده:

 du geek.txt 

 [

می گوید اندازه چهار است ، اما چهار از چه؟

Blocks وجود دارد ، و سپس Blocks وجود دارد

هنگامی که du اندازه پرونده ها را در بلوک گزارش می دهد ، اندازه استفاده شده به چندین عامل بستگی دارد. می توانید اندازه بلوک مورد استفاده در خط فرمان را مشخص کنید. اگر مجبور نشوید از du برای استفاده از اندازه بلوک خاص استفاده کنید ، مجموعه ای از قوانین را دنبال می کند تا تصمیم بگیرد از کدام یک استفاده کند.

ابتدا متغیرهای محیط زیر را بررسی می کند:

  • DU_BLOCK_SIZE [19659032] BLOCK_SIZE
  • BLOCKSIZE

اگر وجود هر یک از اینها باشد ، اندازه بلوک تنظیم شده است ، و du چک را متوقف می کند. اگر هیچ کدام تنظیم نشده باشند ، du پیش فرض اندازه بلوک 1.024 بایت را می دهد. مگر اینکه ، متغیر محیطی به نام POSIXLY_CORRECT تنظیم شده باشد. اگر اینگونه باشد ، du به اندازه 512 بایت پیش فرض است.

بنابراین ، چگونه می توانیم دریابیم که کدام یک در حال استفاده است؟ می توانید هر متغیر محیط را بررسی کنید تا آن را عملی کنید ، اما یک روش سریعتر وجود دارد. بگذارید نتایج را با اندازه بلوکی که سیستم پرونده از آن استفاده می کند ، مقایسه کنیم.

برای کشف اندازه بلاک سیستم فایل استفاده می کند ، ما از [ tune2fs استفاده خواهیم کرد. سپس از گزینه -l (لیست superblock) استفاده خواهیم کرد ، خروجی را از طریق grep لوله گذاری می کنیم ، و سپس خطوطی را چاپ می کنیم که حاوی کلمه "Block" است.

در این مثال ، ما به فایل سیستم در اولین بخش از هارد دیسک اول ، sda1 خواهیم پرداخت ، و ما باید از sudo استفاده کنیم:

 sudo tune2fs -l / dev / sda1 | grep Block 

اندازه بلوک سیستم فایل 4،096 بایت است. اگر این نتیجه را با نتیجه بدست آمده از du (چهار) تقسیم کنیم ، اندازه بلوک پیش فرض du را نشان می دهد 1.024 بایت. اکنون چندین نکته مهم می دانیم.

اول ، ما می دانیم که کمترین مقدار املاک و مستغلات سیستم فایل که می تواند به ذخیره یک فایل اختصاص یابد ، 4.096 بایت است. این بدان معناست که حتی پرونده کوچک و دو بایت ما 4 کیلوبایت فضای هارد دیسک را در اختیار دارد.

نکته اصلی که باید در نظر داشته باشید برنامه هایی است که برای گزارش دادن در مورد هارد دیسک و آمار سیستم فایل ها اختصاص داده شده است ، مانند du ، ls و tune2fs ، می توانند برداشت های مختلفی از معنای «بلوک» داشته باشند. برنامه tune2fs اندازه بلوک فایل سیستم واقعی را گزارش می کند ، در حالی که ls و du پیکربندی یا مجبور به استفاده از سایر اندازه های بلوک هستند. این اندازه های بلوک در نظر گرفته شده برای اندازه بلوک سیستم پرونده نیست. آنها فقط "قطعات" آن دسته از دستورات را در خروجی خود استفاده می کنند.

سرانجام ، به غیر از استفاده از اندازه های مختلف بلوک ، پاسخ های du و tune2fs همان معنی را منتقل می کنند. نتیجه tune2fs یک بلوک 4،096 بایت بود و نتیجه du چهار بلوک از 1.024 بایت بود.

با استفاده از du

بدون فرمان پارامترها یا گزینه های خط ، du لیست کل فضای دیسک را که دایرکتوری فعلی است و همه زیرشاخه ها از آن استفاده می کنند ، ذکر می کند.

بیایید یک مثال بزنیم:

 du 

] [19659006] اندازه در اندازه بلوک پیش فرض 1،024 بایت در هر بلوک گزارش شده است. [کلیهدرختفرعیهدایتشدهاست

با استفاده از du در دایرکتوری های مختلف

اگر می خواهید du را برای گزارش در دایرکتوری های مختلف از فعلی ، می توانید ارسال کنید. مسیر دایرکتوری در خط فرمان:

 du ~ / .cach /olution / 

 The

با استفاده از du بر روی یک پرونده خاص

اگر می خواهید ] du برای گزارش در یک پرونده خاص ، مسیر آن پرونده را در خط فرمان عبور دهید. همچنین می توانید یک الگوی پوسته را به گروهی از پرونده ها منتقل کنید ، مانند *. txt :

 du ~ / .bash_aliases 

 [

گزارش در پرونده ها در دایرکتوری ها

برای گزارش du گزارش در پرونده های موجود در دایرکتوری فعلی و فرعی ، از گزینه -a (همه پرونده ها) استفاده کنید:

 du -a 

برای هر دایرکتوری ، اندازه هر پرونده گزارش شده است ، و همچنین کل برای هر دایرکتوری.

 خروجی از

محدود کردن عمق درخت فهرست راهنما

به du بگویید تا درخت فهرست را در عمق خاصی لیست کنید. برای این کار از گزینه -d (حداکثر عمق) استفاده کرده و مقدار عمق را به عنوان پارامتر ارائه دهید. توجه داشته باشید که همه زیرشاخه ها اسکن شده و برای محاسبه جمع گزارش شده استفاده می شوند ، اما همه آنها ذکر نشده اند. برای تنظیم حداکثر عمق دایرکتوری یک سطح ، از این دستور استفاده کنید:

 du -d 1 

خروجی لیست کل آن فرعی را در دایرکتوری فعلی لیست می کند و همچنین کل را برای

برای لیست دایرکتوری ها یک سطح عمیق تر ، از این دستور استفاده کنید:

 du -d 2 

 The

تنظیم اندازه بلوک

می توانید از ] استفاده کنید [گزینه برای اندازه گیری بلوک برای du برای عملکرد فعلی. برای استفاده از اندازه بلوک یک بایت ، از دستور زیر استفاده کنید تا اندازه دقیق دایرکتوری ها و پرونده ها را بدست آورید:

 du --block = 1 

اگر می خواهید از یک بلوک استفاده کنید اندازه یک مگابایت ، می توانید از گزینه -m (megabyte) استفاده کنید ، که همان - block = 1M :

 du -m 

اگر می خواهید اندازه های مناسب در اندازه بلوک مطابق با فضای دیسک مورد استفاده دایرکتوری ها و پرونده ها گزارش شده ، از گزینه -h (قابل خواندن توسط انسان) استفاده کنید:

 du -h 

برای دیدن اندازه ظاهری پرونده به جای مقدار فضای هارد دیسک استفاده شده برای ذخیره پرونده ، از گزینه - ظاهری با اندازه استفاده کنید: [19659010] du –apparent-size

 [

می توانید این را با گزینه -a (همه) ترکیب کنید تا اندازه ظاهری هر پرونده را ببینید:

 du - -apparent-size -a 

 [

هر f ile به همراه اندازه ظاهری ذکر شده است.

 خروجی از

نمایش فقط Total ها

اگر می خواهید du فقط گزارش ها را برای دایرکتوری ، از گزینه -s (خلاصه) استفاده کنید. شما همچنین می توانید این را با گزینه های دیگر ترکیب کنید ، مانند گزینه -h (قابل خواندن توسط انسان):

 du -h -s 

در اینجا ، ما از آن با گزینه - ظاهری استفاده کنید:

 du --apparent-size -s 

 The

نمایش بارهای اصلاح

برای دیدن یا خلق آخرین زمان و تاریخ اصلاح ، از گزینه - time استفاده کنید:

 du --time -d 2 

نتایج عجیب؟

اگر می بینید نتایج عجیب از du ، به خصوص هنگامی که اندازه های متفاوتی را به خروجی سایر دستورات نشان می دهید ، معمولاً به دلیل اندازه بلوک های مختلفی است که می توان دستورات مختلف را تنظیم کرد یا مواردی که پیش فرض آنها را تنظیم می کند. همچنین می تواند به دلیل تفاوت بین اندازه واقعی فایل و فضای دیسک مورد نیاز برای ذخیره آنها باشد.

اگر شما نیاز به مطابقت با خروجی سایر دستورات دارید ، با گزینه - block در du .