إعادة التوجيه (الحوسبة)

في مجال الحوسبة ، يُعدّ التوجيه شكلاً من أشكال التواصل بين العمليات ، وهو وظيفة شائعة في معظم مترجمات سطر الأوامر ، بما في ذلك مختلف أنظمة يونكس التي تُتيح إعادة توجيه التدفقات القياسية إلى مواقع يُحددها المستخدم. مفهوم التوجيه قديمٌ نسبيًا، إذ يعود إلى أقدم أنظمة التشغيل. ويمكن الاطلاع على مناقشة لأهداف تصميم التوجيه في وصف نظام الإدخال والإخراج الفرعي لنظام التشغيل Multics عام 1971. [ 1 ] مع ذلك، قبل ظهور نظام يونكس وأنابيبه ، كان التوجيه في أنظمة التشغيل صعبًا، بل ومستحيلاً في بعض الأحيان. [ 2 ]
في أنظمة التشغيل الشبيهة بنظام يونكس ، تقوم البرامج بإعادة التوجيه باستخدام استدعاء النظام dup2 (2) ، أو نظائرها الأقل مرونة ولكن ذات المستوى الأعلى في الإدخال/الإخراج القياسي ، freopen (3) و popen (3) . [ 3 ]
إعادة توجيه المدخلات والمخرجات القياسية
يتم تنفيذ إعادة التوجيه عادةً عن طريق وضع أحرف معينة بين الأوامر .
أساسي
عادةً، يكون تركيب هذه الأحرف كما يلي، حيث يُستخدم <لإعادة توجيه المدخلات، و >لإعادة توجيه المخرجات. يُنفّذ الأمر ، ويضع المخرجات في الملف file1 ، بدلاً من عرضها في الطرفية، وهي الوجهة المعتادة للمخرجات القياسية. سيؤدي هذا إلى استبدال أي بيانات موجودة في الملف file1 .command>file1
باستخدام الأمر executes ، مع اعتبار الملف file1 مصدرًا للإدخال، بدلاً من لوحة المفاتيح ، والتي هي المصدر المعتاد للإدخال القياسي.command<file1
command<infile>outfileيجمع بين القدرتين: يقرأ الأمر من ملف الإدخال ويكتب إلى ملف الإخراج
المتغيرات
لإلحاق المخرجات بنهاية الملف، بدلاً من استبدالها، يتم استخدام المعامل: .>>command1>>file1
لقراءة البيانات من ملف حرفي (ملف مضمن، يتم تمريره إلى المدخلات القياسية)، يمكن استخدام مستند هنا ، باستخدام المعامل:<<
$ tr a-z A-Z << نهاية النص > واحد اثنان ثلاثة > أونو دوس تريس > نهاية النص واحد اثنان ثلاثة أونو دوس تريسلقراءة سلسلة نصية، يمكن استخدام سلسلة نصية مضمنة ، باستخدام المعامل: أو:<<<tra-zA-Z<<<"one two three"
$ NUMBERS = "واحد اثنان ثلاثة" $ tr a-z A-Z <<< " $NUMBERS " واحد اثنان ثلاثةالأنابيب

