أنواع الShell الموجودة فى نظام التشغيل LINUX

قبل أن نتحدث عن انواع الShell الموجودة فى اللينوكس يجب علينا أولا أن نفهم ما هو الShell .

مفهوم ال Shell :
الshell هو برنامج يقوم بالوساطة بينك وبين اللينوكس أو بالتحديد بين المستخدم وبين نواة اللينوكس
والتى تسمى الكيرنل (Kernel) حيث يقوم ال Shell بتفسير ما تقوم بكتابته فى ال prompt ويقوم تمريره الى النواة (Kernel).

ويمكن اعتبار ال Shell على أنه مفسر لغة أوامر Command Language Interpreter كما أنه يحتوى على العديد من الأوامر Commands الخاصة به ويمكنه أيضا الأستفادة من الملحقات والبرامج الموجودة فى اللينوكس ( سنوضح ذلك فيما بعد) .

أين أكتب اوامر الشيل ؟
يجب أولا ان تفرق بين برنامجيين الأول يسمى Shell والآخر يسمى Terminal .
فالShell هو مانتحدث عنه أما ال Terminal فهو البرنامج الذى يقوم بتوفير واجهة لكى تكتب فيها أوامر ال Shell ويقوم هو بتمريرها الى الShell . ويوجد أكثر من برنامج للتيرمنال Terminal مثل Konsole , Eterm ,Aterm ,…………… والعديد من البرامج الأخرى ويمكنك استخدام ما يروق لك
منها .

وكما ذكرنا سابقا أن الShell يقوم بتفسير الأوامر فعلى سبيل المثال اذا قمت بكتابة الأمر التالى :
( اذا كنت لا تعرف أين تكتب الأوامر ارجع الى المقدمة )
كود:
[ahmed@localhost ahmed]$ pwd
/home/ahmed
[ahmed@localhost ahmed]$
لقد قمت بكتابة الأمر pwd وهو اختصار ل print working directory وهو يقوم بطبع المجلد (المسار) الحالى الذى تقف عليه .
ما أريده هنا هو أن أوضح لك أن الأمر pwd أمر مبنى فى اللينوكس باش شيل (Linux bash Shell) .
لكن هناك أوامر مثل cp وهو اختصار ل copy أو rm وهو اختصار ل remove فهذان الأمران يعتبران برامج تنفيذية منفصلة وموجودة فى أحد المجلدات الخاصة بنظام ملفات اللينوكس مثل /usr/bin/ .
أرجو الا تكون قد حدث لك شيئا من التداخل و للتوضيح أكثر :

