تعلم أساسيات كيفية عمل إعادة توجيه إدخال/إخراج Linux

واحد من أهم وأكثر المواضيع المثيرة تحت إدارة Linux هو إعادة توجيه الإدخال و/أو الإخراج. تمكن هذه الميزة من سطر الأوامر من إعادة توجيه الإدخال و/أو الإخراج من و/أو إلى الملفات، أو توصيل عدة أوامر معًا باستخدام الأنابيب لتشكيل ما يعرف بـ ” أنبوب الأوامر “.

جميع الأوامر التي نقوم بتشغيلها تنتج في الأساس نوعين من الإخراج:

  1. نتيجة الأمر – البيانات التي تم تصميم البرنامج لإنتاجها، و
  2. حالة البرنامج ورسائل الخطأ التي تُعلم المستخدم بتفاصيل تنفيذ البرنامج.

في Linux وأنظمة Unix-like الأخرى، هناك ثلاث ملفات افتراضية تحمل الأسماء التالية والتي يتم تحديدها أيضًا بواسطة القشرة باستخدام أرقام معرف الملف:

  1. stdin أو 0 – متصل بلوحة المفاتيح، معظم البرامج تقرأ الإدخال من هذا الملف.
  2. stdout أو 1 – متصل بالشاشة، وجميع البرامج ترسل نتائجها إلى هذا الملف و
  3. stderr أو 2 – ترسل البرامج رسائل الحالة/الخطأ إلى هذا الملف الذي يكون أيضًا متصلاً بالشاشة.

لذلك، يتيح لك إعادة توجيه الإدخال والإخراج تغيير مصدر الإدخال لأمر ما وكذلك مكان إرسال نتائجه ورسائل الخطأ إليه. ويتم ذلك بواسطة عوامل إعادة التوجيه "<" و ">".

كيفية إعادة توجيه الإخراج القياسي إلى ملف في Linux

يمكنك توجيه الإخراج القياسي كما في المثال التالي، هنا، نريد تخزين إخراج أمر الأعلى لفحصه لاحقًا:

$ top -bn 5 >top.log

حيث توجد العلامات:

  1. -b – يمكن أمر الأعلى من التشغيل في وضع الدفعات، بحيث يمكنك توجيه إخراجه إلى ملف أو أمر آخر.
  2. -n – يحدد عدد الدورات قبل إنهاء الأمر.

يمكنك عرض محتويات ملف top.log باستخدام أمر cat على النحو التالي:

$ cat top.log

لإلحاق إخراج أمر، استخدم مشغل “>>”.

على سبيل المثال لإلحاق إخراج أمر الأعلى أعلاه في ملف top.log بشكل خاص داخل نص (أو على سطر الأوامر)، أدخل السطر التالي:

$ top -bn 5 >>top.log

ملحوظة: باستخدام رقم وصف الملف، يكون أمر توجيه الإخراج أعلاه هو نفسه مثل:

$ top -bn 5 1>top.log

كيفية توجيه الخطأ القياسي إلى ملف في نظام التشغيل لينكس

لتوجيه الخطأ القياسي لأمر، يجب عليك تحديد رقم وصف الملف بشكل صريح، 2 لتفهم الشاشة ما تحاول القيام به.

الأمر ls سينتج خطأ عند تنفيذه بواسطة مستخدم نظام عادي بدون صلاحيات root:

$ ls -l /root/

يمكنك توجيه الخطأ القياسي إلى ملف كما يلي:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
Redirect Standard Error to File

لإلحاق الخطأ القياسي، استخدم الأمر التالي:

$ ls -l /root/ 2>>ls-error.log

كيفية توجيه الإخراج/الخطأ القياسي إلى ملف واحد

من الممكن أيضًا التقاط كل إخراج الأمر (كل من الإخراج القياسي والخطأ القياسي) في ملف واحد. يمكن القيام بذلك بطريقتين ممكنتين عن طريق تحديد أرقام وصف الملف:

1. الطريقة الأولى هي طريقة قديمة نسبيًا تعمل على النحو التالي:

$ ls -l /root/ >ls-error.log 2>&1

الأمر أعلاه يعني أن القشرة سترسل أولاً إخراج الأمر ls إلى ملف ls-error.log (باستخدام >ls-error.log)، ثم تكتب جميع رسائل الخطأ إلى وصف الملف 2 (الإخراج القياسي) الذي تم توجيهه إلى ملف ls-error.log (باستخدام 2>&1). مما يعني أن الخطأ القياسي يتم إرساله أيضًا إلى نفس الملف الذي يتم إرسال الإخراج القياسي إليه.

2. الطريقة الثانية والمباشرة هي:

$ ls -l /root/ &>ls-error.log

يمكنك أيضًا إلحاق الإخراج القياسي والخطأ القياسي إلى ملف واحد كما يلي:

$ ls -l /root/ &>>ls-error.log

كيفية توجيه الإدخال القياسي إلى ملف

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

لتوجيه الإدخال القياسي من ملف آخر غير لوحة المفاتيح، استخدم مشغل ““<” كما هو موضح أدناه:

$ cat <domains.list 
Redirect Standard Input to File

كيفية توجيه الإدخال/الإخراج القياسي إلى ملف

يمكنك تنفيذ توجيه الإدخال القياسي والإخراج القياسي في نفس الوقت باستخدام أمر sort كما هو موضح أدناه:

$ sort <domains.list >sort.output

كيفية استخدام توجيه الإدخال/الإخراج باستخدام الأنابيب

لتوجيه إخراج أمر كإدخال لآخر، يمكنك استخدام الأنابيب، وهذا وسيلة قوية لبناء سطور أوامر مفيدة لعمليات معقدة.

على سبيل المثال، سيقوم الأمر أدناه بـ عرض أعلى خمسة ملفات تم تعديلها مؤخرًا.

$ ls -lt | head -n 5 

هنا، تُظهر الخيارات:

  1. -l – يمكن تمكين تنسيق القائمة الطويلة
  2. -tترتيب حسب وقت التعديل مع أحدث الملفات تُعرض أولاً
  3. -n – يحدد عدد الأسطر الرأسية التي يجب عرضها

الأوامر المهمة لبناء الأنابيب

هنا، سنستعرض بإيجاز أمرين مهمين لبناء سلاسل أوامر وهما:

التحكم الذي يُستخدم لبناء وتنفيذ سلاسل الأوامر من مدخل قياسي. أدناه مثال على أنبوب يستخدم xargs، هذا الأمر يُستخدم لـ نسخ ملف إلى عدة مجلدات في نظام Linux:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Copy Files to Multiple Directories

والخيارات:

  1. -n 1 – يُوجه xargs لاستخدام على الأكثر واحد argument لكل سطر أمر وإرساله إلى أمر cp
  2. cp – ينسخ الملف
  3. -vيعرض تقدم أمر النسخ.

لمزيد من الخيارات والمعلومات حول الاستخدام، اطلع على صفحة الرجل لأمر xargs

$ man xargs 

A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:

$ echo "Testing how tee command works" | tee file1 
tee Command Example

تصفية الملفات أو النصوص تُستخدم عادة مع الأنابيب لـ عمليات ملفات Linux الفعالة، لمعالجة المعلومات بطرق قوية مثل إعادة هيكلة إخراج الأوامر (وهذا يمكن أن يكون حيويًا لـ إنشاء تقارير Linux المفيدة)، تعديل النص في الملفات بالإضافة إلى العديد من مهام إدارة نظام Linux.

لمعرفة المزيد حول تصفية Linux والأنابيب، اقرأ هذا المقال العثور على أفضل 10 عناوين IP تصل إلى خادم Apache، يُظهر مثالًا مفيدًا عن استخدام التصفية والأنابيب.

في هذا المقال، شرحنا أساسيات إعادة توجيه الإدخال/الإخراج في Linux. تذكر أن تشارك أفكارك عبر قسم التعليقات أدناه.

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/