Arabian Penguin

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

54 ردود في هذا الموضوع

بسم الله الرحمن الرحيم

أنواع ال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 يقوم بتفسير الأوامر فعلى سبيل المثال اذا قمت بكتابة الأمر التالى :

( اذا كنت لا تعرف أين تكتب الأوامر ارجع الى المقدمة )

[[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 الأفتراضى لمعظم أنظمة اللينوكس .

<span style='font-size:14pt;line-height:100%'> The Bourne Again Shell (Bash)</span>

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 ,.............

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

cd m *

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

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

لو أفترضنا أن لديك مجلدا بداخله هذه الملفات

first.doc second.doc third.doc ahmed guid

ثم أنك تريد أن تقوم بطبع الملفات التى تنتهى بالأمتداد .doc فهناك طريقتين أما أن تقوم بكتابة اسماء الملفات كلها أو تقوم بتنفيذ الآتى بكل سهولة

 [[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]$

ويمكنك استدعاء الأوامر المخزنة لديك فى ال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  bsh

تلاحظ أنه قد قام بعرض كل ما تم كتابته سابقا ولكن ماذا لو أردت مثلا عرض آخر 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 .

وسنتابع الحديث بإذن الله فى المرة القادمة عن أحد مميزات ال Bash التى تجعلنا نحبه أكثر الا وهى الAliases أو الأسماء المستعارة أو ربما الأسم الأصلح هو الأختصارات

الى اللقاء بحول الله

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نسيت أن أقول اننى بانتظار اى ملاحظة على الدرس السابق أو أى خطأ موجود به حتى تعم المصلحة للجميع بإذن الله .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

أشكرك أخي على هذا الموضع

لكني لم أقرأه بعد

وأنا في طور الأنتقال إلى اللنكس فأنا أقرأ وأجهز بعض الدروس الأساسية

,انا مركب الليتكس ماندريك 9.0 على جهاز وهمي لكي اتعود عليه وأنا عزمت ان انتقل إليه في هذه العطلة الصيفيه

وشكراً .................

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكور أخوي على اسلوب الشرح الواضح

لكن ... أأأ ...

كيف أعرف نوعبرنامج الshell عندي ؟؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نعم أخى سوف أشرح ذلك المرة القادمة بإذن الله ولكن الآن لديك حل بسيط يمكنك كتابة الأمر bash وضغط Enter وبالتالى تكون أنت متأكدا من أنك تستخدم ال bash ولو أردت الcsh اكتب الأمر csh وستلاحظ الفرق بينهما وسوف أشرحه أيضا فى الدرس القادم بإذن الله الذى سيتناول بعض الأوامر الضروروية .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مقدمة عن بعض الأوامر المهمة

أولا يجب أن تعرف أن هناك شيئا يسمى الأمر Command وهناك شيئا آخر يسمى

Command Options أو خيارات الأمر.

وتستخدم Command Options لتحسين أداء الأمر أو إضافة مميزات جديدة الى الأمر الأصلى .

على سبيل المثال :

الأمر ls ( ls ليس أمر من أوامر الShell المبنية فيه كما وضحنا سابقا ولكن سأشير اليه فى هذا الدرس على أنه أمر ) يقوم بعرض جميع الملفات الموجودة على القرص الصلب أو الموجودة فى ملف ما .

[[email protected] ahmed]$ ls
Desktop/  JavaApplication1/  tmp/
[[email protected] ahmed]$

لكن جرب اضافة الخيار a- مع الأمر ls وفى نفس المكان السابق دون تغيير :

[[email protected] ahmed]$ ls -a
./                         .dmrc              .kde/         .recently-used
../                        .fonts/            .kderc        .screenrc
.audacity                  .fonts.cache-1     .mailcap      .sversionrc
.bash_history              .fonts.conf        .mcop/        .thumbnails/
.bash_logout               .gconf/            .MdkOnline/   tmp/
.bash_profile              .gconfd/           .mime.types   .Xauthority
.bash_profile~             .gnome/            .mozilla/     .xine/
.bashrc                    .gnome2/           .mplayer/     .xmms/
.DCOPserver_localhost__0   .gnome2_private/   .netbeans/    .xsession-errors
.DCOPserver_localhost_:[email protected]  .ICEauthority      .oofficerc*
.desktop*                  JavaApplication1/  .openoffice/
Desktop/                   .kaffeine/         .qt/
[[email protected] ahmed]$

بالتأكيد ربما تكون قد لاحظت الفرق بين الأمر الأول بدون الخيار والأمر مع الخيار .

عندما استخدمنا ls بالخيار a- ( لاحظ وجود مسافة بين ls و a- ولاحظ أيضا أنه لاتوجد مسافات بين (-)

و (a) ) قام بعرض التالى :

[[email protected] ahmed]$ ls -a
./                         .dmrc              .kde/         .recently-used
../                        .fonts/            .kderc        .screenrc
.audacity                  .fonts.cache-1     .mailcap      .sversionrc
.bash_history              .fonts.conf        .mcop/        .thumbnails/
.bash_logout               .gconf/            .MdkOnline/   tmp/
.bash_profile              .gconfd/           .mime.types   .Xauthority
.bash_profile~             .gnome/            .mozilla/     .xine/
.bashrc                    .gnome2/           .mplayer/     .xmms/
.DCOPserver_localhost__0   .gnome2_private/   .netbeans/    .xsession-errors
.DCOPserver_localhost_:[email protected]  .ICEauthority      .oofficerc*
.desktop*                  JavaApplication1/  .openoffice/
Desktop/                   .kaffeine/         .qt/
[[email protected] ahmed]$

فقد قام الخيار a- بجعل ls يقوم بعرض جميع الملفات حتى التى تحتوى على (.) بأولها وتسمى هذه

النقطة بالPeriod والملفات التى تبدأ بالPeriod فى معظمها تكون ملفات من صنع اللينوكس (ملفات يكونها النظام الحاكم عفوا يكونها نظام التشغيل ) ومن هنا يمكننا القول بأن الخيارات التى تضاف الى الأمر تعطى الأمر بعض الأمكانيات الجديدة .

والأمر ls لديه الكثير من الخيارات (Options) الأخرى مثل (U-) وأرجو أن تجربه أنت الآن .

ويجدر بنا الأشارة هنا أيضا الى أن ال (-) وتسمى dash ليست جزءا من ال Command Option ولكنها تقوم باخبار الشيل أيا كان نوعه بأن كل حرف سيأتى بعدها على أنه خيار للأمر .

ويمكنك وضع أو تشغيل أكثر من خيار مرة واحدة :

على سبيل المثال استخدمنا قبل ذلك الخيار a مع الأمر ls واستخدمت أنت الخيار U مع نفس الأمر

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

بكل بساطة أكتب الأمر متبوعا بمسافة ثم ال dash ثم الخيارات التى تريدها متتالية .

  [[email protected] ahmed]$ ls -aU

ماذا حدث ؟؟؟

نرجع الى البداية عندما طلبت منك استخدام الخيار U- مع ls قام بعرض كل الملفات الموجودة لكن دون ترتيب فالأمر ls ( بمفرده) يقوم بعرض الملفات مرتبة ترتيبا هجائيا .

لذلك اذا نفذت الأمر ls مع الخيار U و a سيقوم بعرض الملفات دون استثناء حتى التى تحتوى على الPeriod ويقوم بعرضها غير مرتبة .

[[email protected] ahmed]$ ls -aU
./                .gnome/                    Desktop/        .audacity
../               .Xauthority                .fonts/         .mozilla/
tmp/              .gnome2/                   .thumbnails/    .netbeans/
.screenrc         .gnome2_private/           .ICEauthority   JavaApplication1/
.bash_logout      .gconf/                    .bash_history   .mime.types
.bash_profile     .gconfd/                   .fonts.conf     .mailcap
.bashrc           .qt/                       .kderc          .openoffice/
.dmrc             .DCOPserver_localhost__0   .bash_profile~  .sversionrc
.desktop*         .mcop/                     .xine/          .oofficerc*
.xsession-errors  .fonts.cache-1             .xmms/          .adobe/
.MdkOnline/       .DCOPserver_localhost_:[email protected]  .recently-used
.kde/             .mplayer/                  .kaffeine/
[[email protected] ahmed]$

ربما تكون قد لاحظت الفرق ولاحظ هنا أن ترتيب الخيارات لا يهم سواء كتبت aU- أو كتبت Ua- فلهما نفس النتيجة .

ويمكنك أيضا استخدام طريقة Multiple Option وذلك بفصل كل خيار عن الآخر باستخدام dash (-) عن الخيار السابق .

مثلا لتنفيذ آخر أمر بهذه الطريقة يكون على الشكل التالى :

[[email protected] ahmed]$ ls   -a   -U

ويجب أن نشير الى بعض الخيارات المهمة أيضا مع الأمر ls وهى:

-1 الخيار (t) :-

ففى بعض الأحيان تريد أن تعرف متى تم عمل ملف ما ومتى تم التعديل فيه . ويمكنك الخيار (t) من

عرض الملفات وترتيبها بالتاريخ بدلا من ترتيبها هجائيا فيقوم بعرض الملفات الجديدة أولا .

[[email protected] / ]# ls -t
root/  tmp/  boot/  initrd/  sys/   home/  lib/   var/
dev/   usr/  etc/   opt/     proc/  bin/   sbin/  mnt/
[[email protected] /]#

-2 الخيار ( r ) :-

يقوم بعرض الملفات بطريقة عسكية ويتم استخدامه مع الخيار t حتى يقوم بعرض الملفات وترتيبها من الأقدم الى الأحدث لاحظ :

[[email protected] /]# ls -tr
mnt/  sbin/  bin/   proc/  opt/     etc/   usr/  dev/
var/  lib/   home/  sys/   initrd/  boot/  tmp/  root/
[[email protected] /]#

يتبع بإذن الله تعالى

لكن ربما اتأخر قليلا

تم تعديل بواسطه engshaheen
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

engshaheen

.. مشكور وجزاك الله خير .. لكن انا عن نفسي .. انصدمت ..

[[email protected] /]# ls -tr

mnt/ sbin/ bin/ proc/ opt/ etc/ usr/ dev/

var/ lib/ home/ sys/ initrd/ boot/ tmp/ root/

[[email protected] /]#

ماهذا .. دالة .. او سكربت .. انت تقول .. انه مفسر وواسطة بيني وبين الكرنال .. يعني فائدته مشابهة لفائدة shell الموجود في الويندوز .. :)

لكن اللي استغربه .. اين لغة السي ... لماذا استخدم سكربتات .. الا يوجد دوال .كائنات ,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

مجهود جبار يا أخ شاهين

استمر

أخي الشمري

[[email protected] / ]# ls -t
root/  tmp/  boot/  initrd/  sys/   home/  lib/   var/
dev/   usr/  etc/   opt/     proc/  bin/   sbin/  mnt/
[[email protected] /]#

اﻷخ شاهين يقوم بتقديم دروس عن أوامر Shell

اﻷمر ls هو اختصار List ، و اﻷمر ls -t يقوم بعرض محتويات المجلد أو المسار الحالي حسب تاريخ التعديل sort by modification time

يعني كل تلك الحروف التي قرأتها ما هي الا نتيجة اﻷمر ls -t

سطر اﻷوامر قوي جدا ، يمكنك من خلاله تعريف كرت الصوت و المودم و تغيير أبعاد الشاشة و تشغيل الموسيقى و كل ما يخطر و ما لا يخطر على بالك

و السلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

يا أخ الشمري أحب أن أوضح لك شيء مهما

الشيل كما قال الأخ شاهين ما هو إلا مفسر ،وهي كما تعلم لغة نصية ، أي أنها ليس لها القدرة على استدعاء الدوال وما إلى ذلك ،فالأوامر التي نستخدمها في اللينوكس مثل الأمر ls ليس دالة أصلا ،ولكنه مجرد argument فلو أرسلته للدالة الرئيسية للنظام سيستعرض لك الملفات بالصورة القياسية أما لو أرسلت معه معامل أخر مثل -t فسيتم ترتيب المخرجات على حسب تاريخ التعديل.

ويمكن أن تنشيء برنامج بلغة السي وتفعل ما بدا لك مع النظام ،ولكن الشيل من أهم أهدافه تسهيل التعامل مع النظام .

وأي ملف له امتداد .sh فهو ملف نصي تنفيذي .

ويوجد شيل هو عبارة عن لغة سي ولكنها نصية تدعى csh

ولكن أفضل أنواع الشيل وأقواها هو bash .

*********************************************

بارك الله جهودك أخ شاهين ، وجعله في موازين حسناتك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

واسف على تغيير مسار الموضوع ..

كمل كمل .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ايه يا جماعة أنا ملاحظ ان مفيش حد مهتم بالموضوع ده غير الأخ الشمرى

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

وغير ذلك لا يوجد أحد الكل كان بيقول عايزيين وعايزيين ولكن كله فى الأخر كلام

أنا مستعد لنشر درس جديد ولكن سأؤجل ذلك قليلا حتى أتأكد أن هناك أحد يستفيد .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

يا أخ شاهين

لا عليك بمن لا يهتم ، استمر والأجر على الله ، أكيد في يوم من الأيام سيكون لدروسك صدى ، لأنها فعلا مهمة بلا شك وخصوصا للمبرمجين.

وأنت قلتها قبل ، أنت تعمل لله وليس لأحد.

استمر.........

بما أني مشرف هذا القسم :blink:

فإني أقول لك ، استمر ، لو كان عملك لله عز وجل. :)

والسلام عليكم

**

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
بما أني مشرف هذا القسم 

فإني أقول لك ، استمر ، لو كان عملك لله عز وجل. 

والسلام عليكم

قلت لك قبل ذلك يا أخى أنك أميرنا ونحن يجب أن ننفذ ما تأمرنا به

إن شاء الله سأنشر الدرس القادم قريبا .............

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بسم الله الرحمن الرحيم

تناولنا سابقا أمر ls وذكرنا معظم الخيارات التى تأتى معه والآن بإذن الله تعالى سنقدم بعض الأوامر الأخرى التى ربما لا يمكنك الإستغناء عنها فى تعاملك مع Shell .

أولا يجب أن أذكر لك معلومة يجب أن تعرفها جيدا وهى أن الShell يوفر لك أمران Two Commands فى غاية الاهمية وهما man و info .

man تعنى manual وهى تمكنك من عرض جميع المعلومات عن أمر معين أقول جميع المعلومات يعنى كأنه كتيب تشغيل لأحد الأجهزة التى اشتريتها مؤخرا !!!!!!!!!!!

ويستخدم هكذا :

[[email protected] ahmed]$ man ls

فقط أكتب man وبعده اسم الأمر الذى تريد معلومات عنه ( هنا استخدمنا ls كمثال ) وكان ناتج الأمر السابق :

LS(1)                            User Commands                           LS(1)

NAME
      ls - list directory contents

SYNOPSIS
      ls [OPTION]... [FILE]...

DESCRIPTION
      List  information  about  the FILEs (the current directory by default).
      Sort entries alphabetically if none of -cftuSUX nor --sort.

      Mandatory arguments to long options are  mandatory  for  short  options
      too.

      -a, --all
             do not hide entries starting with .

      -A, --almost-all
             do not list implied . and ..

      --author
             print the author of each file

      -b, --escape
             print octal escapes for nongraphic characters

وتلاحظ أن الصفحة ممتلئة اضغط على زر Down و Up للنزول والصعود بين الأسطر أو استخدم Page Down و Page Up للنزول بالصفحات وللخروج اضغط على زر Q .

أمر info له نفس الوظيفة لكن مع اختلاف التنسيق الذى يعرض به البيانات .

جرب الأتى info ls ونفس التحكم بالصفحة كما هو الحال مع man .

الفرق بين man و info هو أن man يقال أنه من أيام UNIX أما info مستحدث لكن لا توجد مشكلة فكلاهما برامج حرة ( man,info برامج وليسوا أوامر ) .

نعود الى موضوع الأوامر المهمة والآن نحن بصدد التحدث عن الأمر cd :

ربما تتذكر نظام التشغيل DOS وتتذكر هذا الأمر أيضا وهو يعنى Change Directory . ربما من الأسم تكون قد فهمت عمل هذا الامر فهو يقوم بتغير المجلد الحالى الذى تقف عليه .

فمثلا لو أنك تقف على المجلد ahmed هكذا :

[[email protected] ahmed]$

وأردت الدخول الى المجلد ali الموجود داخل المجلد ahmed ماذا تفعل اذن ؟؟؟؟؟

بكل سهولة أكتب الامر cd متبوعا بأسم المجلد الذى تريد الدخول اليه هكذا

[[email protected] ahmed]$ cd ali
[[email protected] ali]$

( لاحظ أن المجلد على يجب أن يكون موجودا )

وللعودة مرة اخرى الى المجلد الذى يحتوى المجلد الذى أنت بداخله أكتب الأمر cd متبوعا بنقطتين هكذا

[[email protected] ali]$ cd ..
[[email protected] ahmed]$

ماذا إذا أردت الذهاب إلى بيتك؟؟

أكتب الأمر cd متبوعا ب ~ وستجد نفسك فى بيتك !!!!

[[email protected] usr]$ cd ~
[[email protected] ahmed]$

للذهاب الى ملفات النظام اكتب الأمر

[[email protected] ahmed]$ cd /
[[email protected] /]$

أمر mkdir

لو كنت تريد انشاء مجلد directory جديد استخدم الأمر الأمر mkdir (وهو أختصارا لكلمة make directory ) متبوعا بأسم المجلد الذى تريد انشاؤه هكذا:

[[email protected] ahmed]$ mkdir arabteam
[[email protected] ahmed]$ cd arabteam
[[email protected] arabteam]$

أمر rmdir

وهو اختصارا لكلمة remove directory ويستخدم لحذف مجلد ويستخدم هكذا:

[[email protected] arabteam]$ rmdir dir_name

كل الكلام السابق بالنسبة للمجلدات ماذا عن الملفات ؟؟

الأمر touch يعطيك امكانية انشاء (ملف) فارغ جديد بالإمتداد الذى تريده هكذا:

[[email protected] arabteam]$ touch Barq
[[email protected] arabteam]$ touch Kaboos
[[email protected] arabteam]$

نعم فلقد قمنا بانشاء ملفين اسمهما Barq و Kaboos .

ولو قمت بكتابة اﻷمر ls لرأيت الملفين .

مثال آخر :

لكتابة برنامج C /C++ أو جافا Java أو حتى ملف نصى Text يجب ان يكون للملف امتداد معين فلو كان ملف C كان الإمتداد c. ولو كان جافا كان الأمتداد java. لو كان text يبقى الأمتداد txt. نختار ملف واحد من السابق مثلا تريد انشاء ملف جافا بكل سهولة اكتب الأمر التالى :

[[email protected] arabteam]$ touch Main.java

ربما تسألنى سؤالا :

ما الفائدة التى استفدتها من عمل ملف بأسم معين ولكن ليس بداخله أى شىء ؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

والأجابة هى انك تسرعت قليلا !

فكما تمكنا من عمل الملف سنتمكن بإذن الله من ملىء الملف والكتابة والتعديل وعرض ما فيه بإذن الله .

نبدأ أولا بعرض محتويات الملف ونستخدم لهذا الغرض الأمر cat متبوعا بأسم الملف هكذا :

[[email protected] arabteam]$ cat -n  Main.java
    1
    2  //created by Engineer Shaheen
    3  import javax.swing.*;
    4
    5  /**
    6   *
    7   * @author ahmed
    8   */
    9  public class Main {
   10
   11      /**
   12       * @param args the command line arguments
   13       */
   14      public static void main(String[] args) {
   15        JOptionPane.showMessageDialog(null,"Hello world ! \n Shaheen Soft");
   16        System.exit(0);
   17      }
   18
   19  }
[[email protected] arabteam]$

لاحظ أننى قد ملئت الملف قبل ذلك بهذه البيانات .

استخدمت الخيار n لكى يرقم كل سطر من أسطر الملف .

وللتعديل والإضافة فى الملف استخدم أحد برامج تحرير النصوص text editors

مثل kwrite ,Emacs ,gedit,kate,nedit,................

أو أى برنامج لديك .

ويمكنك استخدام ذلك من خلال سطر اﻷوامر كالأتى :

مثلا أنا استخدم دائما برنامج kwrite ويمكنك أنت استخدام ما شئت . لتعديل الملف السابق عن طريق أحد برامج تحرير النصوص مثل kwrite :

[[email protected] arabteam]$ kwrite Main.java
[[email protected] arabteam]$

سيظهر لك برنامج kwrite ذو الواجهة الرسومية الجميلة ويمكنك تعديل ما شئت من النص وحفظه أو حفظه فى مكان آخر أو أى شىء يروق لك .

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

استخدمنا قبل ذلك الأمر rmdir لحذف مجلد وماذا إذن لو أردت حذف ملف ؟؟؟

استخدم الأمر rm ويعنى remove ويستخدم هكذا :

[[email protected] arabteam]$ touch windows
[[email protected] arabteam]$ rm windows
rm: remove regular empty file `windows'? y
[[email protected] arabteam]$

لقد قمت بعمل ملف واسميته windows ثم قمت بمحوه بالأمر rm

لاحظ أيضا أن هذا الأمر يمكن أن يستخدم مع المجلدات ولكنه يقوم بمحو المجلد أو الملف نهائيا دون الرمى فى سلة المهملات التى تسمى Trash ويستخدم مه المجلدات باستخدام الخيار r لحذف كل الملفات والمجلدات التى توجد بداخل المجلد والخيار f للحذف بدون سؤال التأكيد هكذا :

[[email protected] ahmed]$ rm -rf ali
[[email protected] ahmed]$

الأمر cp :

نستخدم الأمر cp لنسح ملف من مكان الى آخر وربما فى نفس المكان هكذا :

[[email protected] arabteam]$ cp Main.java Main.cpp
[[email protected] arabteam]$

سيقوم الأمر بنسخ الملف بكل محتوياته وتسمية ملف جديد يحتوى على هذه المحتويات لكن اسمه Main.cpp .

ماذا لو أردت سخ الملف الى مكان آخر غير المجلد الموجود به ؟؟؟

>>>> أكتب المسار كاملا هكذا :

[[email protected] arabteam]$ cp Main.java /mnt
cp: cannot create regular file `/mnt/Main.java': Permission denied
[[email protected] arabteam]$

ما هذا ؟؟؟

يقول ال Shell أن Permission denied !!!!!

يعنى لم يتم نسخ الملف هل تعرف لماذا ؟؟؟

الإجابة ببساطة تتلخص فى الآتى :

هل سمعت يوما من يقول أن اللينوكس نظام آمن ؟؟

هل سمعت يوما من يقول أن لكل مستخدم من مستخدمى النظام له صلاحية معينة ؟؟

هل سمعت يوما من يقول أن اللينوكس يدعم تعدد المستخدمين ؟؟

هل سمعت يوما أن هناك مستخدم يسمى ال Super User أو Administrator أو الRoot ؟

اذا كانت اجاباتك على بعض هذه الأسئلة بنعم فيمكنك الإستمرار معنا ! وإن لم تكن كذلك فيجب عليك أولا مراجعة حساباتك !!!

يجب علينا الآن أن أوضح لك نبذة مختصرة عن ما هو ال Root أو ماهو المستخدم الرئيسى للجهاز .

ال Root هو المستخدم الوحيد الذى يملك صلاحية التعديل فى كل شىء يخص النظام والمستخدمين لهذا النظام .

دائما كنت أسمع هذا المثل ((( المركب اللى عليها رئيسين تغرق ))) يعنى اذا ترك الأمر لكل مستخدم من مستخدمى الجهاز يعبث بالنظام فبعد يوم واحد من اﻷستخدام سوف لايكون هناك ما يسمى بالنظام .

لذلك وضع لكل مستخدم صلاحيات معينة كهذه الحالة التى نحن بصددها فالShell لم يستطيع نسخ الملف التى تريده الى مجلد mnt/ وذلك بكل بساطة لأنك ليست لديك الصلاحية بأن تكتب على مجلد من مجلدات النظام وهو mnt/ لذلك أعطاك رسالة خطأ .

حسنا ما الحل اذا كنت مضطرا لعمل ذلك ؟؟

نعم يمكنك عمل ذلك ببساطة لكن مع وجود شرط واحد ألا وهو ال password للمستخدم Root وإن لم تكن لديك فلا يمكنك ذلك !

فلنفرض أنك لديك ال password للمستخدم Root ولو أردنا تنفيذ الأمر السابق قم بالآتى :

[[email protected] arabteam]$ su
Password:
[[email protected] arabteam]#

استخدم أمر su لكى تدخل الى صلاحيات المستخدم الجذر Root وقم بعدها بإدخال ال Password وتلاحظ بعدها تغير علامة الPrompt من $ الى # كما أن المستخدم أصبح [email protected] وليس [email protected] .

وبذلك تكون لك الصلاحية بعمل أى شىء فى النظام.

نفذ أمر النسخ السابق هكذا :

[[email protected] arabteam]# cp Main.java /mnt
[[email protected] arabteam]#

لو قمت بالذهاب الى المجلد mnt/ ستجد هناك ملف اسمه Main.java .

( لاحظ أن أمر su يعنى Super User )

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

ننتقل الى نقطة أخرى خاصة بأمر آخر اسمه ln .

أتتذكر أخونا Windows كان فيه حاجة عنده أسمها shortcut أو اختصار وهى عبارة عن وصلة تحتوى على مسار ملف ما . الآن فى اللينوكس أصبح أسمها link ونستخدم الأمر ln لعمل ذلك.

جرب هذا الأمر

[[email protected] arabteam]# ln Main.cpp /mnt/a.cpp

فى الدرس القادم بإذن الله سنتحدث عن أمر ln

ولكن قبل ذلك أستخدم man الخاص بالأمر ln قبل أن أشرحه فى المرة القادمة التى سنتابع فيها باقى الحديث عن أشهر اﻷوامر المستخدمة فى نظام التشغيل لينوكس .

سبحان الله وبحمده سبحان الله العظيم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

عمل رائع و مجهود خارق

لدي ملاحظة بسيطة

وللعودة مرة اخرى الى المجلد الذى يحتوى المجلد الذى أنت بداخله أكتب الأمر cd متبوعا بنقطتين

اﻷمر .. cd يستعمل للصعود الى المجلد الي فوقه ، مثلا اذا كنت في المجلد mnt فسيأخذني الى المجلد / ،

لعلك تقصد اﻷمر - cd

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
اﻷمر .. cd يستعمل للصعود الى المجلد الي فوقه ، مثلا اذا كنت في المجلد mnt فسيأخذني الى المجلد /

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

تسلم يمينك ..صراحه ابدااااع... انا استفدت فائده عظيمة.. لأني دخلت في اليونكس بالعرض...يعني ماعندي اساسياته...وانت ساعدتني كثير في فهم اساسيات ال يونكس..

سؤال:

انا استخدم HP-UNIX والمحرر اللي موجود فيهvi يمغص في البطن لذلك ماتعلمت عليه ولا افكر اتعلمه.... هل المحررات اللي ذكرتها تعمل مع الاصدار هذا ... لأني صراحه اكتب الاوامر في الويندوز وانسخها ل ال يونكس ..عشان انفذها..

على فكره انا مبتدىء ومتحمس بس محتاج لوقفتكم معي....

سؤال 2:

هل اقدر اكتب برنامج ب لغة الشيل العادية .. لقراءة محتويات ملف ووضعها في داتا بيز؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

استفدت كثير من هالدروس

اتمنى تستمر وتواصل ولا تقطع فترات طويلة :)