سأشرح لك المراحل التى يقوم بها ال Shell لكى يقوم بتنفيذ الأمر الذى نفذه المستخدم :
-1 أولا يقوم الشيل بفحص الأمر لكى يتأكد اذا ما كان أحد الاوامر التى المبنية فيه وإن لم يجده يقوم بالتأكد من أن الأمر أحد البرامج التطبيقية ( والبرامج التطبيقية ربما تكون أحد البرامج الموجودة فى النظام مثل الأمر ls أو rm . أو ربما يكون أحد البرامج التى تكون قد ثبتها فى النظام مؤخرا ) حيث يقوم بالبحث عن هذه البرامج التطبيقية فى المجلدات الموجودة فى مسار الشيل ( ستتعلم لاحقا كيفية اضافة البرامج الى مسار الشيل . وإن لم يجده أيضا فى البرامج التطبيقية يقوم الشيل بإظهار رسالة تفيد بإن الأمر خاطىء أو اظهار رسالة خطأ .

ويجدر بنا الأشارة هنا إلى أن الShell له ميزة أخرى وهى أنه يحتوى على لغة تفسيرية قوية جدا .وهذه اللغة تحتوى على العديد من الوظائف والأمكانيات كالتى توجد فى لغات المستوى المتقدم High level Language مثل Functions ,looping ,arrays and variables .

ويوجد سؤال هنا يجب أن نجيب عليه وهو كيف يبدأ الShell فى العمل ؟؟؟

والإجابة هى أن الShell يقوم بالعمل بعد أن تدخل الى النظام بنجاح Logged into the System ويظل الشيل هو الوسيلة الرئيسية بينك وبين نواة النظام حتى تخرج من النظام .

وكما يظهر عنوان هذه المقالة ( أو سمها كما تشاء ) يتضح أن هناك أنواع ل Shell ولكل مستخدم وجهة نظره الشخصية لذلك يمكنك اختيار أى نوع من الShell كما تشاء ولذلك اذا فرضنا أن لديك أكثر من مستخدم لجهازك فكل مستخدم لديه Shell أفتراضى خاص به ويخرن هذا الشيل الأفتراضى لكل المستخدمين فى ملف اسمه System password file أو /etc/passwd/ ويحتوى هذا الملف أيضا على الID لكل المستخدمين باإضافة الى نسخة مشفرة لكلمة السر واسم البرنامج الذى يعمل تلقائيا بعد الدخول الى النظام .
والآن نأتى الى الموضوع الرئيسيى وهو أنواع الShell :

يوجد العديد من برامج الShell المختلفة سواء كان ذلك فى نظام التشفيل UNIX أو أخونا LINUX .

ومن هذا البرامج Bourne Shell ويعرف اختصارا بإسم (sh) ويوجد أيضا C Shell ويختصر ب (csh) و يوجد ال Korn Shell ويختصر ب (ksh) ولكل من هذه البرامج المزايا والعيوب على حد سواء :

-1 Bourne Shell تمت كتابته بواسطة رجل يدعى Steven Bourne وهو الشيل الأصلى الخاص بالUNIX وموجود فى كل أنظمة ال UNIX ويعتبر أفضل الShells فى الShell programming لكنه لايوفر تفاعلا بين المستخدم والنظام كما يفعل غيره من ال Shells .
-2 C Shell كتب بواسطة Bill Joy وهو أكثر تفاعلا مع المستخدم من سابقه ولكن يعتقد الكثير أن الواجهة البرمجية له programming Interface ليست بالقوة والجدارة مثل الموجودة فى Bourne Shell
ولكن الكثير من مبرمجى لغة ال C يفضلونه لأن الSyntax ل Programming Language الخاصة به قريب من لغة ال C . ولذلك سمى ب C Shell .
Korn Shell-3 تمت كتابته بواسطة Dave Korn وقام هذا الرجل بعمل شىء رائع جدا فقد قام بجمع المزايا الموجودة فى كلا من ال csh و الbourne shell وقام بجمعهم فى شىء واحد متوافق مع ال Bourne Shell يتمتع بالتفاعل والقوة وقوة واجهته البرمجية .

ويمكن اعتبار الثلاث Shells السابقة هم الأساس ( هناك أنواع أخرى لن نتطرق اليها ) وأن ما سيأتى بعد ذلك امتدادات لهؤلاء أو تطوير لأحد البرامج السابقة .

ما سنركز عليه فى الآتى هو ثلاث برامج للShell هى:


ويجب ان تعلم أن الbash هو ال shell الأفتراضى لمعظم أنظمة اللينوكس .


The Bourne Again Shell (Bash)
BASH وهو أمتداد وتطوير ل SH وتمت اضافة بعض الأشياء الجديدة والأضافات التى حسنت من ال Bourne Shell كما أنه يحتوى على بعض مميزات الKsh و Csh .

كما أن ال bash يحتوى على واجهة برمجية قوية ومرنة كما أنه يمكنك من التفاعل مع النظام .

ولل BASH مميزات عدة منها أنه يوفر لك تسهيلات كبيرة عند كتابة الأوامر أو مسارات المجلدات التى تود الأنتقال اليها فى لحظة ما .
ولتوضيح ذلك افتح برنامج الTerminal الذى تستخدمه وكما قلنا سابقا أن التيرمينال هو البرنامج الذى تكتب فيه أوامر ال Shell ومن أمثال الTerminal برنامج Konsole وبرنامج Eterm و Kterm و Aterm والعديد من البرامج التى تختلف فيما بينها فى كيفية توفير واجهة مريحة للمسخدم .
نفذ التالى :
أكتب الأمر
********************************************************************** ***********
tcsh وهو امتداد للcsh و bourne again shell والذى يختصر ب bash وهو امتداد ل sh وأخيرا Public Domain Korn Shell وهو امتداد ل Ksh .
كود:
[root@localhost ahmed]# cd /
 [root@localhost /]#
********************************************************************** ***********
وبالتالي تكون واقفا على نظام الملفات الرئيسى .
أكتب نفس الأمر السابق لكن متبوعا بزر الtab وانظر ماذا سيحدث
********************************************************************** ***********
كود:
[root@localhost /]# cd  [tab]
bin       dev       home      lib       .mozilla  proc      sbin      tmp       var
boot      etc       initrd    mnt       opt       root      sys       usr
********************************************************************** ***********
بل جرب الأمر التالى
اكتب الأمر cd متبوعا ب حرف s ثم اضغط tab
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +
كود:
[root@localhost /]# cd s [tab]
sbin  sys
[root@localhost /]#
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +
نعم فقد قام bash بعرض كل المجلدات الموجودة فى هذا المجلد والتى تبدأ بحرف s .
-------------------------------------------------------------------------------------------------------------------------
ملحوظة: اذا كان المجلد الحالى كان لا يحتوى الا على مجلد واحد يبدأ حرف S كان الBash سيقوم بالدخول الى هذا المجلد تلقائيا .
فمثلا لو استبدلت حرف s السابق بحرف m ثم الضغط على tab سيدخل الى مجلد /mnt تلقائيا بعد ضغط Enter .
---------------------------------------------------------------------------------------------------------
أتمنى أن تكون قد لاحظت فائدة هذه الإمكانية فى ترحمك من حفظ الكثير من اﻷوامر كما سنرى :

أكتب ba فى التيرمينال ثم اضغط tab ستجده يظهر لك كل الأوامر والبرامج التى تبدأ بحرفى ba .
شىء رائع أليس كذلك وهذه الأمكانية فى الBash كفيلة بسد أفواه المتكلمين والجهلاء الذين يتهمون اللينوكس بالصعوبة بسبب كثرة الأوامر ربما يكون صحيحا أن الأوامر كثيرة لكن لو أنك تتذكر حرفا واحدا من الأمر انحلت المشكلة !!!!!
وليس هذا فحسب بل هناك ما يسمى ب Wild Card. لو كنت قد تعاملت مع جمل ال SQL وهى جمل الأستعلام وخصوصا مع جملة select فإذا أردت مثلا أن تختار السجلات التى يبدأ أسم العميل فيها بحرف a ماذا كنا نفعل ؟؟؟ بكل بساطة كنا نكتب التالى :

نحن هنا لا نتحدث عن جمل الأستعلام ولكن نتحدث عن مرونة ال Bash فجملة الأستعلام السابقة تقوم بإرجاع القيم التى تبدأ بحرف الa فمثلا لو كان بالجدول ahmed , ali , alias ,amgad,arkan ,afrakosh ,.............
فستقوم الجملة السابقة بإرجاع جميع الأسماء السابقة نفس النظام هنا فى الباش يمكنك كتابة التالى

فكتابة أو وضع * قبل أى حرف سيجعل الباش يقوم بالبحث عن كل المجلدات ( فى هذه الحالة مجلدات ربما تكون أوامر فى وضع آخر) التى تبدأ بحرف m وتنتهى بأى عدد من الحروف أو الكلمات ولو وجد مجلدا واحدا فقط هو الذى يبدأ بحرف m سيدخل إليه مباشرا أما ان كان هناك أكثر من مجلد ففى هذه الحالة سيقوم بترتيبهم أبجديا وسيدخل فى أول واحد منهم من الناحية الأبجدية .

لذلك فهذه الطريقة ليست عملية فى الحالة الأخيرة لذلك فإن ال Wildcard * يستخدم فى حالة التعامل مع الملفات المتشابهة فى الأمتداد على سبيل المثال :
لو أفترضنا أن لديك مجلدا بداخله هذه الملفات

ثم أنك تريد أن تقوم بطبع الملفات التى تنتهى بالأمتداد .doc فهناك طريقتين أما أن تقوم بكتابة اسماء الملفات كلها أو تقوم بتنفيذ الآتى بكل سهولة
select * from [table name] where name like '*a' cd m * first.doc second.doc third.doc ahmed guid
كود:
 [root@localhost etc]# lpr   *.doc
فهذه الطريقة تغنى عن
كود:
[root@localhost etc]# lpr   first.doc    second.doc    third.doc
كما يوجد العديد من Wild card Pattern من أمثال ( ? ) الذى يقوم بالأستعاضة عن حرف واحد فقط .
فكما قلنا سابقا يقوم * بالتعويض عن أى عدد من الحروف أو الكلمات لكن ؟ يقوم بالتعويض عن حرف واحد فقط .
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ومن مميزات ال bash ايضا الذاكرة أو ال History حيث أنه يقوم بحفظ الأوامر التى أدخلتها فى قائمة تخزن هذه القائمة داخل ملف يسمى فى الوضع الأفتراضى .bash_history حيث أنه عند دخولك للنظام يقوم الbash بملىء هذه الذاكرة من هذا الملف ويوجد هذا الملف فى مجلد home للمستخدم الحالى .
ملحوظة : هذا الملف من الملفات التى تبدأ ب (.) وتسمى النقطة هذه بال period وهذه الملفات يقوم النظام بإنشاءها وتكون مخبأة ( Hidden) ولكى تراها يجب عليك اظهار الملفات المخفية أو كتابة الأمر ls مع الخيار a- أى يكون الأمر هكذا
كود:
[ahmed@localhost ahmed]$ ls -a
./                         .dmrc              .kaffeine/   .openoffice/
../                        .esd_auth          .kde/        .qt/
.adobe/                    .fonts/            .kderc       .recently-used
Andal/                     .fonts.cache-1     .licq/       rhl10_files/
.appletviewer              .fonts.conf        .lyx/        rhl10.htm
.assistant/                .gaim/             .Mail/       .screenrc
.audacity                  .gconf/            .mailcap     .sversionrc
.bash_history              .gconfd/           .mcop/       .thumbnails/
.bash_logout               .gftp/             .mcoprc      tmp/
.bash_profile              .gnome/            .MdkOnline/  .tmsnc/
.bash_profile~             .gnome2/           .metacity/   .totem.ahmed=
.bashrc                    .gnome2_private/   .mime.types  .Trash/
core.5341                  .gnupg/            .mozilla/    .Xauthority
.csmashrc                  .gstreamer-0.8/    .mplayer/    .xine/
.DCOPserver_localhost__0   .gtkrc-1.2-gnome2  .nautilus/   .xmms/
.DCOPserver_localhost_:0@  .i18n*             .net_applet  .xmovierc
.desktop*                  .ICEauthority      .netbeans/   .xsession-errors
Desktop/                   JavaApplication1/  .oofficerc*
[ahmed@localhost ahmed]$




ويمكنك استدعاء الأوامر المخزنة لديك فى الHistory باستخدام أزرار UP و Down .
حيث يقوم زر Up باستعراض أخر أمر كتبته ثم الذى يليه وهكذا .
كما يمكنك استخدام زر do
wn لعمل العكس كما أنه يمكن التعديل فى الأمر الذى استدعيه من ال History باستخدام زرى Left

و Right .



كما يمكنك عرض ال History باستخدام الأمر history الذى يقوم بعرض الhistory بهذه الطريقة
 
كود:
[ahmed@localhost ahmed]$ history 
   87  mnt
   88  exit
   89  ksh
   90  exit
   91  log
   92  exit
   93  shell
   94  bash
   95  exit
   96  kwrite fstab
   97   su
   98  kdf
   99  su
  100  kde
  101  su
  102  acm
  103  bsh



تلاحظ أنه قد قام بعرض كل ما تم كتابته سابقا ولكن ماذا لو أردت مثلا عرض آخر 10 أوامر قد كتبتها
ماعليك الا أن تكتب الأمر السابق متبوعا برقم 10 هكذا

كود:
[ahmed@localhost ahmed]$ history 10
  131  pwd
  132  dir
  133  clear
  134  free
  135  ls -a
  136  free
  137 ls
  138  history
  139  history 5
  140  history 10
[ahmed@localhost ahmed]$


ولو أردت آخر خمس أوامر يمكنك كتابة رقم ٥ بعد الأمرHistory .

0 التعليقات:

إرسال تعليق

Share |
Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger