|
إذا كانت لدينا بالفعل بعض المفاهيم الخاصة بشجرة دليل جنو / لينكس ، فيجب أن نكون على الأقل على دراية بالمرجع / dev / ، وهو المكان الذي ترتبط فيه جميع الملفات بـ الأجهزة المادية.
إذا نظرنا في الدليل / ديف / سنرى "ملف" يسمى فارغةولكن إذا أردنا فتحه لرؤية محتواه ، سيخبرنا النظام أنه غير ممكن لأنه ليس محتوى عاديًا. لقد قمت بإرفاق ملف الكلمة لأنه ، كما تعلمون جميعًا في 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» الذي يتم فيه دمج المخرجات القياسية ومخرجات الخطأ ، وإعادة توجيههما بحيث لا يتم الحصول على معلومات المخرجات بأي حال من الأحوال.