أوامر الشيل
المرسل: أحمد شاهين التاريخ: 2007/7/12 13:46 المشاهدات: 577 التقييم: 10.00/5

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

مقدمة عن أنواع الشيل الموجودة فى اللينوكس

قبل أن نتحدث عن انواع الShell الموجودة فى اللينوكس يجب علينا أولا أن نفهم ما هو ال Shell .
مفهوم ال Shell :
الshell هو برنامج يقوم بالوساطة بينك وبين اللينوكس أو بالتحديد بين المستخدم وبين نواة اللينوكس
والتى تسمى الكيرنل (Kernel) حيث يقوم ال Shell بتفسير ما تقوم بكتابته فى ال prompt ويقوم تمريره الى النواة (Kernel).
ويمكن اعتبار ال Shell على أنه مفسر لغة أوامر Command Language Interpreter كما أنه يحتوى على العديد من الأوامر Commands الخاصة به ويمكنه أيضا الأستفادة من الملحقات والبرامج الموجودة فى اللينوكس ( سنوضح ذلك فيما بعد) .
أين أكتب اوامر الشيل ؟
يجب أولا ان تفرق بين برنامجيين الأول يسمى Shell والآخر يسمى Terminal .
فالShell هو مانتحدث عنه أما ال Terminal فهو البرنامج الذى يقوم بتوفير واجهة لكى تكتب فيها أوامر ال Shell ويقوم هو بتمريرها الى الShell . ويوجد أكثر من برنامج للتيرمنال Terminal مثل Konsole , Eterm ,Aterm ,…………… والعديد من البرامج الأخرى ويمكنك استخدام ما يروق لك
منها .
وكما ذكرنا سابقا أن الShell يقوم بتفسير الأوامر فعلى سبيل المثال اذا قمت بكتابة الأمر التالى :
( اذا كنت لا تعرف أين تكتب الأوامر ارجع الى المقدمة )
[[email protected] ahmed]$ pwd
/home/ahmed
[[email protected] 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 هى:
tcsh وهو امتداد للcsh و bourne again shell والذى يختصر ب bash وهو امتداد ل sh وأخيرا Public Domain Korn
Shell وهو امتداد ل Ksh .
ويجب ان تعلم أن الbash هو ال shell الأفتراضى لمعظم أنظمة اللينوكس .
Bourne Again Shell (Bash)
BASH وهو أمتداد وتطوير ل SH وتمت اضافة بعض الأشياء الجديدة والأضافات التى حسنت من ال Bourne Shell كما أنه يحتوى على بعض مميزات الKsh و Csh .
كما أن ال bash يحتوى على واجهة برمجية قوية ومرنة كما أنه يمكنك من التفاعل مع النظام .
ولل BASH مميزات عدة منها أنه يوفر لك تسهيلات كبيرة عند كتابة الأوامر أو مسارات المجلدات التى تود الأنتقال اليها فى لحظة ما .
ولتوضيح ذلك افتح برنامج الTerminal الذى تستخدمه وكما قلنا سابقا أن التيرمينال هو البرنامج الذى تكتب فيه أوامر ال Shell ومن أمثال الTerminal برنامج Konsole وبرنامج Eterm و Kterm و Aterm والعديد من البرامج التى تختلف فيما بينها فى كيفية توفير واجهة مريحة للمسخدم .
نفذ التالى :
أكتب الأمر
[[email protected] ahmed]# cd /
[[email protected] /]#


وبالتالي تكون واقفا على نظام الملفات الرئيسى .
أكتب نفس الأمر السابق لكن متبوعا بزر الtab وانظر ماذا سيحدث
[[email protected] /]# cd [tab] bin dev home lib .mozilla proc sbin tmp var
boot etc initrd mnt opt root sys usr


بل جرب الأمر التالى
اكتب الأمر cd متبوعا ب حرف s ثم اضغط tab
[[email protected] /]# cd s [tab] sbin sys
[[email protected] /]#


نعم فقد قام bash بعرض كل المجلدات الموجودة فى هذا المجلد والتى تبدأ بحرف s .
————————————————————————————————————————-
ملحوظة: اذا كان المجلد الحالى كان لا يحتوى الا على مجلد واحد يبدأ حرف S كان الBash سيقوم بالدخول الى هذا المجلد تلقائيا .
فمثلا لو استبدلت حرف s السابق بحرف m ثم الضغط على tab سيدخل الى مجلد /mnt تلقائيا بعد ضغط Enter .
———————————————————————————————————
أتمنى أن تكون قد لاحظت فائدة هذه الإمكانية فى ترحمك من حفظ الكثير من اﻷوامر كما سنرى :
أكتب ba فى التيرمينال ثم اضغط tab ستجده يظهر لك كل الأوامر والبرامج التى تبدأ بحرفى ba .
شىء رائع أليس كذلك وهذه الأمكانية فى الBash كفيلة بسد أفواه المتكلمين والجهلاء الذين يتهمون اللينوكس بالصعوبة بسبب كثرة الأوامر ربما يكون صحيحا أن الأوامر كثيرة لكن لو أنك تتذكر حرفا واحدا من الأمر انحلت المشكلة !!!!!
وليس هذا فحسب بل هناك ما يسمى ب Wild Card. لو كنت قد تعاملت مع جمل ال SQL وهى جمل الأستعلام وخصوصا مع جملة select فإذا أردت مثلا أن تختار السجلات التى يبدأ أسم العميل فيها بحرف a ماذا كنا نفعل ؟؟؟ بكل بساطة كنا نكتب التالى :
select * from [table name] where name like ‘*a’
نحن هنا لا نتحدث عن جمل الأستعلام ولكن نتحدث عن مرونة ال Bash فجملة الأستعلام السابقة تقوم بإرجاع القيم التى تبدأ بحرف الa فمثلا لو كان بالجدول ahmed , ali , alias ,amgad,arkan ,afrakosh ,………….
فستقوم الجملة السابقة بإرجاع جميع الأسماء السابقة نفس النظام هنا فى الباش يمكنك كتابة التالى
فكتابة أو وضع * قبل أى حرف سيجعل الباش يقوم بالبحث عن كل المجلدات ( فى هذه الحالة مجلدات ربما تكون أوامر فى وضع آخر) التى تبدأ بحرف m وتنتهى بأى عدد من الحروف أو الكلمات ولو وجد مجلدا واحدا فقط هو الذى يبدأ بحرف m سيدخل إليه مباشرا أما ان كان هناك أكثر من مجلد ففى هذه الحالة سيقوم بترتيبهم أبجديا وسيدخل فى أول واحد منهم من الناحية الأبجدية .
لذلك فهذه الطريقة ليست عملية فى الحالة الأخيرة لذلك فإن ال Wildcard * يستخدم فى حالة التعامل مع الملفات المتشابهة فى الأمتداد على سبيل المثال :
لو أفترضنا أن لديك مجلدا بداخله هذه الملفات
ثم أنك تريد أن تقوم بطبع الملفات التى تنتهى بالأمتداد .doc فهناك طريقتين أما أن تقوم بكتابة اسماء الملفات كلها أو تقوم بتنفيذ الآتى بكل سهولة
cd m * first.doc second.doc third.doc ahmed guid [[email protected] etc]# lpr *.doc

فهذه الطريقة تغنى عن
[[email protected] etc]# lpr first.doc second.doc third.doc

كما يوجد العديد من Wild card Pattern من أمثال ( ? ) الذى يقوم بالأستعاضة عن حرف واحد فقط .
فكما قلنا سابقا يقوم * بالتعويض عن أى عدد من الحروف أو الكلمات لكن ؟ يقوم بالتعويض عن حرف واحد فقط .
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ومن مميزات ال bash ايضا الذاكرة أو ال History حيث أنه يقوم بحفظ الأوامر التى أدخلتها فى قائمة تخزن هذه القائمة داخل ملف يسمى فى الوضع الأفتراضى .bash_history حيث أنه عند دخولك للنظام يقوم الbash بملىء هذه الذاكرة من هذا الملف ويوجد هذا الملف فى مجلد home للمستخدم الحالى .
ملحوظة : هذا الملف من الملفات التى تبدأ ب (.) وتسمى النقطة هذه بال period وهذه الملفات يقوم النظام بإنشاءها وتكون مخبأة ( Hidden) ولكى تراها يجب عليك اظهار الملفات المخفية أو كتابة الأمر ls مع الخيار a- أى يكون الأمر هكذا
[[email protected] 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_:[email protected] .i18n* .net_applet .xmovierc
.desktop* .ICEauthority .netbeans/ .xsession-errors
Desktop/ JavaApplication1/ .oofficerc*
[[email protected] ahmed]$undefinedundefined


ويمكنك استدعاء الأوامر المخزنة لديك فى الHistory باستخدام أزرار UP و Down .
حيث يقوم زر Up باستعراض أخر أمر كتبته ثم الذى يليه وهكذا .
كما يمكنك استخدام زر down لعمل العكس كما أنه يمكن التعديل فى الأمر الذى استدعيه من ال History باستخدام زرى Left و Right .
كما يمكنك عرض ال History باستخدام الأمر history الذى يقوم بعرض الhistory بهذه الطريقة
[[email protected] 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 bshundefinedundefined


تلاحظ أنه قد قام بعرض كل ما تم كتابته سابقا ولكن ماذا لو أردت مثلا عرض آخر 10 أوامر قد كتبتها
ماعليك الا أن تكتب الأمر السابق متبوعا برقم 10 هكذا
[[email protected] 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
[[email protected] ahmed]$


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

Tagged in:

,