نوشته ها

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

کاربرد دستور truncate در لینوکس
5/5 - (1 امتیاز)

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

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

📌 1. دستور du (Disk Usage) – بررسی میزان فضای اشغال شده توسط فایل‌ها و پوشه‌ها

دستور du برای نمایش میزان فضای استفاده شده توسط فایل‌ها و پوشه‌ها به کار می‌رود.

مثال‌ها:

1️⃣ بررسی حجم یک پوشه:

du -sh /var/log

🔹 -s: فقط جمع حجم را نمایش می‌دهد.
🔹 -h: نمایش حجم به‌صورت خوانا (مثلاً MB, GB به‌جای بایت).

2️⃣ بررسی حجم همه فایل‌های داخل یک پوشه:

du -ah /home/user

🔹 -a: نمایش حجم هر فایل و پوشه به‌صورت جداگانه.
🔹 -h: نمایش خوانا.

3️⃣ بررسی بزرگترین دایرکتوری‌ها:

du -ah /var | sort -rh | head -10

🔹 این دستور ۱۰ مورد از حجیم‌ترین دایرکتوری‌ها را نمایش می‌دهد.


📌 2. دستور truncate – کوتاه کردن یا صفر کردن فایل‌ها

این دستور برای کاهش حجم فایل‌ها بدون حذف آن‌ها استفاده می‌شود.

مثال‌ها:

1️⃣ حذف تمام محتوای یک فایل بدون پاک کردن خود فایل:

truncate -s 0 logfile.txt

🔹 فایل logfile.txt خالی می‌شود اما حذف نمی‌شود.

2️⃣ کاهش اندازه یک فایل به ۵۰ مگابایت:

truncate -s 50M largefile.dat

🔹 اگر فایل بزرگتر از ۵۰MB باشد، کاهش پیدا می‌کند.
🔹 اگر کوچکتر باشد، صفرها اضافه می‌شود.

3️⃣ کوتاه کردن یک فایل تا ۱۰۰ بایت:

truncate -s 100 myfile.txt

🔥 جمع‌بندی

  • du برای بررسی میزان فضای اشغال شده توسط فایل‌ها و پوشه‌ها استفاده می‌شود.
  • truncate برای کوتاه کردن، صفر کردن یا تغییر اندازه فایل‌ها به کار می‌رود.

✍️ هر دو دستور در مدیریت فضای دیسک خیلی کاربردی هستند، مخصوصاً در سرورها.

📌 دستور truncate -s 100 myfile.log به چه دردی می‌خورد؟

دستور truncate -s 100 myfile.log باعث می‌شود که حجم فایل myfile.log دقیقاً ۱۰۰ بایت شود. این دستور می‌تواند در دو حالت کاربرد داشته باشد:


✅ ۱. بزرگ کردن فایل به یک حجم خاص (افزودن فضای خالی)

اگر فایل myfile.log وجود نداشته باشد یا کوچک‌تر از ۱۰۰ بایت باشد، این دستور باعث می‌شود که حجم آن به ۱۰۰ بایت افزایش یابد.

🔹 اگر فایل موجود باشد و حجمش کمتر از ۱۰۰ بایت باشد، لینوکس به آن داده‌های خالی (null bytes) اضافه می‌کند تا حجم فایل به ۱۰۰ بایت برسد.
🔹 اگر فایل موجود نباشد، یک فایل جدید ایجاد می‌شود که ۱۰۰ بایت فضای خالی دارد.

📌 مثال: ایجاد یک فایل خالی به اندازه ۱۰۰ بایت

truncate -s 100 myfile.log

✅ نتیجه: myfile.log ایجاد می‌شود و دقیقاً ۱۰۰ بایت فضای خالی دارد.

📌 مثال دیگر: ایجاد یک فایل ۱۰ مگابایتی

truncate -s 10M myfile.log

✅ نتیجه: یک فایل با اندازه ۱۰ مگابایت (10,485,760 بایت) ایجاد می‌شود که پر از بایت‌های خالی است.


✅ ۲. کوچک کردن فایل (حذف داده‌های اضافی)

اگر فایل myfile.log قبلاً وجود داشته باشد و اندازه آن بیشتر از ۱۰۰ بایت باشد، این دستور باعث می‌شود که فایل از انتها برش داده شود و فقط ۱۰۰ بایت اول باقی بماند.

📌 مثال: کاهش اندازه یک فایل لاگ به ۱۰۰ بایت

truncate -s 100 /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 1G testfile

✅ نتیجه: فایلی ۱ گیگابایتی به‌وجود می‌آید که پر از بایت‌های خالی است. این فایل به ما کمک می‌کند تا عملیات خواندن و نوشتن را بدون نیاز به نوشتن داده‌های واقعی آزمایش کنیم.


✅ ۲. ایجاد فایل‌های دیسک مجازی (Loopback Devices, Swap, Disk Images)

اگر بخواهید یک ایمیج دیسک مجازی یا یک فایل swap بسازید، می‌توانید ابتدا یک فایل بزرگ با truncate ایجاد کنید و سپس آن را فرمت و استفاده کنید.

📌 مثال: ساخت یک فایل ۲ گیگابایتی برای تبدیل به دیسک مجازی

