منبع اصلی نوشتار زیر در این لینک قرار دارد

فایل های dev/zero/ و dev/null/ و تفاوت های آنها

dev/null/ و dev/zero/ دو شبه فایل در سیستم عامل لینوکس و دیگر سیستم عامل های شبه-یونیکس هستند که برای ایجاد فایل های خالی و همچنین در Redirection کاربرد دارند. بطور مثال برای ایجاد یک فایل توسط دستور dd به همراه یکی از فایل های گفته شده می توان از دستور های زیر استفاده نمود. یا برای Redirect کردن خطای ناشی عدم نداشتن مجوز بر روی فایل ها، از اجرای دستور find می توان از این فایل ها استفاده نمود. در این حالت خطای ناشی از اجرای هر دستور دیگر یا حتی خروجی های استاندارد را می توان به این فایل ها هدایت کرد که باعث می شود “هیچ چیز نشان داده شوند.

dd if=/dev/zero of=/tmp/filename bs=4096 count=1000

dd if=/dev/null of=/tmp/filename bs=4096 count=1000

find /home -user a.nami -name “*.sh” 2> /dev/null | less

فایل dev/null/ : این شبه-فایل، فایلی بدون داده را ایجاد می کند، اما نیاز به اندازه دارد. به عبارت بهتر، این فایل، فایلی را با صفر هایی ایجاد می کند که همین باعث دادن حجم به فایل می شود. با اتسفاده از دستور زیر فایل را ایجاد کنید.

dd if=/dev/zero of=/tmp/filename bs=4096 count=1000

حال اگر با دستور cat بخواهید درون فایل ایجاد شده را ببینید، خواهید دید که فایل تهی یا خالی است. (نخسین دستور زیر). اما اگر با دستور strace پیش از cat خواهید دید که فایل ایجاد شده با صفر هایی پر شده است. (دومین دستور زیر و خروجی آن در زیر)

cat /tmp/filename

strace cat /tmp/filename

execve(“/bin/cat”, [“cat”, “/dev/zero”], [/* 46 vars */]) = 0
<—->
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
write(1, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
write(1, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
write(1, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
write(1, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
write(1, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
write(1, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768
read(3, “\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?…, 32768) = 32768

پس از دستور بالا برای ایجاد یک فایل با اندازه ای مشخص (استفاده از دستور dd) بدون هیچ داده ای (استفاده از فایل dev/zero/) استفاده می کنیم. از دستور زیر استفاده کنید تا اندازه فایل (4 مگابایت) را مشاهده کنید.

ls -lh /tmp/filename

-rw-r–r–. 1 root root 4.0M Sep 18 07:11 /tmp/filename

فایل dev/null/ : مانند فایل پیشین، از این فایل برای ایجاد فایل تهی استفاده می شود با این تفاوت که دیگر اندازه ی لازم در فایل قبلی و همچنین صفر های پر شده در فایل قبلی را ندارد. اگر از دستور زیر استفاده کنید فایلی خالی ایجاد می شود.

dd if=/dev/null of=/tmp/filename bs=4096 count=1000

اگر فایل را با دستور cat بخوانید، چیزی نمایش داده نمی شود و با استفاده از دستور strace نیز استفاده کنید (خروجی در زیر آن)، خواهید دید که بر خلاف فایل قبلی، فایل با صفر ها پر نشده است.

cat /tmp/filename

strace cat /tmp/filename

همچنین فایل فاقد اندازه لازمه در فایل قبلی است.

ls -lh /tmp/filename

-rw-r–r–. 1 root root 0 Sep 22 02:16 /tmp/filename



برچسب ها : , , , , , , , , , , ,