اهم شي عندي حاليا شلون انصب برنامج على النظام :)

وهل استطيع ذلك اذا كان محفوظ على قسم ال C بالوندوز مثلا :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اسمحوا لي أن أجاوب

بالنسبة للأخ nawaf220

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

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

وبالنسبة للمحرر vi فهو من أقوى المحررات ، وأيضا emacs .

أما سؤالك الثاني : يجب أن تحدد أولا نوع الشيل الذي تريد أن تكتب به ، يعني هل هو bash,ksh.csh.tcsh ، وأفضلهم طبعا هو bash. ومن خلال برمجة الشيل تستطيع فعل الذي تريده مهما كان.ليس عليك قيود.

الأخ ابن عسكر

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

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

وأترك التوضيح الباقي للأخ شاهين حتى لا أتعدى على حقه.

والسلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اﻷخ ابن عسكر

سؤالك غير واضح ، ...

لا يمكنك تثبيت برنامج على قسم الويندوز ، ﻷنك لا تملك صلاحية الكتابة عليه

اذا كنت تقصد ان البرنامج محفوظ في قسم الويندوز و تريد تنصيبه في اللينوكس فهذا ممكن و لكن يجب ان تنسخه الى home/you/ مثلا ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

:) مشكور اخوي برق على محاولة المساعدة

