ما هو / dev / null وكيف يمكنه مساعدتك؟

إذا كانت لدينا بالفعل بعض المفاهيم الخاصة بشجرة دليل جنو / لينكس ، فيجب أن نكون على الأقل على دراية بالمرجع / dev / ، وهو المكان الذي ترتبط فيه جميع الملفات بـ الأجهزة المادية.

إذا نظرنا في الدليل / ديف / سنرى "ملف" يسمى فارغةولكن إذا أردنا فتحه لرؤية محتواه ، سيخبرنا النظام أنه غير ممكن لأنه ليس محتوى عاديًا. لقد قمت بإرفاق ملف الكلمة لأنه ، كما تعلمون جميعًا في Linux ، يتم تمثيل كل شيء (الأجهزة والبرامج) كملف.

هذه مساهمة من دانيال دورانتي ، وبذلك أصبح أحد الفائزين في مسابقتنا الأسبوعية: «شارك بما تعرفه عن Linux«. مبروك دانيال!

ما الجهاز الذي يتوافق معه / dev / null؟

لأغراض عملية ، تخيل علبة قمامة أو حفرة لا قاع لها أو فضاء خارجي ترمي فيه أي شيء دون إمكانية استعادته (بغض النظر عن مدى صعوبة محاولة الرجال من ناسا).

ولكن إذا كان لدي بالفعل أوامر مثل rm ، فلماذا أريد حذف شيء جديد؟

لأن طريقة عمل "الثقوب السوداء" مختلفة تمامًا: كيف يمكنك تجاوز المخرجات المعيارية لخطأ في أمر ما داخل نص شل في وقت التشغيل؟ هذا هو المكان الذي يأتي فيه / dev / null.

دعونا نرى ذلك بمثال.

لقد أنشأنا ملفًا يسمى الاختبارات يحتوي على السلسلة "Hello World". إذا أردنا تمثيل محتوى هذا الملف في سطر الأوامر ، فيمكننا القيام بذلك بالطريقة التالية:

مستخدم @ كمبيوتر محمول: ~ اختبار القط $
مرحبا بالعالم

إذا كان الملف غير موجود أو تم تسميته كاختبارات (مع وجود 's' في النهاية) ، فسنحصل على الخطأ التالي في وحدة التحكم:

مستخدم @ كمبيوتر محمول: ~ اختبارات القط دولار
cat: الاختبارات: الملف أو الدليل غير موجود

ماذا يمكننا أن نفعل لتجنب رسالة الخطأ؟ حسنًا ، ما عليك سوى إعادة توجيه إخراج الأمر ، في حالة الخطأ ، إلى "سلة المهملات" ، أي / dev / null

كيف نحددها في حالة الخطأ؟ تقوم هنا بإدخال قيم الإدخال والإخراج والخطأ القياسية لبرنامج ما: STDIN و STDOUT و STDERR (والتي يمكن استبدالها بـ 0 و 1 و 2 على التوالي). بهذه الطريقة إذا وضعنا ...

user @ laptop: ~ اختبارات القط $ 2> / dev / null
مستخدم @ كمبيوتر محمول: ~ $

... سنرى أن رسالة الخطأ لن تظهر على وحدة التحكم.

يجب أن تكون حذرًا لأن بناء الجملة ضروري: يجب ألا يكون هناك مسافة بين الحرفين 2 و>. وإلا فإنه سيعطي ما يلي:

user @ laptop: ~ اختبارات القط $ 2> / dev / null
cat: الاختبارات: الملف أو الدليل غير موجود
cat: 2: الملف أو الدليل غير موجود

في المقابل ، لن تؤثر المسافة بين> و / dev / null سلبًا على النتيجة.

يمكننا أيضًا استخدام إعادة توجيه الخطأ ، على سبيل المثال ، لالتقاط الأخطاء في ملف السجل على النحو التالي:

user @ laptop: ~ اختبارات القط $ 2> Err.log

هناك حالة أخرى مثيرة للاهتمام تتمثل في جمع النتائج في ملف آخر طالما لم يحدث خطأ ، والتي سنضع لها:

user @ laptop: ~ $ cat test 1> output_result 2> err.log

أخيرًا ، يجدر وضع التعبير «> / dev / null 2> & 1» الذي يتم فيه دمج المخرجات القياسية ومخرجات الخطأ ، وإعادة توجيههما بحيث لا يتم الحصول على معلومات المخرجات بأي حال من الأحوال.


محتوى المقال يلتزم بمبادئنا أخلاقيات التحرير. للإبلاغ عن خطأ انقر فوق هنا.

7 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   جيدو اجناسيو اجناسيو قال

    آه ، لكن إحدى الأدوات المساعدة الأكثر استخدامًا والتي يفتقدها / dev / null ، وهي إفراغ الملفات: $ cat / dev / null> file.log بهذه الطريقة ، سيكون ملف file.log فارغًا. أضفه!

    1.    إدواردو هـ قال

      كان هذا هو بالضبط التفسير الذي كان يبحث عنه.
      أنا أؤيد اقتراح إضافته =)

      Saludos!

  2.   بول قال

    مرحبًا ، أولاً وقبل كل شيء ، المقال جيد جدًا! والثاني أود أن أساهم بشيء مع هذا الرابط حول هذا الموضوع وظيفة cron في php من Cpanel وثالث مبروك على المدونة!

  3.   بول قال

    مقال لطيف عن dev / null ، يا له من عار أعتقد أنني علقت بالخطأ في المكان الخطأ من قبل! أنا أعتذر

  4.   مجهول قال

    جيدة وذلك بفضل مساهمة

  5.   جيرس قال

    تحياتي أنا أتلقى هجومًا فارغًا. أستخدم andrirc وأحصل على خاص من اسم الشهرة الخاص بي بكلمة Null. بعد ثانيتين ، يتم إغلاق البرنامج الذي كنت أقرأه ومن ما أراه لا يمكن القيام به إلا من خلال Shell ، وليس بواسطة شخص خارجي. لقد حاولت تجاهل نفسي / تجاهل -lrpcntikd ولا شيء يفاجئني أن الأمر يستمر في القدوم. إذا كان لديك أي طريقة لمحاولة حظره ، فسأكون ممتنًا لذلك. في صحتك

  6.   صوفيا مارتينيز قال

    ماذا يحدث إذا لم يتم وضع الرمز> عند تنفيذ الجملة؟

    هل يمكن لأحد أن يرشدني من فضلك؟