هي ثلاثة أنواع من data streams (بيانات متدفقة)
يتم إنشائها عند تنفيذ أي أمر في نظام تشغيل لينكس .
من المصطلحات المستخدمه في عالم الكمبيوتر هي stream وهو شيء يستطيع نقل البيانات وفي حالتنا هذه مايتم نقله هو بيانات نصية text.
هذه data streams تشبه الماء المتدفق الذي لديه طرفين . مصدر او منبع و مصب ومهما كان الأمر الذي تنفذه على لينكس فأنت تمتلك طرف الخيط أو الجهة الأولى والطرف الثاني
يتم تحديده بواسطة الشل التي أطلقت ذالك الأمر.
معيار تدفق البيانات في لينكس
في بيئة لينكس هناك معايير للبيانات التي يتم إدخالها وهو مايطلق عليه stdin ويقبل البيانات المدخلة input كنص.
أما البيانات الخارجة عبر الشل output فيطلق عليها stdout.
يتبقى لنا المعيار الأخير وهو stderr وهو output أيضا لكنه خاص برسائل الخطأ الخارجة من الشل.
Streams يتم التعامل معها كملفات
نوع streams في بيئة لينكس مثل كل شيء اخر يعامل كملف. يمكنك أن تقرأ نص من الملف كما يمكنك أن تكتب فيه . كلا هذين الأمرين يمكنك التعامل بهما مع streams كما نرى فهناك نوعين من المخرجات output ونوع واحد من المدخلات.
كل ملف له رقم مميز أو قيمة يعرف به ويطلق عليه file descriptor. هذه القيم أيضا تستخدم مع stdin, stdout, stderr كالتالي:
- 0 : stdin
- 1 : stdout
- 2 : stderr
مثال
الامر ls يتصرف بشكل مختلف الحالة الاولى المخرجات stdout المعتاد اما ألثانية فمخرجات الامر ترسل الى أمر أخر .
كذالك في الامر التالي
لكن في المقابل ماهي الجدوى من الحصول على رسائل خطأ من سطر الأوامر ؟
يمكن إرسال المخرجات stdout الى ملف وفي نفس الوقت سترى رسائل الخطأ stderr- إن حدث - في سطر الاوامر .
يمكنك أن تستفيد من رسائل الخطأ في التعامل معها بالشكل الذي تريد, هي ايضا توقف رسائل الخطأ في الملف الذي يتم إخراج البيانات إليه.
مثال
ضع الاسطر التالية في ملف واحفظة في ملف error.sh
اعط الملف صلاحيات تنفيذ.
السطر الاول في السكربت ترسل النص الى الترمنال من خلال stdout .
السطر الثاني يحاول الدخول الى الملف الغير موجود أساسا.
هذا سينشأ رسالة خطأ والتي سترسل من خلال stderr
الان شغل الملف
ستلاحظ أن كلا الخرجين stdout, stderr تم طباعتهم في الترمنال.
الآن لنحاول إرسال الخرج إلى ملف
رسالة الخطأ التي ارسلت عبر stderr مازالت ترسل الى الترمنال , يمكننا فحص محتوى الملف لنرى إن كان stdout ارسل المخرجات الى الملف.
الخرج من أمر الإدخال stdin يتم تحويلة الى ملف كما هو متوقع
رمز إعادة التوجيه < يعمل مع stdout بشكل إفتراضي.
يمكنك إستخدام واحد من "أرقام وصف الملفات" والتي تدل على نوع stream الذي تريده.
لنحاول مرة أخرى لكن هذه المرة باستخدام 2>
رسالة الخطأ سيعاد توجيهها وسيقوم stdout بإرسال الرسالة الى الترمنال
لنرى الآن محتوى ملف capture.txt
نرى أن رسالة stderr في ملف capture.txt كما هو متوقع
إعادة توجيه stdout , stderr مع بعض.
إذا كان بإمكاننا إعادة إرسال إما stdout أو stderr فبكل تأكيد يمكننا أيضا إعادة توجيههما في نفس الوقت إلى ملفين مختلفين!
الامر سيوجه stdout الى capture.txt
و stderr سيوجة إلى error.txt
لنتأكد من محتوى الملفين
إعادة توجيه stdout , stderr إلى نفس الملف.
لنتأكد من محتوى capture.txt
نرى كلا خرج الامرين stderr,stdout في نفس الملف.
لكن ماذا إذا أردنا لأي سبب ألا نرى محتويات خرج الامرين يمكننا حينها توجيه الخرج إلى
للمزيد
What Are stdin, stdout, and stderr on Linux?
في أمان الله ^_^
يتم إنشائها عند تنفيذ أي أمر في نظام تشغيل لينكس .
من المصطلحات المستخدمه في عالم الكمبيوتر هي stream وهو شيء يستطيع نقل البيانات وفي حالتنا هذه مايتم نقله هو بيانات نصية text.
هذه data streams تشبه الماء المتدفق الذي لديه طرفين . مصدر او منبع و مصب ومهما كان الأمر الذي تنفذه على لينكس فأنت تمتلك طرف الخيط أو الجهة الأولى والطرف الثاني
يتم تحديده بواسطة الشل التي أطلقت ذالك الأمر.
معيار تدفق البيانات في لينكس
في بيئة لينكس هناك معايير للبيانات التي يتم إدخالها وهو مايطلق عليه stdin ويقبل البيانات المدخلة input كنص.
أما البيانات الخارجة عبر الشل output فيطلق عليها stdout.
يتبقى لنا المعيار الأخير وهو stderr وهو output أيضا لكنه خاص برسائل الخطأ الخارجة من الشل.
Streams يتم التعامل معها كملفات
نوع streams في بيئة لينكس مثل كل شيء اخر يعامل كملف. يمكنك أن تقرأ نص من الملف كما يمكنك أن تكتب فيه . كلا هذين الأمرين يمكنك التعامل بهما مع streams كما نرى فهناك نوعين من المخرجات output ونوع واحد من المدخلات.
كل ملف له رقم مميز أو قيمة يعرف به ويطلق عليه file descriptor. هذه القيم أيضا تستخدم مع stdin, stdout, stderr كالتالي:
- 0 : stdin
- 1 : stdout
- 2 : stderr
مثال
كود:
ls
كود:
ls | cat
كذالك في الامر التالي
كود:
ls > capture.txt
يمكن إرسال المخرجات stdout الى ملف وفي نفس الوقت سترى رسائل الخطأ stderr- إن حدث - في سطر الاوامر .
يمكنك أن تستفيد من رسائل الخطأ في التعامل معها بالشكل الذي تريد, هي ايضا توقف رسائل الخطأ في الملف الذي يتم إخراج البيانات إليه.
مثال
ضع الاسطر التالية في ملف واحفظة في ملف error.sh
كود:
#!/bin/bash echo "About to try to access a file that doesn't exist" cat bad-filename.txt
كود:
chmod +x error.sh
السطر الثاني يحاول الدخول الى الملف الغير موجود أساسا.
هذا سينشأ رسالة خطأ والتي سترسل من خلال stderr
الان شغل الملف
كود:
./error.sh
الآن لنحاول إرسال الخرج إلى ملف
كود:
./error.sh > capture.txt
كود:
cat capture.txt
رمز إعادة التوجيه < يعمل مع stdout بشكل إفتراضي.
يمكنك إستخدام واحد من "أرقام وصف الملفات" والتي تدل على نوع stream الذي تريده.
كود:
1> :stdout 2> :stderr
كود:
./error.sh 2> capture.txt
لنرى الآن محتوى ملف capture.txt
نرى أن رسالة stderr في ملف capture.txt كما هو متوقع
إعادة توجيه stdout , stderr مع بعض.
إذا كان بإمكاننا إعادة إرسال إما stdout أو stderr فبكل تأكيد يمكننا أيضا إعادة توجيههما في نفس الوقت إلى ملفين مختلفين!
الامر سيوجه stdout الى capture.txt
و stderr سيوجة إلى error.txt
كود:
./error.sh 1> capture.txt 2> error.txt
كود:
cat capture.txt cat error.txt
كود:
./error.sh > capture.txt 2>&1
نرى كلا خرج الامرين stderr,stdout في نفس الملف.
لكن ماذا إذا أردنا لأي سبب ألا نرى محتويات خرج الامرين يمكننا حينها توجيه الخرج إلى
كود:
/dev/null
What Are stdin, stdout, and stderr on Linux?
في أمان الله ^_^