الاخ كابوس فهم قصدي ..

اخوي كابوس :

انا كنت اسوي اللي ذكرته .. بس قلت يمكن نظام لينكس يسمح بهالشي :blink:

زين :

انا نصبت برنامج على اللينكس .. لكني فكيت ضغطه ونصبته داخل الجذر اللي كنت حافظه فيه .. انا حافظه على /home/sami/documents/file nam/

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

ام يجب ان انقله لجذر /sami/ ؟؟؟

وشلون انقل ؟

السؤال غير موجه لشخص محدد ..

وشاكر لكم ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

قبل أن أخوض فى درس اليوم أريد فقط أن نرجع الى الأمر CD لكى نفصل بين أمرين مهمين جدا فلو سألتك سؤالا بسيطا يا أخى الكريم ما الفرق بين الأمرين التاليين:

cd ahmed

cd /home/ahmed

أرجو يا أخى أن تعيرنى الأهتمام قليلا :-

الأول يقوم بتغيير المجلد أو Directory الحالى الى المجلد ahmed الموجود فى نفس المجلد الحالى

للتوضيح أكثر :

لو أنك مثلا فى المجلد var ( ويمكن أن تعرف المسار الحالى أو المجلد الحالى كما قلنا سابقا من خلال الأمر pwd ) وأردت تنفيذ الأمر الأول يجب أن يكون لديك مجلد يسمى ahmed داخل هذا المجلد (var ) وهو يسمى فى هذه الحالة بالمجلد الأب .

