إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

ماهي stdin, stdout ,stderr في لينكس وكيف تستخدم؟

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [شرح] ماهي stdin, stdout ,stderr في لينكس وكيف تستخدم؟

    هي ثلاثة أنواع من 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
    كود:
    ls | cat
    الامر ls يتصرف بشكل مختلف الحالة الاولى المخرجات stdout المعتاد اما ألثانية فمخرجات الامر ترسل الى أمر أخر .

    كذالك في الامر التالي
    كود:
    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
    السطر الاول في السكربت ترسل النص الى الترمنال من خلال stdout .
    السطر الثاني يحاول الدخول الى الملف الغير موجود أساسا.
    هذا سينشأ رسالة خطأ والتي سترسل من خلال stderr

    الان شغل الملف
    كود:
    ./error.sh
    ستلاحظ أن كلا الخرجين stdout, stderr تم طباعتهم في الترمنال.

    الآن لنحاول إرسال الخرج إلى ملف
    كود:
    ./error.sh > capture.txt
    رسالة الخطأ التي ارسلت عبر stderr مازالت ترسل الى الترمنال , يمكننا فحص محتوى الملف لنرى إن كان stdout ارسل المخرجات الى الملف.

    كود:
    cat capture.txt
    الخرج من أمر الإدخال stdin يتم تحويلة الى ملف كما هو متوقع

    رمز إعادة التوجيه < يعمل مع stdout بشكل إفتراضي.

    يمكنك إستخدام واحد من "أرقام وصف الملفات" والتي تدل على نوع stream الذي تريده.
    كود:
    1> :stdout
    2> :stderr
    لنحاول مرة أخرى لكن هذه المرة باستخدام 2>
    كود:
    ./error.sh 2> capture.txt
    رسالة الخطأ سيعاد توجيهها وسيقوم stdout بإرسال الرسالة الى الترمنال

    لنرى الآن محتوى ملف 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
    إعادة توجيه stdout , stderr إلى نفس الملف.
    كود:
    ./error.sh > capture.txt 2>&1
    لنتأكد من محتوى capture.txt
    نرى كلا خرج الامرين stderr,stdout في نفس الملف.


    لكن ماذا إذا أردنا لأي سبب ألا نرى محتويات خرج الامرين يمكننا حينها توجيه الخرج إلى
    كود:
    /dev/null
    للمزيد
    What Are stdin, stdout, and stderr on Linux?

    في أمان الله ^_^
    •°o.O islamux O.o°•
    أنا إن عشت لنفسي عشت حقيرًهزيلا :::ومهما تعلمت لا أزال جهولا
    "يَوْمَ تَجِدُ كُلُّ نَفْسٍ مَا عَمِلَتْ مِنْ خَيْرٍ مُحْضَرا..الايه(آل عمران:30)

    *****
    إذَا لَمْ تَسْتَطِعْ شيئًا فدَعْهُ = وجاوِزْهُ إلى مَا تَستَطِيعُ
    تلميح اليوم

    FreeBSD في كبسولة !
    لا يطلب العلم مستحي ولا مستكبر
    اللهم اجعل عملنا خالصا لوجهك الكريم.
    فان تجد عيبا فسدَ الخللا ****** جلَ من لا عيب فيه وعلا
    كل مشاركاتي في المجتمع وقف لله تعالى
    Tweeter

يعمل...
X