المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : المحاضرة الرابعة من كورس RHCE من جامعة عرب هاردوير



b7lmbeek
27-01-2009, 06:10
السلام عليكم ورحمة الله وبركاته

آسف جدا يا أخوانى على التأخر فى وضع الشرح الكتابى لبقيت المحاضرات

لكن الحمد لله هنرجع للشرح مرة تانية

Unit 7

Standard I/O and Pipes
المحاضرة هى الرابعة وتعتبر ال lab 3 فى الشرح الفيديو



ما هوا الStandard input و Standard output و Standard error




Linux provides three I/O channels to Programs
Standard input (STDIN) - keyboard by default
Standard output (STDOUT) - terminal window by default
Standard error (STDERR) - terminal window by default
نرجع لأول مرة درسنا حاسب الى فى حياتنا

سمعنا عن التالى فى الهاردوير الخاص بالجهاز :

المدخلات والمخرجات والعمليات

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

حتى الآن شىء جميل

ماذا يفيد هذا فى شرحنا وكلامنا السابق

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

هذه الأوامر هى عبارة عن ال Standard input

يعنى مثلا كتبت للشل عبارة أو أمر :


ls -alR /etcهذا هو المدخل الذى نقوم بإدخاله الى النظام او الشل

ومن ثم بعد هذا الأمر يقوم السيستم بالرد عليك بإعطائك قائمة طويلة جدا جدا جدا

رد السيستم أيا كان هوا عبارة عن Standard output وهو رد صحيح للعمليه
أى أن ما طلبته من السيستم شىء منطقى وقام بالرد عليه فى هيئة قائمة من
الملفات والتصاريح الخاصة بها والملفات أسفل المسارات بكافة الأشكال

ولكن لنفرض أننا قمنا بإعطاء السيستم أمر ما ونتج عنه مجموعة من الأخطاء التى ظهرت لك فى نافذة الترمينال

يعتبر هذا الخطأ الظاهر لك هوا عبارة عن Standard error

وليكن مثلا :


ls -alR /kimotopalansary
ls: cannot access /kimotopalansary: No such file or directory
ناتج العملية السابقة كما هوا ظاهر لديك السيستم يخبرك بعدم وجود هذا المسار

انتهينا من النقطة الأولى



Redirecting Output to a File
ما معنى السطر السابق

هو تحويل المخرجات الى ملف معين أو إلى مسار معين

فمثلا :
عند تنفيذ الأمر التالى :

ls -alR /etcيكون الناتج كبير جدا جدا لدرجة انى لن أستطيع قراءة كامل الناتج ولهذا فأنا لاأستفيد بالأمر الذى أعطيته للنظام
وهنا أقوم بعمل أمر للسيستم أوجه فيه له أن يخرج لى المخرجات إما ى ملف أو يظهر مجزء على الشاشة على قدر حجم الشاشة فقط
أى أننى أقوم بتحويل المخرجات الى مكان معيا فى النظام او الى ملف معين او اقوم باخراجه الى عمليه أخرى مثلا

دعنا نستعرض مثال :


ls -alR /etc >/root/kareem.txt
قم بالذهاب الى المسار /root ثم قم بعرض الملف kareem.txtماذا تلاحظ ؟؟؟
ظهور قائمة بكافة ملفات السيستم فى المسار الذى طلبت منه استعراضهاموجودة فى قائمة داخل الملف

كيف حدث هذا

حدث عن طريق تحويل المخرجات كلها الى ملف موجود فى مسار معين واذا كان الملف غير موجود يقوم السيستم بإنشاؤه لك

بمعنى آخر : كيف يمكننى التعامل مع هذه الإختصارات ؟؟؟ وكيف يتم كتابتها ؟ وما المفيد فيها ؟؟؟


# > Redirect STDOUT to file تقوم هذه العلامة بتوجيه المخرجات الصحيحة عن طريق العلامة التالية ( < ) وتقوم بتحويل ال standard output الى المسار المذكور فى الأمر

هذه العلامة تقوم بتحويل ال ( <2 ) ال Standard error الى ملف معين او مسارا معينا وهى المخرجات الخاطئة الى مسار معين

بينما هذه العلامة


&> Redirect all output to file تقوم بتحويل كامل الoutput الى مسار او الى ملف معين


ما فائدة تحويل الإيرور الناتج عن عمليه ما الى ملف معين ؟؟؟؟

