كيفية استخدام الأمر tee في تظام Linux

إذا سبق لك استخدام pipe وإعادة التوجيه من خلال shell على Linux ، فمن المحتمل أنك ستحتاج أيضًا في بعض الأحيان إلى الاستفادة من الأمر tee المساعدة.

صورة لـ كيفية استخدام الأمر tee في تظام Linux | 1_tee-featured-800x400-min-DzTechs

ماذا يفعل tee؟

أمر مثل

ls

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

أمر مثل

ls > file123

سيعرض شيئا على الشاشة. ذلك لأن الإشارة > تعيد توجيه كل الإخراج إلى ملف بدلاً من عرضه على stdout. سيتم الآن ملء file123 بالمحتويات التي سبق عرضها على الشاشة.

لعرض محتويات الدليل الخاص بك على الشاشة وكالتابة على هذا الملف ، يمكنك استخدام أمرين. مع tee يمكنك القيام بكل من هذه الأشياء في وقت واحد.

ls | tee file123

لماذا عليك استخدم Tee إذا كان بإمكانك تشغيل أمر مماثل مرتين؟

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

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

/sbin/blkid > /root/somefile

بعد ذلك ، قد تعتقد ، “حسنًا ، بالطبع ، فقط استخدم sudo!” وستندهش من أن هذا لا يعمل أيضًا:

sudo blkid > /root/somefile

هذا لأنه بعد تنفيذ sudo blkid ، لا تزال تسجّل دخولك كمستخدم عادي وغير أساسي. ويحاول shell (عادةً bash) الكتابة إلى /root/somefile باستخدام بيانات اعتماد المستخدم العادية. لحل هذا ، يمكنك استخدام tee:

/sbin/blkid | sudo tee /root/somefile

إلحاق النص وإعادة توجيه الأخطاء

tee أمر مفيد ولكنه بسيط ؛ أمر أساسي | tee somefile يكفي في معظم الأحيان. ومع ذلك ، هناك سيناريوهان قد تصادفهما ويتطلبان هذه النصائح.

أول ما يجب معرفته هو أن tee يقوم افتراضيًا بالكتابة فوق ملف. اذا قمت بتشغيل

ls | tee somefile

وثم

ls /tmp | tee somefile

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

ls | tee -a somefile

الشيء الثاني الذي يجب معرفته هو أنه ليس كل الإخراج هو نفسه. يتم التعامل مع رسائل الخطأ بشكل مختلف ، وعلى الرغم من ظهورها على الشاشة ، إلا أنها لا تُعتبر stdout ، لذلك لن يتم ملاحظتها بواسطة tee. (يعتبر stderr.) هنا مثال على grep.

grep -r L2TP /etc | tee somefile

سيتم عرض شيء مثل الصورة التالية.

صورة لـ كيفية استخدام الأمر tee في تظام Linux | tee-grep-output-min-DzTechs

رسائل رفض إذن مكتوبة إلى stderr. الشيء الوحيد المكتوب إلى stdout هو النص المميز. لهذا السبب ستلاحظ أن محتويات “somefile” هي ما يظهر في الصورة أدناه.

صورة لـ كيفية استخدام الأمر tee في تظام Linux | tee-grep-file-contents-min-DzTechs

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

grep -r L2TP /etc 2>&1 | tee somefile

مع هذا الأمر ، ستلاحظ أن somefile الآن يحتوي أيضًا على رسائل الخطأ.

الخلاصة

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

زر الذهاب إلى الأعلى