أما الأمر الثانى فهو يقوم بتغيير المسار الحالى أو المجلد الحالى الى المجلد home/ahmed/ أى الى المجلد ahmed الموجود داخل المجلد home ويمكنك تنفيذ هذا الأمر وأنت فى أى مجلد .

فى المرة السابقة توقفنا عند أمر ln وقلنا أنه يقوم بعمل Shortcut او link لملف أو مجلد من المجلدات وطلبت منك أن تراجع هذا الأمر بنفسك وهذا الأمر لا أريدك أن تعرف عنه الكثير من الخيارات ربما الخيار الوحيد الذى ستستخدمه هو s- وهو يقوم بعمل symbolic links بدلا من hard link .

[[email protected] ahmed]$ ln -s /etc/fstab  /home/ahmed
[[email protected] ahmed]$

ولو قمت بعمل listing للمجلد ahmed لرأيت اللينك موجود :

[[email protected] ahmed]$ ls
Desktop/  [email protected]  tmp/
[[email protected] ahmed]$

نستكمل الحديث عن الاوامر الأساسية والمهمة فى نظام التشغيل لينوكس :

الأمر find :

يستخدم الأمر find للبحث عن الملفات والمجلدات الموجودة لديك أو بعبارة أخرى يقوم بعمل Search على أى ملف تريده وفى أى مكان تريد أن يبحث فيه ويستخدم هكذا :