احيانا تحتاج الى معرفة كافة البيانات الخاصة بالايرور لتعرف كيفية التغلب على هذا الايرور ومعرفة السبب الأساسى لوجوده

أمثلة على تحويل الايرور او تحويل ال output الى مسار معين أو تحويل الأيرور الى مسار معين



ls -l /etc | lessهنا يقوم النظام باخراج ناتج الامر جزء صغير و جزء صغير على حسب حجم الشاشة او الترمينال عندك
فيظهر صفحة صفحة وتتحرك فيه بالاسهم او بالبكره فى الماوس


ls -l /root/kareem >kimo.txtيقوم الامر السابق بنقل ناتج الأمر الى ملف معين لديك فى النظام وبفتح الملف يظهر لك كافة الناتج الخاص بالامر


ls -alR /dev/1kjfdvasd /etc 2>kimo.txt >kimo1.txtالامر هنا عبارة عن طلب من السيستم بعرض محتويات مسارين مختلفين وهما

/dev/1kjfdvasd
/etcثم توجيه ناتج كل عمليه منهما الى ملف معين فالايرور يتم تحويله الى kimo.txt والناتج الصحيح يتم تحويله الى kimo1.txt
هنا نلاحظ أن المسار المطلوب عرض الملفات بيه غير موجود اصلا وهذا ينتج عنه إيرور معين والمسار الاخر يكون له ناتج فيقوم الملف بتوجيه الايرور الى الملف kimo.txt والناتج الصحيح يقوم بتوجيهه الى الملف kimo1.txt


وفى الامر التالى يمكننا توجيه كافة النواتج الى ملف معين وهنا يقوم بتوجيه الايرور والناتج الصحيح الى هذا الملف كما يلى outputall


# ls -alR /dev/1kjfdvasd /etc &>outputall.txtولكن تظهر لنا مشكلة وهى ان كلما يتم إضافة ايرور معين او ناتج عمليه صحيحه معين الى ملف يتم حذف السابق فى الملف والكتابه من جديد ( يعنى بيمسح ويكتب من الاول جرب وشوف كالتالى ):


1-#ls -l /root >1.txt
2-#cat 1.txt
3-#ls -l /etc >1.txt
4-#cat 1.txt |lessنلاحظ اختفاء ناتج العملية الاولى وظهور ناتج العملية التانية فقط فى الامر رقم 4

كيف يمكننى وضع كافة الأخطاء والنواتج فى ملف واحد بدون مسح محتويات الملف السابقة ؟؟؟؟

مثال يوضح كيف يتم هذا :


1-#echo "Arabhardware.net">1.txt
2-#cat 1.txt
3-#echo "b7lmbeek" >>1.txt
4-#cat 1.txt
ويكون الناتج
Arabhardware.net
b7lmbeek
----
ننتقل الى أمثلة أقوى


$ find /etc -name passwd
يعنى انا بقول للسيستم يدورلى جوا ال/etc عن ملف معين اسمه passwd
طبعا فى اوبشن مختلف اخر اسمه iname بحيث انى لو طلبت منه يبحث عن ملف اسمه pAsSwD فهوا هيدور على الملف دا بنفس الشكل للحروف دى وهيجيبه برده ومش هيجيب غيره

طيب نحاول تنفيذ الأمر
وطبعا بيخرج لك مكان الملف بكل بساطة

طيب نحاول ندور بشكل تانى


find /etc -name passwd > fm.txtهنا شوف الناتج للعملية دى هتلاحظ انه طلع لك كل الملفات اللى بتحتوى على كلمه passwd


find /etc -name passwd > /dev/null
يعنى ايه ؟؟؟
وايه المكان الى انا وجهت له الايرور ؟؟؟؟
المكان اللى وجهت له الايرور هوا عبارة عن ثقب أسود فى السيستم يعنى اللى بيروح هناك مبيرجعش تانى او بيتمسح بشكل نهائى او بيروح للامكان

طيب مثال كمان


$ find /etc -name passwd > find.out 2> find.errالحالة دى شرحتها قبل كدا

نأتى لنقطة تانية فى الشرح وهى pipes

يعنى بيحول من ال standered out الى programm


#command1 | command2 | command3... etcيعنى مثلا ناتج عمليه انا قمت بيها فى السيستم باخد المخرجات بتاعته وبقوم بادخالها فى عمليه تانية خالص عن طريق ( ماسورة بالبلدى يعنى )

