مشاهده میزان فضای هارد دیسک در ترمینال لینوکس
دستورات df و du از طریق پوسته Bash، اقدام به گزارشگیری از میزان فضای دیسک در سیستم عاملهایی مانند لینوکس، macOS و سایر سیستمعاملهای مشابه مبتنی بر یونیکس میکنند. در واقع این دستورها امکان شناسایی آسان مقدار مصرف شده فضای هارد دیسک و همینطور میزان فضای آزاد آن را ارائه میکنند.
مشاهده فضای کل، آزاد و مصرف شده هارد دیسک
Bash دستورهای مفیدی در ارتباط با فضای دیسک ارائه کرده است. برای این که بدانید چه مقدار از فضای دیسک را در اختیار دارید (چه مقدار فضا آزاد است)، میتوانید از دستور df استفاده کنید. df اختصاری برای عبارت disk filesystems است، اما گاهی اوقات disk free نیز نامیده میشود. از سوی دیگر برای این که بدانید چه مقدار از فضای دیسک مصرف شده است، میتوانید از دستور du استفاده کنید که اختصاری برای عبارت disk usage است.
برای شروع، دستور df را در پنجره ترمینال Bash وارد کنید. در این مرحله خروجی زیادی را شبیه به تصویر زیر مشاهده خواهید کرد. استفاده از df بدون هر گونه گزینهای فضای موجود و استفاده شده را برای همه فایلسیستمهای mount شده نمایش میدهد. در وهله نخست، به نظر میرسد که بررسی این موارد دشوار است، اما درک آن کاملاً آسان است.
df
هر خط از تصویر فوق از شش ستون تشکیل یافته است:
- Fileystem: نام فایلسیستم.
- 1K-Blocks: تعداد بلوکهای 1 کیلوبایتی که روی این فایلسیستم موجود هستند.
- Used: تعداد بلوکهای 1 کیلوبایتی که روی این فایلسیستم استفاده شدهاند.
- Available: تعداد بلوکهای 1 کیلوبایتی که در این فایلسیستم استفاده نشدهاند.
- Use%: مقدار فضای مصرف شده در این فایلسیستم که به صورت درصد ارائه شده است.
- File: نام فایلسیستم در صورتی که در خط فرمان آمده باشد.
- Mounted on: نقطه mount فایلسیستم را نشان میدهد.
امکان تعویض شماره بلوکهای 1 کیلوبایتی با خروجی مفیدتری وجود دارد و به این منظور باید از گزینه B– که اختصاری برای «اندازه بلوک» (Block Size) است، استفاده کنید. برای بهرهگیری از این گزینه باید پس از دستور df یک فاصله و سپس گزینه B– را به همراه یکی از حروف K ،M ،G ،T ،P ،E ،Z یا Y وارد کنید. این حروف به ترتیب نشان دهنده کیلو، مگا، گیگا، ترا، پتا، اگزا، زتا، و یوتا بوده و همگی در مقیاس 1024 هستند.
برای نمونه به منظور دیدن مصرف دیسک به صورت مگابایت باید از دستور زیر استفاده کنید. توجه داشته باشید که هیچ فاصلهای بین B و M وجود ندارد:
df –BM
مناسبسازی خوانش
گزینه h– که اختصاری برای عبارت «human readable» (مناسب خوانش انسان) است، باعث میشود که دستور df به روشی کاملاً مناسب اندازه هر فایلسیستم را بیان کند. در خروجی بعدی دقت کنید که اینها فایلسیستمهایی با اندازههای گیگابایت، مگابایت و حتی کیلوبایت هستند:
df –h
اگر لازم باشد اطلاعات نمایش یافته را برحسب تعداد inode-ها ببینیم، باید از گزینه i– استفاده کنیم. منظور از inode ساختار دادهای است که از سوی فایلسیستم لینوکس برای توصیف فایلها و ذخیرهسازی فراداده در مورد آنها استفاده میشود. روی لینوکس inode-ها دادههایی مانند نام، تاریخ تغییر، موقعیت هارد درایو و موارد مشابه را برای هر فایل و دایرکتوری نگهداری میکند. این وضعیت برای اغلب افراد چندان مفید نیست؛ اما مدیران سیستم باید گاهی اوقات به این نوع اطلاعات رجوع کنند.
df –i
df به طور معمول اطلاعاتی در مورد همه فایلسیستمهای mount شده ارائه میکند؛ مگر این که طور دیگری تنظیم شده باشد. این وضعیت ممکن است منجر به نمایش خروجی زیاد و درهمریختهای شود. برای نمونه مدخلهای dev/loop/ در فهرستها، شبیه فایلسیستمهایی هستند که امکان میدهند فایلها مانند پارتیشن به صورت مجازی mount شوند. اگر از روش snap اوبونتو برای نصب اپلیکیشنها استفاده میکنید، ممکن است تعداد زیادی از این موارد داشته باشید. فضای روی این موارد همواره 0 خواهد بود، زیرا آنها عملاً فایلسیستم نیستند و از این رو ما هم نیازی نداریم آنها را ببینیم.
فایلسیستمهای با نوع خاص
میتوان به دستور df اعلام کرد که فایلسیستمهای با نوع خاص را در فهرست ارائه نکند. به این منظور باید نوع فایل سیستمی که میخواهیم از فهرست حذف کنیم را بدانیم. گزینه T– این اطلاعات را در اختیار ما قرار میدهد. در این گزینه از df میخواهیم که نوع فایلسیستم را نیز در خروجی نمایش دهد.
df –T
مدخلهای dev/loop/ همگی فایلسیستمهای squashfs هستند. ما میتوانیم آنها را با دستور زیر از فهرست استثنا کنیم:
df -x squashfs
بدین ترتیب خروجی ما قابلیت مدیریت بیشتری پیدا میکند. برای دریافت همه موارد میتوان از گزینه total– استفاده کرد:
df -x squashfs –total
میتوان از df خواست که فایلسیستمهایی را که از نوع خاصی هستند با استفاده از گزینه t– (نوع یا type) در فهرست بگنجاند.
df -t ext4
اگر بخواهیم اندازههای یک مجموعه از فایلسیستمها را ببینیم، میتوانیم آنها را با نام ذکر کنیم. نامهای درایو در لینوکس برحسب حروف الفبا هستند به این صورت که نخستین درایو dev/sda/ است، دومین درایو dev/sdb/ و همین طور تا آخر. پارتیشنها شمارهگذاری شدهاند. بنابراین dev/sda1/ نخستین پارتیشن روی درایو dev/sda/ است. ما با ارسال نام فایلسیستم به عنوان یک پارامتر دستور، از دستور df میخواهیم که اطلاعاتی در مورد فایلسیستم خاص بازگشت دهد. در ادامه نخستین پارتیشن هارد درایو اول را بررسی میکنیم:
df /dev/sda1
کاراکترهای wildcard
دقت کنید که میتوانید از کاراکترهای wildcard در نام فایلسیستم استفاده کنید. در این حالت * نشان دهنده مجموعهای از کاراکترها و ? نشان دهنده یک کاراکتر منفرد است. بنابراین برای بررسی همه پارتیشنها روی درایو اول میتوان از دستور زیر استفاده کرد:
df /dev/sda*
ما میتوانیم از df بخواهیم که یک مجموعه از فایلسیستمهای دارای نام را گزارش کند. در مثال زیر اندازههای فایلسیستمهای dev/ و run/ را درخواست میکنیم و البته مجموع آنها را میخواهیم.
df -h --total /dev /run
سفارشیسازی بیشتر
برای سفارشیسازی بیشتر میتوانیم به دستور df بگوییم که کدام ستونها باید استثنا شوند. به این منظور از گزینه output– استفاده میکنیم و فهرستی جدا شده با ویرگول ارائه میکنیم که نیازمند نام ستونها است. باید مطمئن شویم که هیچ کاراکتر Space در این فهرست جدا شده با ویرگول وجود ندارد.
- source: نام فایل سیستم.
- fstype: نوع فایل سیستم.
- itotal: اندازه فایلسیستم در inode-ها.
- iused– فضای مورد استفاده فایلسیستم در inode-ها.
- iavail: فضای موجود فایلسیستم در inode-ها.
- ipcent: فضای مورد استفاده روی فایلسیستم در inode-ها به صورت درصد.
- size: اندازه فایلسیستم که به صورت پیشفرض در بلوکهای 1 کیلوبایتی است.
- used: فضای مورد استفاده روی فایلسیستم که به صورت پیشفرض در بلوکهای 1 کیلوبایتی است.
- avail: فضای موجود روی فایلسیستم که به صورت پیشفرض در بلوکهای 1 کیلوبایتی است.
- pcent: درصد فضای مورد استفاده روی فایلسیستم در inode-ها که به صورت پیشفرض در بلوکهای 1 کیلوبایتی است.
- file: نام فایلسیستم در صورتی که روی خط فرمان ذکر شده باشد.
- target: نقطه mount برای فایلسیستم مربوطه.
در ادامه از دستور df میخواهیم که گزارشی در مورد پارتیشن نخست روی درایو اول با اعداد قابل خوانش از سوی انسان و همراه با منبع ستونها، نوع فایل، اندازه، فضای مورد استفاده، فضای موجود و درصد ارائه کند.
df -h /dev/sda1 --output=source،fstype،size،used،avail،pcent
دستورهای طولانی را میتوان به سادگی تبدیل به اسامی مستعار کرد. برای نمونه میتوان با وارد کردن دستور زیر و زدن کلید Enter یک اسم مستعار به صورت dfc (اختصاری برای df custom) ایجاد کرد:
alias dfc="df -h /dev/sda1 --output=source،fstype،size،used،avail،pcent"
اینک با وارد کردن dfc و زدن کلید اینتر همان تأثیری را که از وارد کردن دستور طولانی اول به دست میآید در اختیار خواهیم داشت. برای این که این اسم مستعار دائمی شود باید آن را به فایل bashrc. یا bash_aliases. اضافه کنیم.
دریافت خروجی کامل
تا به اینجا با روشهای مختلف خروجی گرفتن از دستور df جهت به دست آوردن اطلاعات منطبق با نیازهایمان آشنا شدیم. اگر میخواهید رویکرد معکوس حالت فوق را داشته باشید، یعنی همه اطلاعات ممکن را در اختیار داشته باشید، میتوانید از گزینه a– و گزینه output– به صورت زیر استفاده کنید. گزینه a– از دستور df میخواهد که همه فایلسیستمها را در خروجی بگنجاند و همچنین استفاده از گزینه output– بدون فهرستی از موارد جدا شده با ویرگول از ستونها موجب میشود که دستور df همه ستونها را در خروجی خود بگنجاند.
df -a –output
pipe کردن خروجی دستور df از طریق دستور less یک روش راحت برای بازبینی مقادیر زیادی از خروجیها در این مورد است:
df -a --output | less
چه چیزی فضای هارد دیسک را اشغال کرده است؟
در ادامه با روشهای بررسی و یافتن فایلهایی که فضای دیسک را اشغال کردهاند آشنا میشویم. کار خود را با یکی از دستورهای df آغاز میکنیم:
df -h -t ext4
میبینیم که 78% از فضای دیسک روی پارتیشن اول از هارد درایو اول اشغال شده است. میتوانیم از دستور du استفاده کنیم تا ببینیم کدام پوشهها، اغلب دادهها را نگهداری میکنند. صادر کردن دستور du بدون هیچ گزینه موجب نمایش فهرستی از دایرکتوریها و ساب-دایرکتوریهای زیر آن دایرکتوری میشود که دستور du رویش صادر شده است. اگر این دستور روی پوشه home اجرا شود، فهرستی که در خروجی ارائه میشود بسیار طولانی خواهد بود.
du
قالببندی خروجی
قالببندی خروجی بسیار ساده است. هر خط اندازه و نام یک دایرکتوری را نمایش میدهد. به صورت پیشفرض اندازه در بلوکهای 1 کیلوبایتی نمایش مییابد. برای این که du را وادار کنیم تا از اندازه بلوک متفاوتی استفاده کند، میتوانیم از گزینه B– استفاده کنیم. برای استفاده از این گزینه عبارت du سپس یک فاصله و در ادامه B– و یک حرف را از میان موارد K ،M ،G ،T ،P ،E ،Z و Y وارد میکنیم. در این مورد پیشتر توضیح دادیم. برای استفاده از بلوکهای 1 مگابایتی میتوانیم از دستور زیر استفاده کنیم:
du –BM
دستور du نیز همانند df یک گزینه قابل خواندن از سوی انسان به صورت h– دارد که از یک بازه از اندازههای بلوک مطابق اندازه هر دایرکتوری استفاده میکند:
du –h
گزینه s– مجموع هر دایرکتوری را بدون نمایش دادن دایرکتوریهای فرعی درون آن نمایش میدهد. دستور زیر از du میخواهد که اطلاعات را در قالب خلاصه با اعداد قابل خوانش از سوی انسان، برای همه دایرکتوریهای (*) زیر دایرکتوری کاری فعلی بازگشت دهد.
du -h -s *
پوشه Picture تا به اینجا بخش زیادی از دادهها را در خود جای داده است. میتوان از دستور du خواست که پوشهها را بر اساس اندازه از بزرگترین به کوچکترین مرتبسازی کند.
du -sm Pictures/* | sort –nr
سخن پایانی
همان طور که در طی این مقاله مشاهده کردیم فیلتر کردن اطلاعاتی بازگشتی از سوی دستورهای df و du به ما کمک میکند که به سادگی بفهمیم چه مقدر از فضای دیسک اشغال شده و همچنین بدانیم که چه فایلهایی این فضا را اشغال کردهاند. بدین ترتیب میتوان تصمیمهای آگاهانهای در مورد جابجا کردن برخی دادهها به فضای ذخیرهسازی دیگر، افزودن هارد درایو جدید به رایانه و یا حذف دادههای تکراری بگیریم.
این دستورها، گزینههای زیادی دارند. ما در این مطلب صرفاً گزینههای پراستفاده را معرفی کردیم؛ اما میتوانید فهرست کاملی از گزینهها را برای دستور df (+) و دستور du (+) در صفحات مربوطه راهنمای لینوکس ملاحظه کنید.