کاربرد دستور truncate در لینوکس

🔹 du
و truncate
در لینوکس چکار میکنند؟

📌 ۱. دستور du
(Disk Usage) – بررسی میزان فضای اشغال شده توسط فایلها و پوشهها
دستور du
برای نمایش میزان فضای استفاده شده توسط فایلها و پوشهها به کار میرود.
✅ مثالها:
۱️⃣ بررسی حجم یک پوشه:
du -sh /var/log
🔹 -s
: فقط جمع حجم را نمایش میدهد.
🔹 -h
: نمایش حجم بهصورت خوانا (مثلاً MB, GB بهجای بایت).
۲️⃣ بررسی حجم همه فایلهای داخل یک پوشه:
du -ah /home/user
🔹 -a
: نمایش حجم هر فایل و پوشه بهصورت جداگانه.
🔹 -h
: نمایش خوانا.
۳️⃣ بررسی بزرگترین دایرکتوریها:
du -ah /var | sort -rh | head -۱۰
🔹 این دستور ۱۰ مورد از حجیمترین دایرکتوریها را نمایش میدهد.
📌 ۲. دستور truncate
– کوتاه کردن یا صفر کردن فایلها
این دستور برای کاهش حجم فایلها بدون حذف آنها استفاده میشود.
✅ مثالها:
۱️⃣ حذف تمام محتوای یک فایل بدون پاک کردن خود فایل:
truncate -s ۰ logfile.txt
🔹 فایل logfile.txt
خالی میشود اما حذف نمیشود.
۲️⃣ کاهش اندازه یک فایل به ۵۰ مگابایت:
truncate -s ۵۰M largefile.dat
🔹 اگر فایل بزرگتر از ۵۰MB باشد، کاهش پیدا میکند.
🔹 اگر کوچکتر باشد، صفرها اضافه میشود.
۳️⃣ کوتاه کردن یک فایل تا ۱۰۰ بایت:
truncate -s ۱۰۰ myfile.txt
🔥 جمعبندی
du
برای بررسی میزان فضای اشغال شده توسط فایلها و پوشهها استفاده میشود.truncate
برای کوتاه کردن، صفر کردن یا تغییر اندازه فایلها به کار میرود.
✍️ هر دو دستور در مدیریت فضای دیسک خیلی کاربردی هستند، مخصوصاً در سرورها.
📌 دستور truncate -s 100 myfile.log
به چه دردی میخورد؟
دستور truncate -s 100 myfile.log
باعث میشود که حجم فایل myfile.log
دقیقاً ۱۰۰ بایت شود. این دستور میتواند در دو حالت کاربرد داشته باشد:
✅ ۱. بزرگ کردن فایل به یک حجم خاص (افزودن فضای خالی)
اگر فایل myfile.log
وجود نداشته باشد یا کوچکتر از ۱۰۰ بایت باشد، این دستور باعث میشود که حجم آن به ۱۰۰ بایت افزایش یابد.
🔹 اگر فایل موجود باشد و حجمش کمتر از ۱۰۰ بایت باشد، لینوکس به آن دادههای خالی (null bytes) اضافه میکند تا حجم فایل به ۱۰۰ بایت برسد.
🔹 اگر فایل موجود نباشد، یک فایل جدید ایجاد میشود که ۱۰۰ بایت فضای خالی دارد.
📌 مثال: ایجاد یک فایل خالی به اندازه ۱۰۰ بایت
truncate -s ۱۰۰ myfile.log
✅ نتیجه: myfile.log
ایجاد میشود و دقیقاً ۱۰۰ بایت فضای خالی دارد.
📌 مثال دیگر: ایجاد یک فایل ۱۰ مگابایتی
truncate -s ۱۰M myfile.log
✅ نتیجه: یک فایل با اندازه ۱۰ مگابایت (۱۰,۴۸۵,۷۶۰
بایت) ایجاد میشود که پر از بایتهای خالی است.
✅ ۲. کوچک کردن فایل (حذف دادههای اضافی)
اگر فایل myfile.log
قبلاً وجود داشته باشد و اندازه آن بیشتر از ۱۰۰ بایت باشد، این دستور باعث میشود که فایل از انتها برش داده شود و فقط ۱۰۰ بایت اول باقی بماند.
📌 مثال: کاهش اندازه یک فایل لاگ به ۱۰۰ بایت
truncate -s ۱۰۰ /var/log/syslog
✅ نتیجه: فقط ۱۰۰ بایت اول فایل باقی میماند و بقیه اطلاعات آن حذف میشود.
📌 تفاوت truncate
با dd
و fallocate
روش | توضیح |
---|---|
truncate -s SIZE file | تغییر اندازه فایل بدون تغییر دادههای موجود. اگر کوچک شود، دادههای انتهایی حذف میشوند؛ اگر بزرگ شود، بایتهای خالی اضافه میشوند. |
dd if=/dev/zero of=file bs=1 count=SIZE | ایجاد یک فایل با پر کردن آن از 0x00 (کمی کندتر از truncate ). |
fallocate -l SIZE file | ایجاد یک فایل با اندازه خاص، اما ممکن است در برخی سیستمها پشتیبانی نشود. |
🚀 جمعبندی
✅ اگر میخواهید فایلی را دقیقاً به اندازه خاصی تنظیم کنید، از truncate -s SIZE file
استفاده کنید.
✅ برای بزرگ کردن فایل، بایتهای خالی (null bytes) اضافه میکند.
✅ برای کوچک کردن فایل، دادههای اضافی از انتها حذف میشوند.
📌 چرا ممکن است بخواهیم یک فایل را بزرگ کنیم؟
افزایش اندازه یک فایل (بدون نوشتن دادههای واقعی) میتواند در برخی موارد مفید باشد. در ادامه چند سناریو که در آن بزرگ کردن یک فایل کاربرد دارد را بررسی میکنیم:
✅ ۱. ایجاد فایلهای تستی برای آزمایش سرعت دیسک
گاهی اوقات برای تست سرعت خواندن و نوشتن دیسک نیاز داریم که فایلهایی با اندازه مشخص ایجاد کنیم. دستور truncate
این کار را به سرعت انجام میدهد.
📌 مثال:
truncate -s ۱G testfile
✅ نتیجه: فایلی ۱ گیگابایتی بهوجود میآید که پر از بایتهای خالی است. این فایل به ما کمک میکند تا عملیات خواندن و نوشتن را بدون نیاز به نوشتن دادههای واقعی آزمایش کنیم.
✅ ۲. ایجاد فایلهای دیسک مجازی (Loopback Devices, Swap, Disk Images)
اگر بخواهید یک ایمیج دیسک مجازی یا یک فایل swap بسازید، میتوانید ابتدا یک فایل بزرگ با truncate
ایجاد کنید و سپس آن را فرمت و استفاده کنید.
📌 مثال: ساخت یک فایل ۲ گیگابایتی برای تبدیل به دیسک مجازی
truncate -s ۲G mydisk.img
mkfs.ext4 mydisk.img # فرمت کردن فایل بهعنوان یک سیستم فایل ext4
mount mydisk.img /mnt # سوار کردن آن بهعنوان یک دیسک مجازی
✅ نتیجه: این فایل بهعنوان یک دیسک مجازی عمل میکند.
📌 مثال: ایجاد یک فایل ۵۱۲ مگابایتی برای swap
truncate -s ۵۱۲M swapfile
mkswap swapfile
swapon swapfile
✅ نتیجه: این فایل بهعنوان یک فضای swap در سیستم استفاده میشود.
✅ ۳. تست رفتار برنامهها هنگام پر شدن فضا
گاهی اوقات توسعهدهندگان نیاز دارند تا بررسی کنند که اگر یک فایل به اندازه خاصی برسد، چه اتفاقی میافتد. مثلاً:
🔹 برنامههای پردازش لاگ – اگر فایل لاگ بیش از ۱۰ گیگابایت شود، چه واکنشی نشان میدهد؟
🔹 پایگاه دادهها – اگر فضای ذخیرهسازی پر شود، دیتابیس چگونه رفتار میکند؟
📌 مثال: شبیهسازی یک فایل ۵۰ گیگابایتی بدون اشغال واقعی دیسک
truncate -s ۵۰G bigfile
✅ این کار به ما اجازه میدهد که نرمافزارها را بدون مصرف واقعی فضای دیسک تست کنیم.
✅ ۴. شبیهسازی حافظه برای برنامهنویسی و امنیت
گاهی اوقات در برنامهنویسی نیاز داریم که با فایلهای باینری بزرگ کار کنیم، اما نمیخواهیم دادههای واقعی تولید کنیم. truncate
این امکان را به ما میدهد که بدون نوشتن اطلاعات اضافی، یک فایل حجیم بسازیم.
📌 مثال: ایجاد یک فایل باینری ۲۰۰ مگابایتی برای تست الگوریتمها
truncate -s ۲۰۰M binary_test_file
✅ توسعهدهندگان میتوانند از این فایل برای تست کدهای مربوط به خواندن و پردازش فایلهای باینری استفاده کنند.
🚀 جمعبندی
🔹 بزرگ کردن فایلها بهصورت مصنوعی، فضای واقعی دیسک را اشغال نمیکند (در فایلسیستمهایی مثل ext4).
🔹 برای تست سرعت دیسک، ایجاد فایلهای دیسک مجازی و شبیهسازی شرایط خاص مفید است.
🔹 میتوان از آن برای ایجاد ایمیجهای دیسک، swap، یا فایلهای تستی برای برنامههای مختلف استفاده کرد.
اگر فایل testfile
از قبل ۵۰ مگابایت داده داشته باشد و شما دستور زیر را اجرا کنید:
truncate -s ۱G testfile
✅ اتفاقی که میافتد:
🔹 آن ۵۰ مگابایت داده اولیه دستنخورده باقی میماند.
🔹 سیستم فایل به فایل ۹۵۰ مگابایت فضای خالی اضافه میکند.
🔹 این فضای اضافهشده واقعی نیست (تا زمانی که داده جدیدی نوشته نشود).
🛠 آزمایش: بررسی تغییر حجم فایل و دادههای داخل آن
اگر بخواهید بررسی کنید که دادههای اولیه دستنخورده باقی میماند یا نه، میتوانید این تست را انجام دهید:
📌 ۱. ایجاد یک فایل ۵۰ مگابایتی و پر کردن آن با داده
truncate -s ۵۰M testfile # ایجاد یک فایل ۵۰ مگابایتی
head -c ۵۰M </dev/urandom >testfile # نوشتن ۵۰ مگابایت داده تصادفی
📌 ۲. مشاهده اندازه اولیه
ls -lh testfile
✅ خروجی:
-rw-r--r-- ۱ user user ۵۰M Mar ۲۶ ۱۲:۰۰ testfile
📌 ۳. بزرگ کردن فایل به ۱ گیگابایت
truncate -s ۱G testfile
📌 ۴. بررسی مجدد اندازه فایل
ls -lh testfile
✅ خروجی:
-rw-r--r-- ۱ user user ۱.۰G Mar ۲۶ ۱۲:۰۲ testfile
📌 ۵. بررسی محتوای فایل
xxd testfile | less
✅ دادههای اولیه ۵۰ مگابایتی همچنان دستنخورده باقی میمانند، و بخشهای جدید فقط فضای خالی (zero-filled) هستند.
🚀 جمعبندی
🔹 truncate اندازه فایل را تغییر میدهد، اما دادههای قبلی را پاک نمیکند.
🔹 بخشهای جدید اضافهشده به فایل فقط بهصورت فضای خالی هستند و مقدار واقعی ندارند.
🔹 در سیستمفایلهای مدرن (مثل ext4)، این فضا بهطور فیزیکی تا زمانی که دادهای در آن نوشته نشود اشغال نمیشود.
دیدگاهتان را بنویسید