مثال بسيط


cat /etc/passwd
cat /etc/passwd |grep "root"
cat /etc/passwd |grep "root" |grep "^root" |cut -f7 -d":"هنا ببساطة الامر الاول عمل اظهار فى الشل للملف ال/etc/passwd
الامر التانى هيطلع السطر اللى فيه الكلمة اللى أمرته بيها root
السطر التالت هيجيب السطر اللى بدأ ب root
الامر الاخير هيقوم بعمل cut يعنى قطع للحقل السابعf7 حينما يكون الفاصل هوا ":"
وهنا يكون الناتج


/bin/bashمثال تانى :

#$ echo "test email" | mail -s "test" root@kareem-desktopهوا هنا يقوم بطباعة الامر test email
ومن ثم يقوم بتحويلها الى امر اخر نقوم بارساله الى يوزر اخر او ايميل من خلال الامر mail والاوبشن التالى له -s هوا عنوان الرساله وفى النهاية تكتب الميل الذى سيتم الارسال الرساله اليه وهوا التالى root@kareem-desktop ثم Enter

طيب وافتح الميل اللى جالى ازاى ؟؟؟؟

عن طريق الامر mutt
ولو مش شغال معاك استعمل فى الاوبنتو لينوكس

#sudo apt get install muttثم تقوم بالاختيار الايميل وتضغط انتر ويظهر لك محتوى الرساله ( لازم تجرب بايديك )


To: root@kareem-desktop
Subject: this is testmail
From: root <root@kareem-desktop>

testmailهنا الميل اللى انا بعته

دا ابسط مثال لل | pipe line

استعمال اخر

#$ command1 | tee filename | command2الامر السابق يقوم بتنفيذ الكوماند رقم 1 اولا ثم يقوم بتمرير الناتج عن طريق pipe line الى الامر tee الذى يقوم بدوره بإنشاء ملف يحمل كافة مخرجات الكوماند الاول ثم يقوم بتمرير الملف بالكامل الى الكوماند رقم 2 لعمل عمليه معينه عليه

مثال

#cat /etc/passwd | tee kimotop | grep "root" |grep "^root" | cut -f7 -d ":"الناتج من العملية

#/bin/bashثم قم بتنفيذ الامر التالى تجد أن ناتج الامر الاول يظهر بالملف بالكامل


#cat kimotop |lessمثال اخر


$ ( cal 2007 ; cal 2008 ) | lessذكرنا من قبل أنه لكتابه اكثر من امر فى نفس السطر نقوم بوضع ال ; بينهم

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




echo "kareem" |tr 'a-z' 'A-Z'والامر tr هنا هيحول الكلمة من small الى كابتل



تعالى ننفذ حاجة مهمة جدا

وهى Sending Multiple Lines to STDIN

يعنى انا بوجه كذا سطر لعمل امر واحد
زى اسه مثلا ؟؟؟

تعالى معايا نكتب الامر التالى :

مثلا أمر الميل


#mail -s "kareem write multi lines" root@kareem-desktop <<END
> Hi Jane,
>
> this is a try for anew method in linux
> eshta fa7t
>
> Details later
> krkr
> END
الملاحظ هنا ان الباش فضلت تستقبل منك أوامر بدون توقف و سابتك تكتب السطور دى كلها

لحد اما انته كتبت الكلمة END وهى نفسها اللى كتبتها فى السطر الاول

لما انته كتبتها فى السطر الاول الباش ملقتش الامر اكتمل ولا لقت لها معنى فسابتك تكتب لحد اما وصلت للجزء اللى خلصت انته فيه وقلت لها انا خلصت

طبعا END دى ممكن تكون اى حاجة تانية ان شاء الله حتى &#$@ او حتى حرف واحد
يعنى الباش بتستنى لحدا اما الامر يكمل او انته تضيف حاجة تعطى له معنى (افتراض حسن النية من الباش )
نأتى الى أداه تانية فى ال bash

وهى ال for -loop

انا عايز حاجة تتنفذ اكتر من مرة فبرميها فى اللوب دا

يعنى عايز اكريت ملف واحد اكتر من مرة او اخزن اكتر من قيمة فى اكتر من ملف
استخداماتها كتيرة جداااااااااااا

مثال :-- ......
انا عايز اكريت عشر ملفات فى فولدر معين
هعمل ايه ؟؟؟


