الأنابيب: ما تحتاج إلى معرفته لبدء استخدامها في جنو / لينكس

خطوط الأنابيب

ل أنبوب أو نقطةe هو في الواقع خط أنابيب متاح لنظام UNIX / Linux وعملي للغاية. ولكن لفهم ماهية الأنبوب تمامًا ، يجب أن تعلم أنه في بيئة * nix ، يحتوي على 3 تدفقات بيانات مضمنة. هذا ، بالنسبة لأولئك الذين لا يعرفون ، يعني أن البيانات يمكن أن تنتقل إلى أو من ثلاث نقاط.

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

تلك النقاط التي كنت أتحدث عنها أو تدفقات البيانات، هي:

  • ستدين: يتوافق مع 0 وهو الإدخال القياسي. بشكل عام ، إدخال البيانات القياسي في نظام * nix هو لوحة المفاتيح. وهذا يعني أن ما تكتبه سيكون هو المعلومات المستخدمة. لديها جهاز خاص مرتبط به وهو / dev / stdin.
  • المعياري: المحدد بـ 1 ، إنه الإخراج القياسي. عادةً ما يتوافق مع شاشة أو شاشة جهاز الكمبيوتر الخاص بك ، حيث يمكنك رؤية المعلومات. على سبيل المثال ، عند تشغيل أمر ls ، سيتم عرض قائمة المحتويات على الشاشة ، أليس كذلك؟ الجهاز المرتبط هو / dev / stdout.
  • ستدير: معرّف بـ 2 ، هو ناتج الخطأ المعياري ، لأنه عند حدوث خطأ في البرنامج. الجهاز المرتبط هو / dev / stderr.

باستخدام خط الأنابيب ، يمكنك جعل الإخراج القياسي أو القياسي لأمر واحد يمر مباشرة إلى الإدخال القياسي لأمر آخر. وهذا يعني أنه يمكنك جعل أحد البرامج يغذي برنامجًا آخر. بدلاً من استخدام المعلمات التي يتم إدخالها من خلال لوحة المفاتيح ، يسلم الأنبوب المعلومات التي تم إنشاؤها بواسطة الأمر السابق من خلال خط الأنابيب هذا الذي يمثله |

مع الأمثلة ستفهم بشكل أفضل. افترض أنك تريد سرد محتويات دليل ، لكنك مهتم فقط برؤية الأسماء التي تتطابق مع الكلمة doc. لذلك يمكنك استخدام خط أنابيب لتوجيه إخراج ls في إدخال مرشح grep لإخباره بعرض العناصر التي تطابق هذا النمط فقط:

ls -l | grep doc

لذا فبدلاً من إظهار جميع الأسماء لك ، فإنه يظهر لك فقط تلك التي تهمك حقًا. يمكنك أن تفعل الشيء نفسه مع محتوى الملف. تخيل أنك تريد فقط رؤية معلومات العمليات المسماة Firefox وليس جميعها:

ps aux | grep firefox

بدلاً من إظهار كل مخرجات برنامج ps على الشاشة (stdout) ، ما يفعله هو توجيهه نحو إدخال مرشح grep ويظهر فقط في الإخراج ما يتوافق مع نمط Firefox في هذه الحالة ...

إذا كنت تريد ، يمكنك استخدامها أنابيب مختلفة لإحضار إخراج أحد الأوامر إلى إدخال أمر ثانٍ آخر ، وإخراج ذلك الثاني إلى إدخال أمر ثالث ، وهكذا. على سبيل المثال:

cat libro | grep love | more

كما ترى ، الاحتمالات كثيرة، كل ما يمكنك تخيله ومسموح به. أظهر فقط السطر الأول والأخير من الملف ، واحسب الأسطر التي تدخل wc التي تأتي من القائمة ، بل وقم بفرزها:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

يمكنك أيضا العمل مع أخطاء مع | & وعلى سبيل المثال ، ابحث عن كلمة تنبيه في إخراج نص برمجي إذا فشل:

./miscript |& grep alerta 

وأخيرًا ، هناك أمران مرتبطان ارتباطًا وثيقًا بالأنابيب الموجودة تي و xargs وأنه يمكنهم زيادة إمكانيات هذه. في حالة tee ، ما سيسمح به هو إظهار نتيجة البرنامج السابق على الإخراج القياسي حتى تتمكن من رؤيته ، بالإضافة إلى أنه يمكنه توجيهه إلى ملف آخر. على سبيل المثال ، إذا أدرجت محتويات دليل وأردت رؤية إخراج ls -l في الوقت الحالي وقمت أيضًا بحفظه في ملف list.txt:

ls -l | tee listado.txt

إذا كنت لا تستخدم نقطة الإنطلاق ، فلن تتمكن من رؤية الإخراج على وحدة التحكم الخاصة بك ...

Y com.xargs إنه أكثر إثارة للاهتمام في بعض الحالات. في هذه الحالة ، يكون قادرًا على إنشاء أمر من المدخلات القياسية التي يتلقاها عبر خط الأنابيب. بمعنى آخر ، إنه قادر على التقاط كل شيء أطلقه برنامج سابق من خلال مخرجاته والذي يصل إلى xargs عبر خط الأنابيب لتمريره بدوره إلى أمر آخر كوسيطات.

ما زلت لا تحصل عليه؟ سترى ذلك أفضل بكثير مع مثال. تخيل أنك تريد إزالة جميع ملفات thumbs.db اللعينة من دليل أو قرص أو قسم. إذا كان هناك الكثير ، فقد يكون من المستحيل استخدام الأمر rm واحدًا تلو الآخر لحذفها يدويًا. ولكن مع xargs ، يمكنك أتمتة كل شيء. ويمكنك القيام بذلك باستخدام البحث لتحديد موقعهم ، وإرسال الإخراج من خلال إدخال xargs وهذا بدوره سيعطي rm الأسماء كوسيطات. لذلك ، سيتم حذف جميع المواقع الموجودة تلقائيًا:

find ./ -name "thumbs.db" | xargs rm

على سبيل المثال ، افترض العثور على المواقع /home/name/thumbs.db و /media/test/thumbs.db و /tmp/thumbs.db. حسنًا ، سوف يسلمهم xargs إلى جمهورية مقدونيا كما لو كانوا حججًا. هذا كما لو كنا قد نفذنا: rm /home/name/thumbs.db ، ثم rm /media/test/thumbs.db ثم rm /tmp/thumbs.db.


اترك تعليقك

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

*

*

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

  1.   جوزيه قال

    ممتاز ، هذه المعلومات مهمة جدًا لمستخدمي نظام Linux

  2.   دانيال قال

    يا لها من مقال جيد ، الآن وأنا أدرس إعادة توجيه I / O في كتاب The Linux Command Line. من الواضح بالنسبة لي عن الأنابيب (خط الأنابيب) وتدفقات البيانات الثلاثة. المساهمة موضع تقدير. تحيات.

  3.   01101001b قال

    يناسبني المثال مع xargs مثل القفازات. اليوم بالضبط كنت أتعامل مع تلك التفاصيل الصغيرة لمخرج متعدد كان علي أن أرسله "في أجزاء". مشى xargs pinturita.
    ممتن للغاية!