[[email protected] ahmed]$ find   [المكان المراد البحث فيه]  -name [اسم الملف المراد البحث عنه]

مثال :

لو أننا نريد أن نبحث عن الملف javac فى المجلد usr/java/ سنقوم بالأتى :

[[email protected] ahmed]$ find   /usr/java   -name   javac
/usr/java/jdk1.5.0_04/bin/javac
[[email protected] ahmed]$

تلاحظ أنه قام بالبحث ثم طبع المسار لهذا الملف كاملا كما تلاحظ .

مثال آخر :

نريد أن نبحث عن الملف bash1 فى المجلد usr/ :

[[email protected] ahmed]$ find /usr/bin -name bash1
/usr/bin/bash1
[[email protected] ahmed]$

تلاحظ أنه قام بإيجاد المسار لهذا الملف وقام بطبعه كاملا .

ويجب هنا أن نذكر بعض الخيارات الأخرى التى تجعل عملية البحث أكثر مرونة وقوة مثل البحث عن الملفات عن طريق التاريخ !!!!!

مثال :

فى المثال السابق قمنا بالبحث عن طريق الأسم فقط لكن هنا سنقوم بالبحث عن طريق النوع أو الخصائص مثل البحث عن الأوامر أو البرامج التى لم يتم استخدامها فى خلال ال ٧ أيام الماضية أستخدم الأمر find مع الخيار type- كما يلى :