#mkdir test
#cd test
#for i in 'seq 1 10'
#do
#touch file$i
#doneاعمل بقى ls
هتلاقيه عمل عشر ملفات بنفس الاسم file مع اختلاف الاسم بالارقام اللى فى المتغير i


ال i هنا عبارة عن قيمة او variable معين ممكن يتعوض داخله باى حاجة

يعنى جوا كل i حيث ال i من 1-10 فيقوم يروح يعمل الاوامر اللى معاه مضيف عليها الجزء السابق الخاص بالتعويض عن i لحد اما يوصل للاخر العد او الهارد يتملى :)

يعنى لو عايز اضيف او احذف جزء على الف ملف مثلا فبقوم بعمل الاتى :

اول حاجة هجيب اسماء الملفات اللى عايز اغير فيها فى ملف مثلا krkr.txt

بعمل for واسماء الملفات وبقوله cat للملف وبعدين echo الجزء اللى عايز اضيفه ثم append او >> بحيث انه يعمل الاضافة مش يمسحهم كلهم

اتمنى أكون وفقت فى التوصيل

وطبعا كل اللى كتبته من الفيديو والملاحظات اللى بيشرحها المهندس مصطفى

اتبقى محاضرة سابقة والمحاضرة بتاعت امبارح يعنى محاضرتين وتبقوا متابعين معانا أول بأول :)

الفيديو موجود للى محتاجه يعنى مش كتابه بس

بالتوفيق للجميع ان شاء الله

وبحثت فى النت أثناء السهر المتواصل ووجدت كتاب ماتريال كويسة يارب تعجبكم والمهندس مصطفى يوافق عليها :)

حصريا لكورس الريدهات احضرت كتاب مميز Red Hat Certified Engineer Linux Study Guide (https://www.arabhardware.net/forum/showthread.php?t=107770)
دعواتكم للمهندس مصطفى لانه بيتعب معانا جامد يا جماعة والله اكتر مما بيظهر لكم فى الفيديو

ومتنسونيش برده بدعوتين :)


أخوكم
كريم عبد القادر:ah40:

ahab
27-01-2009, 08:08
يسعدني إني أكون أول واحد يرد عليك :

بصراحة عمل ممتاز

وجزاك الله كل خير أنت والباشمهندس مصطفى وجميع فريق العمل وجعله في موازيين حسناتكم

adam black ice
27-01-2009, 11:07
رجاء يا كريم تعمل المحاضرات دى فى pdf من فضلك وابقى شاكر لمجهوداتك جدا جدا :)

flwcx
27-01-2009, 11:59
يا جامد يا كريم اية يابني الجمال دة بجد حاجة ممتازة اوي
ياريت فعلاً تعمل الكلام دة في pdf افضل يعني بنتقل عليك
بس ممتاز يا كيمووووووووووووووووووووووووو

7amasa7
27-01-2009, 12:24
والله يا كيمو شغل جامد اوى ومجهود جامد منك اسأل الله ان يكون فى ميزان حسناتك ان شاء الله

ودايما مستنيين مفاجأت منك يا باشا وياريت فعلا تظبطلنا الشرح دا فى pdf

جزاك الله كل خير

aldesha989
27-01-2009, 14:58
اولآ اشكرك على الدرس الجميل ويبدو انه شيق وجميل لى عوده بأذن الله لقراءه الدرس بتمعن وسوف اضع ملاحظاتى بأذن الله

mohamed2121
27-01-2009, 14:59
الله ينور ياكريم
تم تحويله الى
PDF

https://www.4shared.com/file/82738834/a8c22c0c/lab4.html

وموجود فى فولد التحميل على shared

clerck
27-01-2009, 15:26
ايه ياعم الجمال ده
ماشاء الله عليك
ان شاء الله انتظرو مني مفاجأه لتغطيه الكورس
هي هتبقي ملحق للاوامر وكلمه عنها باختصار وليس شرح كامل بحيث من يحتاج اي معلومه بأختصار يرجع اليها
بس هي اكيد هتاخد وقت بعد الشرح الجامد بتاع استاذي مصطفي والشرح الجامد بتاع كيموا

mahmoud saad
05-02-2009, 14:09
جزاك الله خيرا يا كريم والله شرح جامد ربنا يوفقك

elabyad
05-02-2009, 14:19
جزاك الله خير
سباق للخير دائما يااخي ......

نفعك الله بما نفعتنا
وزادك علما