إعادة توجيه stdout و stderr إلى ملف

Redirect Stdout Stderr File



عند إعادة توجيه أي إخراج أمر إلى ملف ، ستلاحظ أن رسائل الخطأ تتم طباعتها على نافذة المحطة الطرفية. يستخدم أي أمر يتم تنفيذه في أي نظام Linux shell ، مثل bash ، ثلاثة تدفقات I / O منتظمة. يتم استخدام واصف ملف رقمي لتمثيل كل تدفق.

  • تيار الإدخال القياسي (stdin): 0
  • تيار الإخراج القياسي (stdout): 1
  • تيار الخطأ القياسي (stderr): 2

في هذا المنشور ، سوف ندرك المعلومات التي تأتي في إطار إعادة توجيه stdout و stderr إلى ملف.







الإخراج القياسي (stdout):

كل نظام تشغيل يعتمد على Linux لديه اقتناع بالمكان الافتراضي للأمر المنفذ. يشير الجميع إلى هذه الفكرة على أنها stdout أو إخراج قياسي لجعلها تبدو أسهل. تبحث Bash أو Zsh shell باستمرار عن موقع الإخراج الافتراضي. عندما تكتشف الصدفة ناتجًا جديدًا ، فإنها تعرضه على شاشة المحطة الطرفية لتراها. خلاف ذلك ، سيرسل الإخراج إلى موقعه الافتراضي.



الخطأ المعياري (stderr):

الخطأ القياسي أو stderr مشابه للمدخلات والمخرجات القياسية ، ولكن يتم استخدامه لتخزين رسائل الخطأ. يمكن إعادة توجيه الخطأ القياسي إلى سطر الأوامر أو إلى ملف باستخدام محطة طرفية. إذا كنت تريد تسجيل الرسائل أو تخزينها في ملف سجل منفصل أو إخفاء رسائل الخطأ ، فستساعدك إعادة توجيه stderr. الآن دعونا نتجه نحو الجانب العملي لإعادة توجيه stdout و stderr.



إعادة توجيه stdout و stderr إلى ملف:

نظرًا لأن إعادة التوجيه هي طريقة لالتقاط إخراج البرنامج وإرساله كمدخل إلى أمر أو ملف آخر. يمكن إعادة توجيه تدفقات الإدخال / الإخراج عن طريق وضع عامل التشغيل n> قيد الاستخدام ، حيث يمثل n رقم واصف الملف. لإعادة توجيه stdout ، نستخدم 1> وبالنسبة لـ stderr ، يتم إضافة 2> كعامل تشغيل.





لقد أنشأنا ملفًا باسم sample.txt لتخزين الإخراج المعاد توجيهه في دليلنا الحالي.



يعتبر (command> file) بمثابة مشغل إعادة التوجيه الكلاسيكي الذي يعيد توجيه الإخراج القياسي فقط مع الخطأ القياسي الموضح في الجهاز. سوف نعرض خيارات مختلفة لإعادة توجيه stderr أيضًا.

إعادة توجيه stderr و stdout لفصل الملفات:

يوجد أدناه بناء جملة الأمر لإعادة توجيه stdout و stderr لفصل الملفات.

أمر >خارج2>خطأ

سيعيد الأمر الموضح أدناه توجيه الإخراج إلى ملف الإخراج ورسائل الخطأ إلى ملف الخطأ.

$قطsample.txt>خارج2>خطأ

إعادة توجيه stderr إلى stdout:

من الممارسات الشائعة إعادة توجيه stderr بالإخراج القياسي لبرنامج لتخزين كل شيء في ملف واحد. فيما يلي صيغة الأمر لإعادة توجيه stderr إلى stdout:

أمر >خارج2> &1$ls >samplefile.txt2> &1

$قطsamplefile.txt

> تقوم عمليات إعادة التوجيه الخارجية بإعادة توجيه stdout إلى samplefile.txt ، و 2> & 1 ستعيد توجيه stderr إلى الموقع الحالي لـ stdout.

إذا تمت إعادة توجيه stderr إلى stdout أولاً ، فاستخدم الأمر الموضح أدناه لإعادة توجيه stdout إلى ملف.

أمر 2> &1 > ملف$ls -إلى 2> &1 >samplefile.txt

$قطsamplefile.txt

&> يستخدم أيضًا لنفس الوظيفة التي تؤديها 2> & 1.

أمر &> ملف$ls &>samplefile.txt

$قطsamplefile.txt

إعادة توجيه stdout و stderr إلى ملف واحد:

كل القذائف لا تدعم إعادة توجيه النموذج هذا ، لكن bash و Zsh تدعمها. يمكن إعادة توجيه Stdout و stderr باستخدام الصيغة التالية.

أمر &>خارج$قطsample.txt&>خارج

في القسم التالي من المقالة ، سوف نتحقق من المثال المنفصل لإعادة توجيه stdout و stderr.

إعادة توجيه stdout إلى ملف:

يتم تمثيل الإخراج القياسي بالرقم 1 في قائمة أرقام واصفات الملفات. لأمر إعادة التوجيه بدون أي رقم واصف للملف ، عيَّنت المحطة الطرفية قيمتها على 1. يتم إعطاء بناء الجملة لإعادة توجيه stdout إلى ملف على النحو التالي:

أمر > ملف

نحن نستخدم ملف sample.file لتخزين الإخراج القياسي للأمر ls -al

$ls -إلى >sample.txt

$قطsample.txt

أمر 1> ملف$ls 1>sample.txt

$قطsample.txt

إعادة توجيه stderr إلى ملف:

استخدم عامل التشغيل 2> لإعادة توجيه stderr إلى ملف.

أمر 2> ملف $ls -إلى 2>sample.txt

يمكننا الجمع بين تنفيذ stderr و stdout في أمر إعادة توجيه واحد.

أمر 2>error.txt1>الإخراج

في المثال الموضح أدناه ، سيتم تخزين رسائل الخطأ في error.txt ، حيث سيكون للمخرجات output.txt إخراجها القياسي من الأمر ls.

$ls 2>error.txt1>الإخراج

$قطالإخراج

استنتاج:

يعد وجود مفهوم إعادة التوجيه وواصفات الملفات لتدفقات الإدخال / الإخراج أمرًا ذا قيمة كبيرة أثناء العمل في محطة Linux. في هذا المنشور ، تحدثنا عن تدفقات الإدخال / الإخراج المنتظمة ، بما في ذلك stdout و stderr. يقدم لك القسم الأول من هذا المنشور معلومات مفصلة حول إعادة التوجيه وتدفق الإدخال / الإخراج وواصف الملف الرقمي. بعد ذلك ، لقد رأيت المثال العملي لأشكال مختلفة من إعادة توجيه stdout و stderr.