يمكن تشغيل البرامج معًا بحيث يقرأ أحد البرامج مخرجات برنامج آخر دون الحاجة إلى ملف وسيط صريح. يقوم بتنفيذ الأمر 1 ، مستخدمًا مخرجاته كمدخلات للأمر 2 (يُطلق على هذه العملية عادةً اسم " التوجيه " ، حيث يُعرف الحرف " " باسم "الأنبوب").command1|command2|
يمكن تشغيل البرنامجين اللذين يُنفذان الأوامر بالتوازي، مع اقتصار مساحة التخزين على مخازن العمل المؤقتة (يسمح نظام لينكس بسعة تصل إلى 64 كيلوبايت لكل مخزن مؤقت) بالإضافة إلى مساحة العمل التي يتطلبها تنفيذ كل أمر. على سبيل المثال، لا يمكن لأمر "فرز" إنتاج أي مخرجات حتى تتم قراءة جميع سجلات الإدخال، إذ قد يكون آخر سجل مُستلم هو الأول في الترتيب المُفرز. يقوم نظام التشغيل التجريبي للدكتورة ألكسيا ماسالين، المسمى "سينثيسيس" ، بتعديل أولوية كل مهمة أثناء تنفيذها وفقًا لمدى امتلاء مخازن الإدخال والإخراج المؤقتة. [ 4 ]
ينتج عن ذلك نفس النتيجة النهائية كما هو الحال عند استخدام عمليتي إعادة توجيه وملف مؤقت، كما في:
$ command1 > tempfile $ command2 < tempfile $ rm tempfile لكن هنا، لا يبدأ تنفيذ الأمر الثاني (command2) إلا بعد انتهاء الأمر الأول (command1) ، ويتطلب الأمر ملفًا مؤقتًا كبيرًا بما يكفي لحفظ النتائج الوسيطة، بالإضافة إلى مساحة العمل التي تحتاجها كل مهمة. على سبيل المثال، على الرغم من أن نظام DOS يسمح باستخدام صيغة "pipe"، إلا أنه يستخدم هذا الأسلوب الثاني. لنفترض أن برنامجًا طويل الأمد يُدعى "Worker" يُنتج رسائل متنوعة أثناء عمله، وأن برنامجًا ثانيًا يُدعى "TimeStamp" ينسخ كل سجل من stdin إلى stdout ، مسبوقًا بتاريخ ووقت النظام عند استلام السجل. سينتج تسلسل كهذا طوابع زمنية فقط عند انتهاء "Worker"، مما يُظهر فقط مدى سرعة قراءة وكتابة ملف الإخراج.Worker|TimeStamp>LogFile.txt
من الأمثلة الجيدة على استخدام توجيه الأوامر دمج أمر echoمع أمر آخر لتحقيق تفاعلية في واجهة سطر أوامر غير تفاعلية، على سبيل المثال: . يقوم هذا الأمر بتشغيل عميل FTP بإدخال اسم المستخدم ، ثم الضغط على مفتاح الإدخال ، ثم تمرير الأمر .echo-e'user\npass'|ftplocalhost
catفي الاستخدام العادي، غالبًا ما تكون الخطوة الأولى في سلسلة العمليات هي echoقراءة ملف أو سلسلة نصية. يمكن استبدال ذلك غالبًا بتوجيه الإدخال أو سلسلة نصية مضمنة ، ويُعرف استخدام الأمر cat مع توجيه الإدخال بدلًا من إعادة توجيهه بالاستخدام غير المُجدي للأمر cat . على سبيل المثال، الأوامر التالية:
$ cat infile | command $ echo $string | command $ echo -e 'user\npass' | ftp localhost يمكن استبدالها بما يلي:
$ command < infile $ command <<< $string $ ftp localhost <<< $'user\npass'وبما echoأنه غالبًا ما يكون أمرًا داخليًا في الصدفة، فإن استخدامه لا يتعرض للانتقاد مثل الأمر cat، وهو أمر خارجي.
إعادة التوجيه من وإلى معالجات الملفات القياسية
في أنظمة يونكس المشتقة من نظام بورن الأصلي ، يمكن تعديل أول إجراءين بشكل إضافي عن طريق وضع رقم ( مُعرّف الملف ) مباشرةً قبل الحرف ؛ سيؤثر هذا على أي دفق يُستخدم لإعادة التوجيه. [ 5 ] دفقات الإدخال/الإخراج القياسية في يونكس هي: [ 6 ]
| مقبض | اسم | وصف |
|---|---|---|
| 0 | stdin | المدخلات القياسية |
| 1 | stdout | المخرجات القياسية |
| 2 | stderr | الخطأ المعياري |
على سبيل المثال، يقوم بتنفيذ الأمر ، موجهاً دفق الخطأ القياسي إلى الملف 1 .command2>file1
في الصدفات المشتقة من csh ( صدفة لغة C )، يُضاف رمز & (علامة العطف) إلى أحرف إعادة التوجيه، مما يحقق نتيجة مماثلة. والسبب في ذلك هو التمييز بين ملف باسم '1' ومخرجات النظام القياسية (stdout) . في الحالة الأولى، يُعاد توجيه مخرجات الخطأ القياسية (stderr) إلى ملف باسم ' 1 '، وفي الحالة الثانية، يُعاد توجيهها إلى مخرجات النظام القياسية (stdout).catfile2>1catfile2>&1
من الميزات المفيدة الأخرى إعادة توجيه مؤشر ملف قياسي إلى آخر. وأكثر الطرق شيوعًا هي دمج الخطأ القياسي في المخرجات القياسية، بحيث يمكن معالجة رسائل الخطأ مع المخرجات العادية (أو بدلاً منها). على سبيل المثال، سيحاول الأمر العثور على جميع الملفات التي تحمل اسم .profile . عند تنفيذه بدون إعادة توجيه، سيُخرج النتائج إلى stdout والأخطاء (مثل عدم وجود صلاحية لتصفح الدلائل المحمية) إلى stderr . إذا تم توجيه المخرجات القياسية إلى ملف النتائج ، فستظهر رسائل الخطأ على وحدة التحكم. لعرض كل من النتائج ورسائل الخطأ في ملف النتائج ، ادمج stderr (المؤشر 2) في stdout (المؤشر 1) باستخدام الأمر المناسب .find/-name.profile>results2>&12>&1
إذا كان سيتم تمرير الناتج المدمج إلى برنامج آخر، 2>&1فيجب أن يسبق تسلسل دمج الملفات رمز الأنبوب، وبالتالي،find/-name.profile2>&1|less
يُعد الشكل المبسط للأمر، ولكنه غير متوافق مع معيار POSIX، (غير متوفر في Bourne Shell قبل الإصدار 4، الإصدار النهائي، أو في shell Debian Almquist القياسي المستخدم في Debian/Ubuntu): أو .command>file2>&1command&>filecommand>&file
من الممكن استخدام `redirect` 2>&1قبل >`stdout`، لكن غالبًا ما يُساء فهم النتيجة. القاعدة هي أن أي إعادة توجيه تُعيّن مُعرّف دفق الإخراج بشكل مستقل. لذا، 2>&1تُعيّن `redirect` المُعرّف 2إلى أي شيء يُشير 1إليه، والذي يكون عادةً stdout في تلك المرحلة . ثم تُعيد ` >redirect` توجيه المُعرّف 1إلى شيء آخر، مثل ملف، لكنها لا تُغيّر المُعرّف 2، الذي لا يزال يُشير إلى stdout .
في المثال التالي، تتم كتابة المخرجات القياسية إلى الملف ، ولكن يتم إعادة توجيه الأخطاء من stderr إلى stdout، أي إرسالها إلى الشاشة: .command2>&1>file
لكتابة كل من الأخطاء والمخرجات القياسية إلى الملف ، يجب عكس الترتيب. سيتم أولاً إعادة توجيه المخرجات القياسية إلى الملف، ثم سيتم إعادة توجيه الخطأ القياسي (stderr) إلى مؤشر الإخراج القياسي (stdout) الذي تم تغييره مسبقًا للإشارة إلى الملف .command>file2>&1
خطوط الأنابيب المتسلسلة
يمكن ربط رموز إعادة التوجيه والتوجيه معًا لإنشاء أوامر معقدة. على سبيل المثال، يقوم الأمر `infile` بترتيب أسطر الملف `infile` ترتيبًا معجميًا، ثم يكتب الأسطر الفريدة مسبوقة بعدد مرات ظهورها، ثم يرتب الناتج الناتج عدديًا، ويضع الناتج النهائي في الملف `outfile` . [ 7 ] يُستخدم هذا النوع من البنية بشكل شائع جدًا في البرامج النصية للصدفة وملفات الدفعات .sortinfile|uniq-c|sort-n>outfile
إعادة التوجيه إلى مخرجات متعددة
يمكن للأمر القياسي tee إعادة توجيه مخرجات أمر ما إلى عدة وجهات: . وهذا يوجه مخرجات قائمة الملفات إلى كل من المخرجات القياسية والملف xyz .ls-lrt|teexyz
انظر أيضاً
- المستند المضمن ، طريقة لتحديد النص المراد إدخاله في واجهات سطر الأوامر
- تجريف الأصداف
- استبدال الأوامر
- عملية الاستبدال
- إعادة توجيه وحدة التحكم
مراجع
- ^ فيرتاج وأورجانيك 1972 .
- ↑ كيرنيغان ومورغان 1982 ، ص 780، إعادة توجيه المدخلات/المخرجات.
- ↑ دليل مرجع مكتبة GNU C للإصدار 2.38 gnu.org
- ↑ "KHB: Synthesis: An Efficient Implementation of Fundamental Operating Systems Services" . lwn.net .
- ↑ نوزاكي، روبرتو (21 أبريل 2022). "كيفية إعادة توجيه مخرجات أوامر سطر الأوامر" . www.redhat.com .
- ↑ "إعادة التوجيهات (دليل مرجعي لـ Bash)" . www.gnu.org .
- ↑ "توجيه المخرجات وإعادة توجيهها في طرفية لينكس" . Linux.org .
مصادر
- فيرتاج، آر جيه؛ أورغانيك، إي آي (1972). "نظام الإدخال/الإخراج Multics". مجلة ACM SIGOPS لأنظمة التشغيل . 6 (1/2): 35-38 . doi : 10.1145/850614.850622 . ISSN 0163-5980 .
- كيرنيغان، برايان دبليو؛ مورغان، صموئيل ب. (1982). "نظام التشغيل يونكس: نموذج لتصميم البرمجيات" . مجلة ساينس . 215 (4534). الجمعية الأمريكية لتقدم العلوم: 779-783 . الرقم الدولي الموحد للدوريات الإلكترونية : 0036-8075 . الرقم الدولي الموحد للدوريات المطبوعة: 1095-9203 . رقم JSTOR : 1687467. تاريخ الاسترجاع : 25 أبريل 2024 .
روابط خارجية
- تكرار مُعرّف ملف مفتوح - مرجع واجهات النظام، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group
- تعريف إعادة التوجيه من قِبل مشروع معلومات لينكس (LINFO)
- إعادة توجيه الإدخال/الإخراج في مشروع توثيق لينكس
- إعادة التوجيه في نظام التشغيل ويندوز
- إنشاء عملية فرعية مع إعادة توجيه المدخلات والمخرجات في نظام التشغيل ويندوز
- تقنية DOS
- برامج يونكس
- يونكس
- إدارة نظام التشغيل ويندوز
