/dev/null در لینوکس یک فایل دستگاه مجازی null است. بر خلاف اکثر دستگاه‌های مجازی، این فایل برای خواندن اطلاعات توسط برنامه‌ها استفاده نمی‌شود؛ بلکه کاربر و برنامه‌ها تنها توانایی نوشتن در این فایل را دارند. به عبارت دیگر، هنگام خواندن فایل، هر آنچه در آن فایل نوشته شده است، کنار گذاشته شده و EOF برگردانده می‌شود.

با توجه به این خصوصیت، فایل /dev/null به عنوان یک سیاهچاله معروف است؛ چراکه هر آنچه به طرفش پرتاب می‌شود را می‌بلعد. در ادامه، نگاهی به درک معنای آن می‌اندازیم و بررسی می‌کنیم که با این فایل چه کارهایی می‌توان انجام داد.

 

 

این مطلب نیز ممکن است برای شما مفید باشد: برچسب زمان در فایل‌های لینوکس

 

خصوصیات /dev/null

چنانچه بخواهید این فایل را با استفاده از دستور cat بخوانید، کاراکتر End of File (EOF) را در خروجی برمی‌گرداند.

cat /dev/null

این فایل، یک فایل معتبر است که با استفاده از دستور زیر اعتبار آن قابل تأیید است:

stat /dev/null

خروجی این دستور به صورت زیر خواهد بود:

  File: /dev/null
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d   Inode: 5           Links: 1     Device type: 1,3
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-02-04 13:00:43.112464814 +0530
Modify: 2020-02-04 13:00:43.112464814 +0530
Change: 2020-02-04 13:00:43.112464814 +0530

 

همانطور که در خروجی مشاهده می‌کنید، این فایل 0 بایت اندازه دارد و صفر بلوک به آن اختصاص یافته است. مجوزهای فایل نیز به گونه‌ای تنظیم شده است که هر کسی می‌تواند از آن بخواند یا در آن بنویسد، اما نمی‌تواند آن را اجرا کند.

از آنجا که این یک فایل اجرایی نیست، نمی‌توانید از عملگر | به منظور تغییر مسیر به /dev/null استفاده نمایید. بلکه تنها راه، استفاده از عملگرهای انتقال فایل (>، >>، یا <، <<) است.

نمودار زیر نشان می‌دهد که /dev/null در واقع یک فایل معتبر است.

 

حال بیایید نگاهی به کاربردهای متداول /dev/null بیندازیم.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه اجرای فایل ISO در لینوکس

 

تغییر مسیر به dev/null/ در لینوکس

شما می‌توانید با تغییر مسیر به /dev/null، هر گونه خروجی را از اسکریپتی که استفاده می‌کنید، دور اندازید.

به عنوان مثال، شما می‌توانید پیام‌های خروجی echo را با استفاده از این ترفند به صورت زیر حذف کنید.

echo 'Hello from JournalDev' > /dev/null

فرض کنید دستوری را به صورت اشتباه اجرا می‌کنید و خروجی آن را به /dev/null منتقل می‌نمایید.

cat --INCORRECT_OPTION > /dev/null

هرچند خروجی دستور را به /dev/null منتقل کرده‌اید؛ با این حال یک خروجی به این شکل زیر مشاهده خواهید کرد:

cat: unrecognized option '--INCORRECT'
Try 'cat --help' for more information.

فکر می‌کنید چرا این اتفاق می‌افتد؟ پاسخ این است که پیام‌های خطا از stderr ارسال می‌شوند؛ در حالی که شما با این کار تنها خروجی stdout را حذف کرده‌اید. بنابراین باید stderr را نیز در نظر بگیرید.

 

این مطلب نیز ممکن است برای شما مفید باشد: راهنمای سیستم فایل 'proc/' در لینوکس

 

کنار گذاشتن پیام‌های خطا

فرض کنید می‌خواهید stderr را به همراه stdout به /dev/null هدایت کنید. برای این کار می‌توانید از توصیفگر فایل برای stderr (=2) استفاده نمایید.

cat --INCORRECT_OPTION > /dev/null 2>/dev/null

این دستور به ما آنچه را که نیاز داریم، ارائه می‌دهد!

روش دیگری نیز برای انجام این کار وجود دارد. بدین صورت که ابتدا stderr را به stdout تغییر مسیر داده و سپس stdout را به /dev/null هدایت کنید.

ساختار دستور برای این روش به شرح زیر است:

command > /dev/null 2>&1

در دستور بالا به 2>&1 دقت نمایید. در این دستور، stderr (2) را به stdout (1) تغییر مسیر داده‌ایم. بدین معنی که با استفاده از &1 به پوسته اشاره می‌کنیم که فایل مقصد، یک توصیف‌گر فایل است و نه یک نام فایل.

cat --INCORRECT_OPTION > dev/null 2>&1

بنابراین اگر از 2>1 استفاده کنید، تنها stderr را به فایلی به نام 1 هدایت خواهید کرد و این، همان چیزی نیست که شما می‌خواهید!

 

 

 

منبع:

journaldev