[[email protected] ahmed]$ find /usr/bin -type f -atime +7

والنتيجة كما لاحظت تكون كبيرة ( ربما لديك تكون صغيرة ) ولذلك سأعرض منها جزءا قليلا

........................
........................

/usr/bin/xdvizilla
/usr/bin/mytool
/usr/bin/uniconv
/usr/bin/uniprint
/usr/bin/yudit
/usr/bin/progen
/usr/bin/tmake
/usr/bin/cu
/usr/bin/uucp
/usr/bin/uulog
/usr/bin/uuname
/usr/bin/uupick
/usr/bin/uustat
/usr/bin/uuto
/usr/bin/uux
/usr/bin/ukxim
/usr/bin/unikey
/usr/bin/acpi
/usr/bin/acroread
/usr/bin/genkdmconf
/usr/bin/kdm_config
/usr/bin/kdm_greet
/usr/bin/krootimage
[[email protected] ahmed]$

لاحظ أننا وضعنا عدد الأيام بعد الخيار atime- .

كما أن أمر find يدعم ال wild card مثل (*,? ) :

مثلا يا سيدي لو أنك تريد أن تبحث عن كل الملفات التى تنتهى بالإمتداد so.

[[email protected] ahmed]$ find /usr/lib   -name  *.so

ويجب أن تعلم أن الأمر find لديه الكثير من الخيارات لا يمكننى أن أناقشها الآن لأننى سأتطرق الى أوامر أخرى بعد ذلك أكثر فاعلية من الأمر find ليس فى كل المهام ولكن فى مهام معينة تتعلق بالأوامر والبرامج وقبل أن أنتقل الى هذه النقطة أذكر لكم خيارا جديدا للأمر find أسمه xdev- وهو يقوم بتحديد مجال البحث للأمر find فى مجلد معين من مجلدات النظام .

أرجو أن تأخذ قسطا من الراحة أو تطبيق ما قمنا بشرحه من أوامر حتى الآن حتى تثبت المعلومة .

استمر>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الأمر Whereis

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

بالتأكيد تتذكر الأمر find الذى شرحناه للتو . الآن أنا أريد أن أعرف أين يقع هذا الأمر فى جهازى وأين يوجد الmanual الخاص به :

[[email protected] ahmed]$ whereis find
find: /bin/find /usr/bin/find /usr/share/man/man1/find.1.bz2
[[email protected] ahmed]$

نجد أن الأمر قام بعرض مسار الأمر find كاملا وهو المجلد usr/bin/ و أيضا فى bin/ وأن ال manual pages له موجودة فى /usr/share/man/man1/ .

ولعرض النسخة الbinary فقط من الامر whereis استخدم الخيار b- هكذا :

[[email protected] ahmed]$ whereis -b find
find: /bin/find /usr/bin/find
[[email protected] ahmed]$

نستنتج من ذلك أن الأمر whereis يقوم بتحديد مكان الأوامر وال man وهذا الأمر أسرع من أمر find لأنه يبحث فى أماكن معينة مثل usr/bin/ أو usr/sbin/ أو bin/ لذلك فهو أسرع فى عملية البحث .

الأمر locate :

اذا لم يكفيك find و whereis فى عمليات البحث التى تجريها فلا تقلق يا عزيزى فأخونا لينوكس أو بالأحرى أخونا Shell يفكر فيما تفكر فيه ويحاول أن يوفر لك كل ما تحتاجه وما لا تحتاجه أيضا .

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

وقبل أن تقوم باستخدام هذا الأمر لأول مرة يجب أولا أن تقوم بعمل قاعدة البيانات !!!

ايه ؟؟؟

مش أنت ياعم لسة بتقول أن ال shell ده مرن وسهل ؟ قاعدة بيانات ايه الى عايزنى أعملها ؟

أقول لك لا تقلق يا عزيزى والله العظيم أخونا shell مظلوم بس أصبر شوية .

شوف يا سيدي كل ما عليك هو أن أنت تدخل لحساب ال Super User أو Root وذلك بالأمر su كما قلنا سابقا وبعد ذلك تدخل ال password وبعدها أكتب الأمر updatedb وأنتظر لحظات لكى يقوم بعمل قاعدة البيانات وبعدها يكون الملف الذى يحتوى على أسماء ومسارات الملفات موجود لديك ويمكنك بعدها استخدام الأمر locate بسهولة .

مثال نريد أن نبحث عن الملفات التى يكون امتدادها so :

[[email protected] ahmed]$ locate *.so

طبعا رأيت النتيجة بنفسك ورأيت ايضا سرعة البحث وقارنه باستخدام أمر find .

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

مثلا لو أردت اظهار بعض المعلومات المختصرة عن الأمر ls :

 [[email protected] ahmed]$ ls -- help