truncate -s 2G mydisk.img
mkfs.ext4 mydisk.img   # فرمت کردن فایل به‌عنوان یک سیستم فایل ext4
mount mydisk.img /mnt  # سوار کردن آن به‌عنوان یک دیسک مجازی

✅ نتیجه: این فایل به‌عنوان یک دیسک مجازی عمل می‌کند.

📌 مثال: ایجاد یک فایل ۵۱۲ مگابایتی برای swap

truncate -s 512M swapfile
mkswap swapfile
swapon swapfile

✅ نتیجه: این فایل به‌عنوان یک فضای swap در سیستم استفاده می‌شود.


✅ ۳. تست رفتار برنامه‌ها هنگام پر شدن فضا

گاهی اوقات توسعه‌دهندگان نیاز دارند تا بررسی کنند که اگر یک فایل به اندازه خاصی برسد، چه اتفاقی می‌افتد. مثلاً:
🔹 برنامه‌های پردازش لاگ – اگر فایل لاگ بیش از ۱۰ گیگابایت شود، چه واکنشی نشان می‌دهد؟
🔹 پایگاه داده‌ها – اگر فضای ذخیره‌سازی پر شود، دیتابیس چگونه رفتار می‌کند؟

📌 مثال: شبیه‌سازی یک فایل ۵۰ گیگابایتی بدون اشغال واقعی دیسک

truncate -s 50G bigfile

✅ این کار به ما اجازه می‌دهد که نرم‌افزارها را بدون مصرف واقعی فضای دیسک تست کنیم.


✅ ۴. شبیه‌سازی حافظه برای برنامه‌نویسی و امنیت

گاهی اوقات در برنامه‌نویسی نیاز داریم که با فایل‌های باینری بزرگ کار کنیم، اما نمی‌خواهیم داده‌های واقعی تولید کنیم. truncate این امکان را به ما می‌دهد که بدون نوشتن اطلاعات اضافی، یک فایل حجیم بسازیم.

📌 مثال: ایجاد یک فایل باینری ۲۰۰ مگابایتی برای تست الگوریتم‌ها

truncate -s 200M binary_test_file

✅ توسعه‌دهندگان می‌توانند از این فایل برای تست کدهای مربوط به خواندن و پردازش فایل‌های باینری استفاده کنند.


🚀 جمع‌بندی

🔹 بزرگ کردن فایل‌ها به‌صورت مصنوعی، فضای واقعی دیسک را اشغال نمی‌کند (در فایل‌سیستم‌هایی مثل ext4).
🔹 برای تست سرعت دیسک، ایجاد فایل‌های دیسک مجازی و شبیه‌سازی شرایط خاص مفید است.
🔹 می‌توان از آن برای ایجاد ایمیج‌های دیسک، swap، یا فایل‌های تستی برای برنامه‌های مختلف استفاده کرد.

اگر فایل testfile از قبل ۵۰ مگابایت داده داشته باشد و شما دستور زیر را اجرا کنید:

truncate -s 1G testfile

اتفاقی که می‌افتد:
🔹 آن ۵۰ مگابایت داده اولیه دست‌نخورده باقی می‌ماند.
🔹 سیستم فایل به فایل ۹۵۰ مگابایت فضای خالی اضافه می‌کند.
🔹 این فضای اضافه‌شده واقعی نیست (تا زمانی که داده جدیدی نوشته نشود).


🛠 آزمایش: بررسی تغییر حجم فایل و داده‌های داخل آن

اگر بخواهید بررسی کنید که داده‌های اولیه دست‌نخورده باقی می‌ماند یا نه، می‌توانید این تست را انجام دهید:

📌 ۱. ایجاد یک فایل ۵۰ مگابایتی و پر کردن آن با داده

truncate -s 50M testfile  # ایجاد یک فایل 50 مگابایتی
head -c 50M </dev/urandom >testfile  # نوشتن 50 مگابایت داده تصادفی

📌 ۲. مشاهده اندازه اولیه

ls -lh testfile

✅ خروجی:

-rw-r--r-- 1 user user 50M Mar 26 12:00 testfile

📌 ۳. بزرگ کردن فایل به ۱ گیگابایت

truncate -s 1G testfile

📌 ۴. بررسی مجدد اندازه فایل

ls -lh testfile

✅ خروجی:

-rw-r--r-- 1 user user 1.0G Mar 26 12:02 testfile

📌 ۵. بررسی محتوای فایل

xxd testfile | less

✅ داده‌های اولیه ۵۰ مگابایتی همچنان دست‌نخورده باقی می‌مانند، و بخش‌های جدید فقط فضای خالی (zero-filled) هستند.


🚀 جمع‌بندی

🔹 truncate اندازه فایل را تغییر می‌دهد، اما داده‌های قبلی را پاک نمی‌کند.
🔹 بخش‌های جدید اضافه‌شده به فایل فقط به‌صورت فضای خالی هستند و مقدار واقعی ندارند.
🔹 در سیستم‌فایل‌های مدرن (مثل ext4)، این فضا به‌طور فیزیکی تا زمانی که داده‌ای در آن نوشته نشود اشغال نمی‌شود.

مطالب زیر را حتما مطالعه کنید

دیدگاهتان را بنویسید