Shell
By
Amine
•
يونيو 01, 2021
•
0 Comments
Shell
هي برنامج تعمل على استقبال الاوامر منك ثم يطلب من النواة ان تقوم بتنفيذ هذه الاوامر. اي تعمل كوسيط بينك وبين نظام التشغيل او بمعنى اخر هي تمثل الطبقة الخارجية او الواجهة للنظام، فيقوم بأخذ الاوامر منك واعطائك النتيجة. ثم بعد ذلك يقوم بإظهار المحث مرة اخرى، دلالة على انهاء التنفيذ، وانتظارك لإدخال المزيد من الأوامر. لهذا السبب يطلق على ال shell بانه مفسر اوامر command interpreter وهو شبيه بالcommand.com في انظمة windows. كما يحتوي على لغة برمجة شبيهه باللغات عالية المستوى قوية جدا تستطيع من خلالها حل اي مشكلة تواجهك. وايضا أحد الميزات الهامة وهي امكانية عمل ملف يحوي على مجموعة من البرامج لأنشاء برنامج اخر وهذا يمكنك من انتاج ما يعرف بالسكربت، ويوجد الكثير من انواع ال shell ولكن الاكثر شهرة واستخداما هم نوعين رئيسيين:
·ال Bourne shell ويتضمن ال sh,ksh,bash
·ال C shell ويتضمن ال csh,tcsh
اذا كنت تستخدم احد انواع ال Bourne shell فان المحث الافتراضي لك كمستخدم هو $ اما اذا كنت تستخدم احد انواع ال C shell فان المحث الافتراضي لك كمستخدم هو %
ما هو المحث shell propmt ؟
المحث سواء كان كذا % او كذا $ فهو يعتمد على نوع ال shell الذي تستخدمه ، فعندما يظهر المحث يعني ان الشل ينتظر منك كتابة الاوامر لكي ينفذها واذا كنت قد دخلت الى النظام كجذر ROOT اي مدير نظام فان المحث # سوف يظهر لك. وفيما يلي نستعرض ميزات وعيوب كل نوع من انواع ال shell بشكل سريع:
النوع الاول ويشمل:
الـــ Bourne shell ويرمز له بــ sh الـــ Korn shellويرمز له بــ ksh الـــ Bourne againshell ويرمز له الـــ bash
·النوع الثاني ويشمل:
الـــ C shell ويرمز له بــ csh الـــ TENEX/TOPS C shell ويرمز له بــ tcsh
بداية الـــ shell كانت مع Bourne shell حيث قام stephen R.Bourne بكتابته على نظام unix وذلك في منتصف 1970 في معمل AT&T. لذلك يطلق البعض عليه اسم الشل “The Shell” وذلك لانه الاول ظهورا. يوجد هذا الـــ shell عادة في المسار /bin/sh وكما ذكرت سابقا فال الـــ shell عبارة عن مفسر أوامر وكذلك يحوي لغة برمجة تستخدم صيغةsyntax لغة الـــ ALGOL ، وتحوي الاشياء التالية:
متغيرات، دوال، اوامر تحكم في سير البرنامج، اوامر تكرار، اوامر معالجة، تعابير رياضية…الخ
وتشترك جميع انواع الBourne-type في هذه الميزات.. لكن ما يعيب هذا النوع الاصلي هو الصعوبة في الاستخدام.. حيث لا يوجد خاصية اكمال النص تلقائي ، وكذلك لا يوجد خاصية حفظ الاوامر التي تم تنفيذها.
وبعد 10 سنوات اي في 1980 قام Bill joy بكتابة الـــ C shellحيث تلافى الصعوبة التي وجدت في النوع السابق وايضا جعل الصيغة syntax من ALGOL الى صيغة لغة ال C
ومن الميزات التي وجدت فيه:
خاصية اكمال النص، حفظ الاوامر المكتوبة سابقا . وعادة نجد هذا الـــ shell داخل المسار /bin/csh
واما عيوبه فهي: ضعف في دعم عمليات الادخال والاخراج يفتقر الى الدوال ، لذلك فهو غير محبذ للبرمجة، فقط للاستخدام .
اما الـــ TENEX/TOPS C shell ويرمز له ب tcsh فهو عبارة عن نسخة محسنة من الـــ cshell حيث اضافات العديد من الميزات ،منها استخدام الاسهم( اعلى – اسفل) لمشاهدة الاوامر التي تم تنفيذها وكذلك السهم (يمين-يسار) لتعديل هذه الاوامر. في هذا الزمن،، وبعد ان توفر نوعين من ال shell قام David Korn في AT&T بكتابة الـــ Korn shell ويرمز له بــ ksh
وقد جمع فيه سهولة الـــ C shell ، وكذلك صيغة ال Bourne shell فأصبح الـــ ksh هو الخيار المفضل للعديد من المستخدمين .
وبشكل عام يعتبر الـksh متوافق مع النوع الاول وهو الـsh فالأوامر نفسها تعمل في كلتيهما باستثناء بعض الاشياء والتي سنتطرق لها في حينها . ويوجد 3 نسخ من هذا الشل وهي:
الـOfficial ويرمز لها بــksh وهي التي تحدثنا عنها والـ Public domain ويرمز لها بــ pdksh واخيرا نسخة الـ Desktop ويرمز لها بــ dtksh. ويستخدم مبرمجو الـshell غالبا النسخة الاولى والثانية اما الثالثة dtksh فهي لمستخدمي الــ Shell ويوجد الــ ksh عادة في المسار /bin/ksh او /usr/bin/kshاما النسخ الاخرى فيمكن تنزيلها من النت اذا لم تأتي مع نظامك.
واخيرا الــ Bourne again shell وهو الشل المستخدم حاليا في معظم التوزيعات حيث قام مطوره Brian fox بجمع الميزات السابقة ووضعها فيه لذلك اصبح هو المفضل حالياويوجد عادة في المسار/bin/bash او المسار /bin/sh حيث اصبح هو الشل الافتراضي.
متى يبدأ الشل بالعمل ومتى ينتهي؟
عند الدخول الى النظام، يبدأ برنامج getty بالعمل حيث يطلب منك كتابة اسم المستخدم والباسووردثم يقوم بتمريرها الى برنامج login الذي يتأكد من البيانات المدخلة ، وذلك بمقارنتها مع /etc/passwd ويظهر كالتالي مثلا:
SudaNix:x:500:500:ahmad:/home/SudaNix:/bin/bash
وفي حال المطابقة سوف يتم تنفيذ الشل الموجود في الملف ، وفي هذه الحالة هو/bin/bash وعندما تعمل تسجيل خروج ينتهي عمل الــ Shellولتغير نوع الشل قم بتغيره من خلال كتابة الامر: /bin/csh هنا تم التغيير الى Cshell وللخروج اكتب الامر exit
·الشل التفاعلي وغير التفاعلي!!
عندما يظهر لك المحث prompt هذا يعني ان الشل يعمل بشكل تفاعلي interactive واعني بشكل تفاعلي اي انه ينتظر منك ان تكتب الاوامر لكي ينفذهاوهذا هو الوضع الطبيعي المألوف حيث تقوم بالدخول الى النظام ، عندها يبدأ الشل بالعمل .. ثم تقوم بكتابة بعض الأوامر، وتخرج من النظام حيث يقوم الشل بالوقوف عن العمل.
ويناقضه الشل غير التفاعلي:
ويعني انه لا يوجد اي تفاعل بينك وبين الشل اي انه لن ينتظر منك ان تكتب اي أوامر ، حيث يقوم بتنفيذ اوامر محفوظة داخل ملف وعندما يصل الى نهاية الملف يتوقف عن العمل وهذا ما يعرف بالسكربت .والان بعد ان تعرفنا على الشل وانواعه، بقي ان نستعرض مفهومين اساسيين هما:
الاوامر commands
الامر هو عبارة عن برنامج program تستطيع تشغيله وذلك بكتابة اسمه ثم الضغط على enter. مثال: الامر date يقوم بإظهار اليوم، ا لتاريخ، الساعة.لاحظ ان المحث $ قد عاود بالظهور مرة اخرى وهذا يدل على ان البرنامج قد انتهى من التنفيذ..
مثال اخر: الامر who يقوم بإظهار اسماء كل مستخدمين هذا النظام بالإضافة الى بعض المعلومات و يوجد عدة انواع من الاوامر,,وهي الاوامر البسيطة ،المركبة ، المعقدة.
الاوامر البسيطة simple commands
واضح من اسمها انها بسيطة اي تحوي فقط اسم البرنامجمثل الامرين السابقين date , who وكذلك العديد من الاوامر التي سأتطرق لها فيما بعد.
الاوامر المعقدة complex commands
هو عبارة عن اسم البرنامج البسيط مضافا اليها واحد او اكثر من الوسائط arguments . مثال لكي يتضح لناالامر:
who كما ذكرنا يعطيك معلومات عن جميع المستخدمين واوقات دخولهم للنظام ولكن بكتابة الامر: who am i سوف تأتيك معلومات عنك فقط. اسم المستخدم الذي تعمل عليه وكذلك وقت دخولك للنظام. اذن am وi عبارة عن وسائط تدخل على الامر who فتعدل من سلوكه. ومعظم الاوامر الموجودة تقبل العديد من الوسائط التي تغير طريقة عملها الافتراضية وسوف نرى ذلك لاحقا.
الاوامر المركبة compound commands
هي عبارة عن اوامر تجمع ما بين الاوامر البسيطة والمركبة..ويتم الفصل بينهما باستخدام الفاصلة المنقوطة semicolon ; مثال الامر : date ; who am i ;
يقوم هذا الامر المركب بتنفيذ الامر البسيط date اولا ثم ينفذ الامر المعقد whoam i ويتم الفصل بين الاوامر باستخدام الفاصلة المنقوطة وفي حالة عدم وضعها ،اي تم كتابة الامر على الشكل : date who am iسيحدث خطا.. ولن ينفذ شيء وستاتيك رسالة خطا لان هذا المفسر اعتقد بان date هو الامر او البرنامج، وان who am i عبارة عن وسائط له وهذا خطا
ومن الجدير بالذكر هو انك تستطيع كتابة الفاصلة المنقوطة في نهاية اي امر سواء كان مركبا او بسيطا او معقد مثلا الامر: date; والنتيجة نفس نتيجة الامر date
ملاحظة اخيرة على الاوامر:
وهي عند كتابة اي امر وقبل تنفيذه يقوم الشل بالتأكد من وجوده في مسار محدد PATH في حالة وجود الامر او البرنامج فيه يقوم بتنفيذه ،، وفي حالة عدم وجوده يعطيك الخطأ command not found
ما هو الشل سكربت shell script ؟
هو عبارة عن ملف به مجموعة من الاوامر لتأدية غرض معين، حيث يقوم الــ shell بتنفيذها بشكل غير تفاعلي سيتضح لك التعريف من خلال المثال الاتي: مثلا يحتوي صندوق النجار على ادوات (مفكات ، مسامير ، خشب ، مطرقة … الخ ). يستطيع من خلالها بناء كراسي ، طاولات ، دواليب … الخ. فباستخدام نفس الادوات ولكن بتركيبة معينة يستطيع بناء اي شيء يريده..
هذا المثال يشبه الــ shell scripting تماما. فلبناء اي شيء تريده يجب ان تستخدم الادوات الصحيحة ويطلق عليها اوامر او برامج ، وقد تم ذكرها في الاعلى.
كتابة اول shell script : افتح اي مستند – ملف Text – وقم بكتابة الاتي:
date;who;
وقم بحفظ الملف باي اسم وليكن sudanix
الان تقوم بنتفيذ هذا السكربت ، قم بكتابة :
/bin/bash sudanix
الان سوف تظهر النتيجة وهي عبارة عن ناتج الامر date وناتج الامر who .
تحويل السكربت الى سكربت قابل للتشغيل executable ؟؟
واحدة من اهم الخطوات ،، لكي نجعل الملف قابل للتنفيذ.. اي نقوم بتنفيذ بواسطة اسمه فقط. هي:
تحويل الملف الى ملف قابل للتنفيذ عن طريق الامر
chmod a+x ./sudanix
ولكن يجب علينا ان نتأكد من نوع الشل الذي سوف يستخدم.. ولاننا لا نضمن ان يكون كل مستخدمي الشل يعملون على bash ،سوف نضيف هذا السطر الى بداية السكربت.. ووظيقته هو تشغيل الشل المحدد في الملف :
#!/bin/bash
مع ملاحظة ان يكون هذا السطر في بداية السكربت .وبالتحديد في اول سطر !! والا سيتم اهماله .. اي سيصبح السكربت كالتالي:
#!/bin/bash
date;who;
الان لتنفيذ هذ السكربت اكتبه على الشكل الاتي مع ملاحظة ان تكون في نفس المجلد الذي يحوي السكربت.
./sudanix
طبعا هذا مثال بسيط جدا.. لم نستخدم فيه اي برمجة.. ولكن لكي تأخذ فكرة عنه