سيعطيك هذه النتيجة

Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.
 -a, --all                  do not hide entries starting with .
 -A, --almost-all           do not list implied . and ..
     --author               print the author of each file
 -b, --escape               print octal escapes for nongraphic characters
     --block-size=SIZE      use SIZE-byte blocks
 -B, --ignore-backups       do not list implied entries ending with ~
 -c                         with -lt: sort by, and show, ctime (time of last
                              modification of file status information)
                              with -l: show ctime and sort by name
                              otherwise: sort by ctime
 -C                         list entries by columns
     --color[=WHEN]         control whether color is used to distinguish file
                              types.  WHEN may be `never', `always', or `auto'
 -d, --directory            list directory entries instead of contents,
                              and do not dereference symbolic links
 -D, --dired                generate output designed for Emacs' dired mode
 -f                         do not sort, enable -aU, disable -lst
 -F, --classify             append indicator (one of */[email protected]|) to entries
     --format=WORD          across -x, commas -m, horizontal -x, long -l,
                              single-column -1, verbose -l, vertical -C
     --full-time            like -l --time-style=full-iso
 -g                         like -l, but do not list owner
 -G, --no-group             inhibit display of group information
 -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
     --si                   likewise, but use powers of 1000 not 1024
 -H, --dereference-command-line
                            follow symbolic links listed on the command line
     --dereference-command-line-symlink-to-dir
                            follow each command line symbolic link
                              that points to a directory
     --indicator-style=WORD append indicator with style WORD to entry names:
                              none (default), classify (-F), file-type (-p)
 -i, --inode                print index number of each file
 -I, --ignore=PATTERN       do not list implied entries matching shell PATTERN
 -k                         like --block-size=1K
 -l                         use a long listing format
 -L, --dereference          when showing file information for a symbolic
                              link, show information for the file the link
                              references rather than for the link itself
 -m                         fill width with a comma separated list of entries
 -n, --numeric-uid-gid      like -l, but list numeric UIDs and GIDs
 -N, --literal              print raw entry names (don't treat e.g. control
                              characters specially)
 -o                         like -l, but do not list group information
 -p, --file-type            append indicator (one of /[email protected]|) to entries
 -q, --hide-control-chars   print ? instead of non graphic characters
     --show-control-chars   show non graphic characters as-is (default
                            unless program is `ls' and output is a terminal)
 -Q, --quote-name           enclose entry names in double quotes
     --quoting-style=WORD   use quoting style WORD for entry names:
                              literal, locale, shell, shell-always, c, escape
 -r, --reverse              reverse order while sorting
 -R, --recursive            list subdirectories recursively
 -s, --size                 print size of each file, in blocks
 -S                         sort by file size
     --sort=WORD            extension -X, none -U, size -S, time -t,
                              version -v
                            status -c, time -t, atime -u, access -u, use -u
     --time=WORD            show time as WORD instead of modification time:
                              atime, access, use, ctime or status; use
                              specified time as sort key if --sort=time
     --time-style=STYLE     show times using style STYLE:
                              full-iso, long-iso, iso, locale, +FORMAT
                            FORMAT is interpreted like `date'; if FORMAT is
                            FORMAT1<newline>FORMAT2, FORMAT1 applies to
                            non-recent files and FORMAT2 to recent files;
                            if STYLE is prefixed with `posix-', STYLE
                            takes effect only outside the POSIX locale
 -t                         sort by modification time
 -T, --tabsize=COLS         assume tab stops at each COLS instead of 8
 -u                         with -lt: sort by, and show, access time
                              with -l: show access time and sort by name
                              otherwise: sort by access time
 -U                         do not sort; list entries in directory order
 -v                         sort by version
 -w, --width=COLS           assume screen width instead of current value
 -x                         list entries by lines instead of by columns
 -X                         sort alphabetically by entry extension
 -1                         list one file per line
     --help     display this help and exit
     --version  output version information and exit

SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

By default, color is not used to distinguish types of files.  That is
equivalent to using --color=none.  Using the --color option without the
optional WHEN argument is equivalent to using --color=always.  With
--color=auto, color codes are output only if standard output is connected
to a terminal (tty).

Report bugs to <[email protected]>.
[[email protected] ahmed]$

معلومات جيدة تعتبر فى كثير من الأحيان أفضل من استخدام الman .

وهناك أيضا أمر يسمى whatis يقوم بعرض معلومات مختصرة عن الأوامر وهو كالأمر السابق locate يحتاج الى قاعدة بيانات خاصة به ويجب تكوين هذه القاعدة قبل استخدام هذا الأمر لأول مرة بالدخول الى حساب المستخدم root وكتابة الأمر makewhatis وانتظر بعض الوقت لكى يكون القاعدة .

وبعدها استخدم الامر whatis بسهولة .

مثال :

نريد أن نعرف معلومات أو وظيفة أمر ما أكتب الأمر whatis متبوعا بأسم الأمر الذى تريده هكذا :

[[email protected] ahmed]$ whatis ls
ls                   (1)  - list directory contents
[[email protected] ahmed]$

/////////////////////////////////////////////////////////

[[email protected] ahmed]$ whatis find
find                 (1)  - search for files in a directory hierarchy
[[email protected] ahmed]$

ربما لم يخطر ببالك هذا السؤال :

أنا لا أريد أن أعرف وظيفة الأمر ؟؟ أنا لدى الوظيفة فعلا ولكنى لا أعرف ما هو الأمر !!!!!!!

أو ربما يكون السؤال بصيغة أخرى :

أنا لا أعرف الأمر الذى أريد أن أستخدمه لعمل وظيفة معينة ؟؟؟

أيا كان صيغة السؤال فالإجابة موجودة :-

لدينا أمر جميل جدا اسمه apropos وهو يستخدم الdatabase التى يستخدمها الأمر whatis لكن بطريقة مختلفة .

مثال :

لو لديك الوظيفة أو المهمة وهى مثلا تريد أن تبحث Search فى الجهاز عن ملف معين ولا تعرف كيف تقوم بوظيفة البحث هذه ولا تعرف ما هو الأمر أو الأوامر التى تستخدمها ماذا تفعل اذن؟؟؟

الإجابة : سينصحك أحد أصدقاءك العباقرة ويقول لك سيبك من النظام ( المعفن ) ده ياعم هو فيه أحسن من الويندوز اللى الواحد بيبقى قاعد زى الباشا وهو بيعمل كل حاجة !

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

ايه يا سيدى اللى أنت عايز تعمله ؟؟

ج: أنا عايز أعمل search .

خلاص يا عم أكتب الأمر apropos متبوعا بكلمة Search وشوف النتيجة .

[[email protected] ahmed]$ apropos search

هل رأيت النتيجة !

apropos              (1)  - search the whatis database for strings
badblocks            (8)  - search a device for bad blocks
bsearch              (3)  - binary search of a sorted array
find                 (1)  - search for files in a directory hierarchy
gnome-search-tool    (1)  - the GNOME Search Tool
hcreate [hsearch]    (3)  - hash table management
hdestroy [hsearch]   (3)  - hash table management
hsearch              (3)  - hash table management
lfind [lsearch]      (3)  - linear search of an array
lkbib                (1)  - search bibliographic databases
lookbib              (1)  - search bibliographic databases
look [Search::Dict]  (3pm)  - search for key in dictionary file
lsearch              (3)  - linear search of an array
lsearch              (n)  - See if a list contains a particular element
manpath [man]        (1)  - determine user's search path for man pages
Net::LDAP::Reference (3pm)  - search reference
Net::LDAP::Search    (3pm)  - Object returned by Net::LDAP search method
res_search [resolver] (3)  - resolver routines
Search::Dict         (3pm)  - search for key in dictionary file
strcspn [strspn]     (3)  - search a string for a set of characters
strpbrk              (3)  - search a string for any of a set of characters
strspn               (3)  - search a string for a set of characters
tdelete [tsearch]    (3)  - manage a binary tree
tfind [tsearch]      (3)  - manage a binary tree
tsearch              (3)  - manage a binary tree
twalk [tsearch]      (3)  - manage a binary tree
wcschr               (3)  - search a wide character in a wide-character string
wcscspn              (3)  - search a wide-character string for any of a set of wide characters
wcspbrk              (3)  - search a wide-character string for any of a set of wide characters
wcsrchr              (3)  - search a wide character in a wide-character string
whatis               (1)  - search the whatis database for complete words
wmemchr              (3)  - search a wide character in a wide-character array
zgrep                (1)  - search possibly compressed files for a regular expression
zipgrep              (1)  - search files in a ZIP archive for lines matching a pattern
bsearch              (3)  - binary search of a sorted array
hcreate [hsearch]    (3)  - hash table management
hdestroy [hsearch]   (3)  - hash table management
hsearch              (3)  - hash table management
lfind [lsearch]      (3)  - linear search of an array
lsearch              (3)  - linear search of an array
res_search [resolver] (3)  - resolver routines
strcspn [strspn]     (3)  - search a string for a set of characters
strpbrk              (3)  - search a string for any of a set of characters
strspn               (3)  - search a string for a set of characters
tdelete [tsearch]    (3)  - manage a binary tree
tfind [tsearch]      (3)  - manage a binary tree
tsearch              (3)  - manage a binary tree
twalk [tsearch]      (3)  - manage a binary tree
wcschr               (3)  - search a wide character in a wide-character string
wcscspn              (3)  - search a wide-character string for any of a set of wide characters
wcspbrk              (3)  - search a wide-character string for any of a set of wide characters
wcsrchr              (3)  - search a wide character in a wide-character string
wmemchr              (3)  - search a wide character in a wide-character array
[[email protected] ahmed]$

ومن الملاحظ أنه قد أظهر أول أمر من الأوامر التى تقوم بالبحث وهو الأمر apropos !!

ارجو أن تكون قد أدركت هذا الواقع .

ويجدر بنا الأشارة هنا أنه يمكنك استخدام أمر man السابق لكى يقوم بنفس مهمة الأمر apropos ولكن الأمر man نستخدمه هنا مع الخيار k- ولكن سيكون البحث بطىء قليلا ....

جرب هذا

[[email protected] ahmed]$ man -k search

والنتيجة

apropos              (1)  - search the whatis database for strings
badblocks            (8)  - search a device for bad blocks
bsearch              (3)  - binary search of a sorted array
find                 (1)  - search for files in a directory hierarchy
gnome-search-tool    (1)  - the GNOME Search Tool
hcreate [hsearch]    (3)  - hash table management
hdestroy [hsearch]   (3)  - hash table management
hsearch              (3)  - hash table management
lfind [lsearch]      (3)  - linear search of an array
lkbib                (1)  - search bibliographic databases
lookbib              (1)  - search bibliographic databases
look [Search::Dict]  (3pm)  - search for key in dictionary file
lsearch              (3)  - linear search of an array
lsearch              (n)  - See if a list contains a particular element
manpath [man]        (1)  - determine user's search path for man pages
Net::LDAP::Reference (3pm)  - search reference
Net::LDAP::Search    (3pm)  - Object returned by Net::LDAP search method
res_search [resolver] (3)  - resolver routines
Search::Dict         (3pm)  - search for key in dictionary file
strcspn [strspn]     (3)  - search a string for a set of characters
strpbrk              (3)  - search a string for any of a set of characters
strspn               (3)  - search a string for a set of characters
tdelete [tsearch]    (3)  - manage a binary tree
tfind [tsearch]      (3)  - manage a binary tree
tsearch              (3)  - manage a binary tree
twalk [tsearch]      (3)  - manage a binary tree
wcschr               (3)  - search a wide character in a wide-character string
wcscspn              (3)  - search a wide-character string for any of a set of wide characters
wcspbrk              (3)  - search a wide-character string for any of a set of wide characters
wcsrchr              (3)  - search a wide character in a wide-character string
whatis               (1)  - search the whatis database for complete words
wmemchr              (3)  - search a wide character in a wide-character array
zgrep                (1)  - search possibly compressed files for a regular expression
zipgrep              (1)  - search files in a ZIP archive for lines matching a pattern
bsearch              (3)  - binary search of a sorted array
hcreate [hsearch]    (3)  - hash table management
hdestroy [hsearch]   (3)  - hash table management
hsearch              (3)  - hash table management
lfind [lsearch]      (3)  - linear search of an array
lsearch              (3)  - linear search of an array
res_search [resolver] (3)  - resolver routines
strcspn [strspn]     (3)  - search a string for a set of characters
strpbrk              (3)  - search a string for any of a set of characters
strspn               (3)  - search a string for a set of characters
tdelete [tsearch]    (3)  - manage a binary tree
tfind [tsearch]      (3)  - manage a binary tree
tsearch              (3)  - manage a binary tree
twalk [tsearch]      (3)  - manage a binary tree
wcschr               (3)  - search a wide character in a wide-character string
wcscspn              (3)  - search a wide-character string for any of a set of wide characters
wcspbrk              (3)  - search a wide-character string for any of a set of wide characters
wcsrchr              (3)  - search a wide character in a wide-character string
wmemchr              (3)  - search a wide character in a wide-character array
[[email protected] ahmed]$

وبذلك نكون تقريبا قد غطّينا أو وضعنا أساسيات البحث عن الملفات وعن الأوامر وبذلك نستطيع أن ننتقل الى مواضيع أخرى مثل ضغط وفك ضغط الملفات وغيرها من المواضيع المهمة .

أرجو أن تكون قد استفدت يا أخى الكريم من هذا الدرس وأرجو الله تعالى أن يعيننى ويساعدنى فى أنجاز باقى الدروس وكذلك مساعدتى على اخراجها بشكل ملائم ودقيق .

والى اللقاء بإذن الله تعالى .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .