از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
2>/dev/null دقیقا چه کاری انجام می دهد؟
سرفصلهای مطلب
دستگاه پوچ – ‘/dev/null’
تمامی سیستم های مبتنی بر لینوکس دارای ویژگی به نام دستگاه های مجازی هستند. این دستگاه های مجازی مانند فایل های واقعی در سیستم عامل تعامل دارند. عملکرد چنین دستگاه های مجازی شبیه به دستگاه های واقعی است. آنها برای نوشتن و خواندن داده ها استفاده می شوند. تفاوت اصلی بین این دو این است که داده های دستگاه های مجازی توسط سیستم عامل تامین می شود.
/dev/null یک دستگاه null است – نوع خاصی از دستگاه مجازی. در هر سیستم لینوکس وجود دارد و هدف این دستگاه دور انداختن هر چیزی است که به آن ارسال می شود و انتهای فایل (EOF) را می خواند. بیشتر دستگاه های مجازی برای خواندن داده ها استفاده می شوند. با این حال، /dev/null منحصر به فرد است زیرا برای سرکوب هر داده ای که روی آن نوشته شده است استفاده می شود. به عبارت ساده، برای هر داده ای که در سیستم عامل لینوکس روی آن نوشته می شود، به عنوان سیاه چاله عمل می کند.
حال، اجازه دهید نگاهی به قسمت های باقی مانده از دستور 2 > /dev/null بیاندازیم
توصیف کننده فایل – ‘2’
هر دستوری که در لینوکس اجرا میشود، سه فایل مرتبط تولید میکند: ورودی استاندارد، خروجی استاندارد و فایلهای خطای استاندارد. سیستم عامل لینوکس به هر یک از این فایل ها با یک عدد صحیح غیر منفی منحصر به فرد اشاره می کند.
- ‘0’ برای ورودی استاندارد
- ‘1’ برای خروجی استاندارد
- “2” برای خطای استاندارد
اصطلاحات فنی ورودی استاندارد، خروجی استاندارد و جریان های خطای استاندارد به ترتیب stdin، stdout و stderr هستند.
می دانیم که عدد ‘2’ در دستور ‘2>/dev/null’ به جریان خطای استاندارد (stderr) اشاره دارد.
عملگر تغییر مسیر فایل – ‘>’
نماد ‘>’ به عنوان عملگر تغییر مسیر فایل شناخته می شود. هدف آن هدایت آنچه در سمت چپ آن است به دستورات است روی سمت راست. به عبارت سادهتر، هر رشته داده در سمت چپ به سمت راست اپراتور هدایت میشود.
تا کنون، هدف هر جزء از دستور 2>/dev/null را درک کرده ایم. جریان خطا را به /dev/null ارسال می کند که آن را دور می زند. به عبارت دیگر، از این دستور برای حذف و سرکوب خروجی های خطا استفاده می شود. با این حال، اگر شما یک کهنه کار با تجربه لینوکس هستید، می توانید با اجرای دستور زیر در فایل /dev/null به محتویات فایل /dev/null نگاه کنید. terminal:
این دستور معمولاً در سناریوهایی استفاده می شود که باید خروجی را بر اساس فیلتر کنیم روی خطاها یا زمانی که می خواهیم خروجی های مرتبط با توضیحات اشتباه را کنار بگذاریم. با حرکت رو به جلو، نمونه هایی از کاربرد آن را بررسی خواهیم کرد روی یک سیستم اوبونتو
با استفاده از 2>/dev/null
از آنجایی که می دانیم دستور 2>/dev/null برای حذف خطاها استفاده می شود، همیشه همراه با دستورات دیگر استفاده می شود. در مثال های زیر رویکرد مشابهی را مشاهده خواهیم کرد. می توانید باز کنید terminal یا با دسترسی به آن از طریق منوی برنامه ها یا با استفاده از میانبر صفحه کلید Ctrl + Alt + T.
در مثال اول، ما در فهرست /sys/ برای یک رشته تصادفی جستجو می کنیم (در این مورد helloworld). دستور جستجو grep است و آرگومان آن رشته جستجو خواهد بود. برای جستجوی رشته خود دستور زیر را وارد کنید.
این فرمان جستجو به دلیل اینکه بدون دسترسی ریشه مورد استفاده قرار می گیرد، خطاهای متعددی را نمایش می دهد. جریان خطای آن را با استفاده از دستور 2>/dev/null به /dev/null ارسال می کنیم تا این خطاها را حذف کنیم.
می بینیم که خروجی دستور بسیار منظم تر و ساده تر از دستور قبلی است. دلیل آن این است که خطاها با استفاده از 2> /dev/null حذف می شوند و از آنجایی که دستور grep قادر به یافتن فایلی مطابق با رشته ما ‘helloworld’ نیست، هیچ خروجی را نشان نمی دهد.
برای درک بهتر استفاده از /dev/null، به مثال زیر پینگ کردن هر وب سایتی (در مورد ما google.com) نگاه خواهیم کرد. با اجرای دستور زیر می توانید google.com را پینگ کنید:
اگر بخواهیم تمام پینگ های ناموفق را حذف کنیم، می توانیم از دستور 2>/dev/null استفاده کنیم:
در این حالت، جریان خطای استاندارد (که پینگهای ناموفق را به google.com نشان میدهد) به دستگاه مجازی /dev/null ارسال میشود که آنها را دور میاندازد.
با این حال، اگر بخواهیم فقط پینگ های ناموفق را ببینیم، می توانیم دستور زیر را اجرا کنیم:
در اینجا، جریان خروجی استاندارد (stdout) را به دستگاه /dev/null ارسال می کنیم که آن را دور می اندازد. در نتیجه، تنها پینگ هایی باقی می مانند که به سرور google.com نرسیدند. با این حال، در مورد ما، پینگ ناموفق وجود نداشت. ما همچنین می توانیم stdout و stderr را به مکان های مختلف هدایت کنیم. اگر بخواهیم خروجی را کنار بگذاریم و خطاها را در یک گزارش ذخیره کنیم یا برعکس، مفید است. میتوانید دستور زیر را اجرا کنید تا پینگهای ناموفق را در یک گزارش خطا ذخیره کنید و در عین حال خروجی استاندارد دستور ping را کنار بگذارید:
در مواقعی، ممکن است بخواهید تمام خروجی یک فرمان (از جمله خروجی استاندارد و خطاهای استاندارد) را سرکوب کنید. ما میتوانیم با استفاده از دستگاه /dev/null به شیوهای متفاوت به این هدف برسیم. برای سرکوب تمام خروجی ها می توانید دستور زیر را تایپ کنید:
توجه داشته باشید که ترتیب دستورات در اینجا بسیار مهم است. پس از اجرای دستور ping، ‘>/dev/null’ به سیستم می گوید که خروجی را سرکوب کند، و ‘2>&1’ جریان خطای استاندارد را به خروجی استاندارد هدایت می کند. به این ترتیب، تمام خروجی دستور حذف می شود.
نتیجه
ما دستور 2>/dev/null و مثالهای ساده را در این مقاله تشریح کردهایم، و امیدواریم اکنون متوجه شوید که هر بیت از آن چه میکند. با این حال، این فقط نوک کوه یخ است. دستگاه های پوچ به روش های مختلفی استفاده می شوند bash برنامه نویسی. برخی از کاربردهای پیشرفتهتر عبارتند از بررسی وجود فایل، نصب خودکار بستهها و جلوگیری از اجرا شدن اسکریپتها به استثناهای ناخواسته.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-30 20:07:04