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

⚡ ملخص ذكي

تُغيّر عملية إعادة التوجيه في أنظمة لينكس ويونكس مكان قراءة الأمر للمدخلات أو إرساله للمخرجات، أو ما يُعرف بالتبديل.ping لوحة المفاتيح والشاشة للملفات أو الأجهزة باستخدام عوامل التشغيل مثل علامة أكبر من، وعلامة أصغر من، وعامل الإلحاق.

  • 🔀 إعادة التوجيه: تُغير عملية إعادة التوجيه المدخلات أو المخرجات القياسية للأمر من لوحة المفاتيح والشاشة إلى ملف أو جهاز.
  • ➡️ الإخراج: يقوم عامل التشغيل > بكتابة المخرجات إلى ملف، بينما يقوم عامل التشغيل >> بإلحاقها بملف موجود دون مسحه.
  • ⬅️ الإدخال: يقوم عامل التشغيل < بتغذية ملف إلى أمر ما كمدخل قياسي بدلاً من لوحة المفاتيح.
  • 🔢 مُعرّفات الملفات: يحصل كل ملف مفتوح على رقم: 0 لـ stdin، و1 لـ stdout، و2 لـ stderr.
  • ⚠️ إعادة توجيه الخطأ: يؤدي استخدام 2> إلى إرسال رسائل الخطأ إلى ملف منفصل حتى لا تتسبب في تشويش الإخراج العادي.
  • 🔗 التدفقات المدمجة: يقوم بناء الجملة 2>&1 بتوجيه الخطأ القياسي إلى نفس الهدف الذي يتم توجيه الإخراج القياسي إليه.
  • 🤖 مساعدة الذكاء الاصطناعي: يمكن للمساعدين الذين يعملون بالذكاء الاصطناعي وبرنامج GitHub Copilot إنشاء وشرح أوامر إعادة التوجيه والبرامج النصية.

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

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

ما هو إعادة التوجيه؟

إعادة التوجيه هي ميزة في نظام لينكس تسمح لك بتغيير أجهزة الإدخال والإخراج القياسية عند تنفيذ أمر ما. وهي جزء أساسي من سير العمل لأي نظام. أمر Linux إنها تأخذ مدخلات وتعطي مخرجات.

  • جهاز الإدخال القياسي (stdin) هو لوحة المفاتيح.
  • جهاز الإخراج القياسي (stdout) هو الشاشة.

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

إعادة توجيه الإخراج

يوضح الرسم البياني أدناه بداية أمثلة إعادة توجيه المخرجات.

رسم توضيحي لعنوان قسم إعادة توجيه الإخراج

يُستخدم الرمز '>' لإعادة توجيه الإخراج (STDOUT).

على سبيل المثال:

ls -al > listings

هنا، يتم توجيه مخرجات الأمر ls -al إلى الملف "listings" بدلاً من شاشتك. توضح لقطة الشاشة أدناه النتيجة.

تم إعادة توجيه نافذة الطرفية التي تعرض قائمة ls -al إلى ملف القوائم.

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

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

يعرض الطرفية مخرجات الأوامر المضافة إلى ملف موجود باستخدام عامل أكبر من مرتين

يمكنك إعادة توجيه المخرجات القياسية ليس فقط إلى الملفات، ولكن أيضًا إلى الأجهزة.

$ cat music.mp3 > /dev/audio

يقرأ الأمر cat ملف الموسيقى.mp3 ويرسل المخرجات إلى /dev/audio، وهو جهاز الصوت. إذا كانت إعدادات الصوت على جهاز الكمبيوتر الخاص بك صحيحة، فسيقوم هذا الأمر بتشغيل ملف الموسيقى.mp3.

إعادة توجيه الإدخال

يوضح الرسم البياني أدناه عملية إعادة توجيه المدخلات.

رسم توضيحي لعنوان قسم إعادة توجيه الإدخال

يُستخدم الرمز '<' لإعادة توجيه الإدخال (STDIN).

مثال: يمكن لبرنامج البريد في نظام لينكس مساعدتك في إرسال رسائل البريد الإلكتروني من الطرفية.

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

mail -s "Subject" to-address < Filename

تُظهر لقطة الشاشة أدناه أمر البريد الإلكتروني وهو يقرأ ملفًا كمدخل له.

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

يؤدي هذا إلى إرفاق الملف بالبريد الإلكتروني، ثم يتم إرساله إلى المستلم.

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

قم بتقديم Descriptأورز (فد)

في أنظمة لينكس ويونكس، كل شيء عبارة عن ملف. الملفات العادية، والمجلدات، وحتى الأجهزة هي ملفات. لكل ملف رقم مرتبط به يسمى واصف الملف (FD).

يوضح الرسم البياني أدناه التدفقات القياسية ومعرّفات الملفات الخاصة بها.

مخطط تدفقات الإدخال والإخراج والخطأ القياسية ومعرّفات ملفاتها

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

إعادة توجيه الخطأ

عندما تقوم بتنفيذ برنامج أو أمر في الطرفية، يتم فتح ثلاثة ملفات دائمًا، وهي المدخلات القياسية والمخرجات القياسية والخطأ القياسي.

توجد هذه الملفات دائمًا عند تشغيل أي برنامج. وكما سبق شرحه، يرتبط بكل ملف منها مُعرِّف ملف.

قم بتقديم قم بتقديم Descriptor
معيار الإدخال STDIN 0
معيار الإخراج القياسي 1
خطأ قياسي STDERR 2

بشكل افتراضي، يتم عرض تدفق الأخطاء على الشاشة. أما إعادة توجيه الأخطاء فتُحوّل مسارها إلى ملف آخر غير الشاشة.

لماذا إعادة توجيه الخطأ؟

تُعد إعادة توجيه الأخطاء إحدى الميزات الشائعة جدًا في أنظمة يونكس ولينكس.

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

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

مثال 1

$ myprogram 2>errorsfile

تُظهر لقطة الشاشة أدناه هذا الأمر في الطرفية.

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

في المثال أعلاه، نقوم بتنفيذ برنامج باسم myprogram. مُعرِّف ملف الخطأ القياسي هو 2. باستخدام "2>"، نعيد توجيه مخرجات الخطأ إلى ملف باسم "errorsfile". وبالتالي، لا تمتلئ مخرجات البرنامج بالأخطاء.

مثال 2

إليك مثال آخر يستخدم عبارة البحث.

find . -name 'my*' 2>error.log

باستخدام أمر البحث، نقوم بالبحث في الدليل الحالي "." عن ملف يبدأ اسمه بـ "my"، ونرسل أي أخطاء إلى ملف error.log.

مثال 3: دعونا ننظر إلى مثال أكثر تعقيداً.

يقوم مسؤولو الخوادم عادةً بإدراج الدلائل وتخزين كل من مخرجات الأخطاء والمخرجات القياسية في ملف، والتي يمكن معالجتها لاحقًا. إليك الأمر.

ls Documents ABC> dirlist 2>&1

يوضح الرسم البياني أدناه التقاط كلا التدفقين في ملف واحد.

مخطط الإخراج القياسي والخطأ القياسي، وكلاهما يُعاد توجيهه إلى قائمة الملفات

هنا:

  • 2>&1 يعني أن STDERR يتم إعادة توجيهه إلى نفس الهدف مثل STDOUT (وهو قائمة دليل الملفات).
  • يتم توجيه مخرجات الخطأ إلى المخرجات القياسية، والتي بدورها تُعاد توجيهها إلى قائمة مجلدات الملفات. وبالتالي، يتم كتابة كلا التدفقين إلى قائمة مجلدات الملفات.

يوضح الرسم البياني أدناه كيفية ترابط عمليات الإدخال والإخراج وإعادة توجيه الأخطاء.

مخطط يلخص عمليات الإدخال والإخراج وإعادة توجيه الأخطاء في لينكس ويونكس

الأسئلة الشائعة

A أنبوب يُرسل الأمر (|) مُخرجات أمرٍ ما مباشرةً إلى أمرٍ آخر كمدخلٍ له. أما إعادة التوجيه، فتربط أمرًا بملفٍ أو جهاز، فتكتب مُخرجاته إليه أو تقرأ مدخلاته منه. تربط الأنابيب الأوامر، بينما تربط إعادة التوجيه أمرًا بملف.

يكتب المعامل > مخرجات الأمر إلى ملف، مستبدلاً أي محتويات موجودة. أما المعامل >> فيُلحق المخرجات بنهاية الملف بدلاً من ذلك.ping استخدم الرمز >> عندما تريد إضافة محتوى إلى ملف بدلاً من استبداله.

يُعدّ الملف /dev/null ملفًا خاصًا يتجاهل كل ما يُكتب إليه. إضافة 2>/dev/null إلى أمر ما يُعيد توجيه رسائل الخطأ إلى هذا الملف، ويتجاهلها بصمت بحيث لا يظهر على الشاشة سوى المخرجات العادية. إنها طريقة شائعة لإخفاء الأخطاء غير المرغوب فيها.

يقرأ الأمر tee من المدخلات القياسية ويكتب البيانات على الشاشة وفي ملف واحد أو أكثر في آن واحد، على سبيل المثال ls -al | tee listing.txt. يتيح لك هذا الأمر حفظ مخرجات الأمر في ملف مع الاستمرار في عرضها على الشاشة.

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

استخدم الصيغة 2>&1 بعد إعادة توجيه المخرجات، كما في الأمر > file 2>&1، بحيث يتبع الخطأ القياسي المخرجات القياسية إلى الملف. في Bash الحديث، يؤدي الأمر المختصر &> file نفس الغرض. الترتيب مهم: ضع 2>&1 بعد إعادة توجيه المخرجات.

بإمكان مساعدي الذكاء الاصطناعي تحويل طلب مكتوب بلغة إنجليزية بسيطة إلى أمر إعادة توجيه صحيح، وشرح وظائف عوامل التشغيل مثل 2>&1 أو &>، وتحديد الأخطاء قبل تنفيذها. كما تقوم أدوات التعلم الآلي بفحص سجلات إعادة التوجيه وملفات الأخطاء للكشف عن أي خلل قد يغفله المستخدم أثناء المراجعة اليدوية.

نعم. مساعد الطيار جيثب يمكن إنشاء أوامر ونصوص برمجية تعيد توجيه المدخلات والمخرجات والأخطاء من تعليق قصير يصف الهدف، وإكمالها أثناء الكتابة. Revقم بمراجعة أي أمر مقترح على ملفاتك، وخاصة تلك التي تستخدم > والتي تقوم بالكتابة فوق البيانات الموجودة.

تلخيص هذه التدوينة بـ: