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