نظام التشغيل يونيكس

الطبعة الأولى

تأليف  د. زياد ديب يوسف

written by  

 Ziad  Dib  Yousef  

Ph.D. MBA (Ind.Kfm.  Dipl.Kfm)

حقوق الطبع محفوظة:

رقم الإيداع لدى المكتبة الوطنية في المملكة الأردنية الهاشمية 1112/10/1994 رقم التصنيف: 43، 005

الناشر: دار حنين / عمان - الأردن و مكتبة الفلاح / العين - دولة الامارات العربية المتحدة

 

شكر وتقدير:  أشكر الأستاذ الدكتور محمد مصطفى الحاج حسن (عميد كلية العلوم - جامعة الزيتونة الأردنية) 

والدكتور منيب قطيشات (الجامعة الأردنية - كلية العلوم - قسم الحاسوب) على التشجيع

والمساعَدة ،  وأشكر الأستاذ أحمد ممتاز الملّوحي على مجهوده الكبير في تصحيحه لغةَ الكتاب

 

ملاحظة: مع الأسف لم أقوم في تطوير هذه الطبعة (الأولى) لعدم الجدوى وعدم التشجيع العلمي  

 

 

الفهرس

تمهيد                                                                                 9

تقديم                                                                                  11

الفصل الأول: الدخول إلى النظام                                                      20

 

        1.1    عملية الإدخال                                                         21

        2.1    تسجيل الدخول Login                                                 21

        3.1    إنهاء العمل في يونيكس                                              25

        4.1    المستخدِمون والمجموعات                                            25

        5.1    مدير النظام   root                                                    27

        6.1    كلمة المرور                                                          27

        7.1    المساعدة help                                                        28

 

الفصل الثاني: الملفات والأدلة                                                         32

 

        1.2    عمل ملف جديد و إظهار المحتوى                                    35

        2.2    سرد الملفات                                                           36

        3.2    الأدلة                                                                  38

                1.3.2 جذرالأدلة ، تشعب الأدلة                                      39

                2.3.2 أدلة العمل                                                     40

                3.3.2 التنقل بين الأدلة                                               40

                4.3.2 الأدلة الرئيسة والمنسوبة                                     41

                5.3.2 عمل دليل جديد                                               42

                6.3.2 إضافات  لجدولة الملفات والأدلة                              43

                7.3.2 نظام الملفات                                                  43

        4.2    الأدلة التقليدية لدى يونيكس                                           44

                1.4.2 الدليل الجذر root-directory                                   45

                2.4.2 دليل البرامج /bin                                             45

                3.4.2 دليل ملفات التعليمات /etc                                     45

                4.4.2 الدليل المؤقَّت /tmp                                           46

                5.4.2 دليل المستخدِمين                                             46

                6.4.2 دليل الأجهزة  /dev                                           47

        5.2    حقوق الاستعمال والحماية                                            47

                1.5.2 جدولة الحقوق                                                47

                2.5.2 أحرف إضافية للحظر والحماية                        49

                3.5.2 تغيير و إلغاء الحقوق                                         50

        6.2    تغيير الملكية و التاريخ                                        53

                1.6.2 تغيير الملكية                                                 53

                2.6.2 تغيير تاريخ الملكية                                            54

        7.2    إظهار محتويات الملفات                                               55

                1.7.2 الإظهار الكلي لمحتويات الملفات                               55

                2.7.2 الإظهار التدريجي                                             56

                3.7.2 إظهار بداية ونهاية الملف                                     59

                4.7.2 الإظهار البينري binary-coded                                61

                5.7.2 إظهار نوعية الملف                                           65

        8.2    إدارة وتنظيم الملفات                                                  66

                1.8.2 تغيير الاسم                                                   66

                2.8.2 طبع و نسخ الملفات                                           67

                3.8.2 الإشارة لارتباط الملفات                                        67

                4.8.2 إزالة وحذف الملفات                                          69

                5.8.2 إزالة وحذف الأدلة                                            70

                6.8.2 البحث عن الملفات                                             71

        9.2    ملفات الأجهزة والوحدات                                             74

 

الفصل الثالث: المطاريف                                                              76

 

        1.3    القياسات والمواصفات للمطاريف                                      78

        2.3    إدخال المواصفات                                                     79

        3.3    قياسات التوصيل                                                      80

                1.3.3 تصفية الإدخال والانقطاع                                      81

                2.3.3 تصفية الإخراج                                                82

                3.3.3 تفسير وتأويل أحرف القيادة                                  

82

                4.3.3 احتمالات أخرى                                               84

                5.3.3 فهرس المواصفات                                            84

        4.3    ملفات رموز القيادة للمطاريف                                 86

 

الفصل الرابع: الأغلفة                                                                 87

 

        1.4    الأغلفة التقليدية في يونيكس                                          89

        2.4    العمل بالغلاف                                                         89

        3.4    تغيير غلاف الدخول                                                   90

        4.4    تحويلات ورموز الغلاف                                               91

                1.4.4 بدائل الأحرف                                                

91

                2.4.4 توجيه خروج المعلومات                                      92

                3.4.4 توجيه إدخال المعلومات                                       94

                4.4.4 تعدد الأوامر في سطر واحد Pipe                             95

                5.4.4 رموز الإدراج                                                 97

        5.4    قدرات إضافية لغلاف سي                                             98

        6.4  بدائل النظام والأغلفة                                                    101

                1.6.4 بدائل غلاف بورني                                            102

                2.6.4 بدائل غلاف سي                                              103

        7.4    برامج الأغلفة الخاصة shell-scripts                                   105

 

الفصل الخامس: عمليات نظام التشغيل                                        114

 

        1.5    النواة                                                                

115

        2.5    العمليات                                                              

116

        3.5    العمليات المساعدة                                                   

117

        4.5    حقوق العمليات                                                       119

        5.5    مراقبة العمليات                                                      

120

        6.5    حذف وإيقاف العمليات                                         127

        7.5    المعالجة الخلفية للعمليات                                             

129

        8.5    صلاحيات ومرتبات العمليات                                           132

        9.5    تحديد أوقات عمل العمليات الزمنية                                    133

 

الفصل السادس: محررالنصوص                                                      136

 

        1.6    البرنامج الكتابي vi                                                    138

        2.6    عملية إدخال المعلومات والأوامر                                      139

 

الفصل السابع: الطباعة                                                       145

 

        1.7    الطباعة بواسطة System V                                           147

        2.7    الطباعة بواسطة BSD-Unix                                          150

 

الفصل الثامن: أوامر النظام المتطورة                                                 151

 

        1.8    أوامر المقارنة                                                         152

        2.8    تجزئة الملفات                                                 155

        3.8    تصنيف الملفات                                                       157

        4.8    اقتطاع المعلومات                                                     161

        5.8    تبديل الأحرف داخل الملف                                            162

        6.8    تركيب الأوامر                                                         165

        7.8    البحث عن معلومات معينة                                            167

        8.8    ملفات الأرشيف                                               168

        9.8    تكثيف الملفات                                                 171

        10.8  برامج أخرى مساعدة                                                172

 

 

الفصل التاسع: البريد الإلكتروني                                                      175

 

        1.9    الاتصال المباشر                                                      176

        2.9    البريد الإلكتروني electronic mail                                     180

 

الفصل العاشر: شبكات الاتصال                                                       191

 

        1.10  معلومات عامة                                                       193

        2.10  مكونات الارتباط الإلكتروني ISO/OSI                                195

        3.10  مقدمة العنوان الإلكتروني Network Protocol                        196

        4.10  العنوان الإلكتروني                                                   197

        5.10  برامج الاتصال الإلكتروني                                            199

        6.10  برامج أخرى للاتصال البعيد                                          210

        7.10  برامج متطورة للعمل من خلال الشبكات                              212

        8.10  الشبكة العالمية إنترنت Internet                                     217

 

الفصل الحادي عشر:  النوافذ                                                         223

 

المراجع                                                                              228

فهرس الأوامر                                                                        230

 

 

تمهيد

 

      منذ زمن بعيد لم يُغَيِّر مجالات العمل و الحياة الاجتماعية أيُّ اختراع تقني هذا التغيير

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

والتجارة والتعليم والخدمات... إلخ. وقد قامت مؤسسة مسجيوست للتكنلوجيا  Massachusetts

Institute of Technology في الولايات المتحدة بدراسة أظهرت أنه في عام -2000- سيصبح من

يزيدون عن 64 بالمئة ، من العاملين في جميع حقول العمل ، بحاجة إلى الإلمام في العمل على

الحاسوب، ولذا ينبغي أن نستعد لتكون لدينا القدرة على التكيّف مع المستقبل ، ولنحصّـل

المعرفة الكافية والضرورية للعمل في هذا المجال .

 

      ومعرفة العاملين في الإدارة والتصنيع والخدمات في وقتنا الحاضر لا زالت محدودة في

مجال الحاسوب ، وتعليم هؤلاء العاملين وتدريبهم لن يكون بالسهولة المتوقعة، والإشاعة

القائلة إنه بالمستطاع شراء الجهاز والعمل به مباشرة بعد إخراجه من صندوقه  مجرد دعاية

ليس إلاّ، وهذا ينطبق أيضاً على البرامج الجاهزة (STANDARD SOFTWARWE ) التي يكون بعض منها

سهلَ الاستخدام ولكنه عظيم الفعالية ، ويحتوي على إمكانات وقدرات تفوق معرفة مستعمليها،

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

اختصاصي في هذا المجال .

 

      إن المعرفة والتدريب المتواصل على الكمبيوتر يجعل العمل فعالاً ومجدياً. لذلك ، 

وبعد الدراسة الطويلة لموضوع تحضير كتاب يوضح التساؤُلات المتعلقة في نظام التشغيل يونيكس ،

آثرت عدم ترجمة أي كتاب بهذا الصدد ، بل شرعت بكتابة موضوع جديد باللغة العربية ¡ أُبين به

قدر المستطاع كيفيةَ العمل بواسطة نظام التشغيل (يونيكس) ، والشرحَ عن قدراته وإمكاناته

العالية ، وقد حرصت على عدم نشر كتاب تقليدي مثل كتب أنظمة التشغيل المترجمة ذات الطابع

الأجنبي ، ولكنني سأستخدم المصطلحات والأوامر باللغة الإنكليزية لتسهيل العمل . وهذا الكتاب

يقدم شرحاً عاماً عن النظام ، ويستفيد منه المهتمون في علوم الحاسوب وأنظمة التشغيل ،

والراغبون في التعرف على قدرات نظام التشغيل يونيكس .

تقديم

 

      قبل حوالي 20 عاماً ظهر نظام التشغيل يونيكس كجزء من أحد برامج التجارب إلى حيز

الوجود ، ومنذ ذلك الحين وهو قيد التطوير ، حتى وصل إلى مرتبة عليا ، وأصبح نظاماً معتمداً

لمعظم الحواسب الواردة ، كالحاسوب الشخصي ، والحواسب الفائقة والوسطى ، لكونه عظيمَ القدرة

ومرنَ الأداء .

 

      وقد صُمم هذا النظام من البداية على شكل نظام منفتح قليل الحواجز، لا يوجد به تحديد

لإدارة وحدة تخزين المعلومات ، أو وحدة الذاكرة RAM ، كما هو الحال في  نظام MS-DOS

والمحدودة بسعة K 640  ،  لذلك بقي يونيكس  ناجحاً في السوق الكمبيوترية خلال الأعوام

العشرين الماضية .

 

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

التصنيع والتقنية ، لأنه كتب بلغة ( C ) بدلاً من اللغة الآلية ( أسمبلي ) ، وتظهر ميزات

يونيكس في معالجة المهام المتعددة   (Multitasking) ، وفي نظامِ تعدد العاملين 

(Multiuser) جلياً ، إذ يُمكِّنُ  عدداً كبيراً من المستخدِمين من العمل في آن واحد وِبمهامَّ كثيرة

، على حاسوب واحد بواسطة المطاريف (Terminals) متنوعة القدرات .

 

      وبمقدور "يونيكس" أن يسيطر على المهام ويقودها، وهو يقسم وقت وحدة العمليات

والمعالجة ووحدة التحكم ، بأن يعطي لكل عملية وقتاً خاصاً حسب أهميتها، ويراقبَ في الوقت

نفسه عمليات ما خلف الستار ، والعمليات الحالية، ويعطيَ لكل مستخدِم أولويته . ولقد عززت

شعبيةَ يونيكس البرامجُ المساعدةُ العديدةُ المرفقةُ به ، مثل مترجم "سي" ، وبرامج تنظيم

الملفات ، والاتصالات ، والطباعة ، والرسوم ، والتخطيط ...الخ. 

 

      منذ عدة أعوام كانت وحدات العمل للحاسوب (Workstations) تعمل بشاشات خضراء ذات

قدرات محدودة ، ولا تعرف فن الرسم على الشاشة ، ولاتعدد الألوان ، أما الآن فقد أُنتجت وحدات

الشاشة الكبيرة القابلة للرسم والعمل بالنوافذ ، إذ يمكن بواسطتها تشغيل عدة برامج ، كل

برنامج في نافذة ، ننتقل مابينها بواسطة الفأر (_SYMBOL 56 \f "Wingdings"_ Mouse) ،

الموصول في محطة العمل ، ويعمل كل برنامج على حدة ، ولا يتوقف إلا إذا كان ذلك مقصوداً .

وإذما رُبطت عدة أجهزة يونيكس ، بعضِها ببعضٍ ، ليكون أمامنا انفتاح كثير من الإمكانات ، مثل

توزيع المعلومات الضخمة في عدة وحدات على أُسطوانة مشتركة ، أو الطباعة المشتركة ...إلخ.

 

      ولنظام يونيكس اليوم عدد كبير من البرامج الجاهزة المطروحة في الأسواق،مثل برامج

الإدارة ، والمحاسبة ، والكتابة ، والرسم ، والهندسة ...إلخ. والسلبية الوحيدة لنظام

يونيكس هي أنه بحاجة إلى تدريب مكثف ، أو إلى وجود مدير نظام متدرب على القيام بمهام

كثيرة. وهذا الكتاب يهتم بصورة مباشرة  ببرامج يونيكس المساعدة ، التي  يكون العمل

بواسطتها ذا جدوى مفيدةٍ للمستخدِم.

 

      اُنتج نظام يونيكس في أواخر الستينات أول مرة في الولايات المتحدة الأمريكية ، لدى

شركة BELL (AT&T)  للاتصالات ، من خلال فكرة عمل نظام يسمى (MULTICS) ،  صمم بالاشتراك مع

شركة (GENERALELECTRIC) . ولقد حقق المبرمج (كن طمسون)  - أول مرة  - برمجةَ نظام الأغلفة ،

ونظامَ إدارة العمليات، ليعملا على جهاز ( DEC PDP-7  ) ، بهدف وضع حجر الأساس لأحد الأنظمة

التجريبية.

 

      وفي عام 1971 نُقل هذا النظام إلى جهاز (PDP-11)  ¡ الذي اُنتج  بواسطته برنامج

معالجة الكلمات - أول مرة - ليعمل بواسطة يونيكس. ومن الأمور التي ساعدت على نجاح يونيكس

أنه كُتب بلغة C في عام 1973 ، حيث وُزعت بعد ذلك عدة نسخ مصدرية (SOURCE-CODE) من هذا

النظام على بعض الجامعات الأمريكية ، التي  ساعدت بدورها على تطوير يونيكس. ومما يجدر ذكره

أن يونيكس استعمل تجاريا بعد عام 1982 ، وكان ذلك هو نظام ( UNIX  SYSTEM III ) ¡ وفي عام

1983  تم تطويره إلى نظام  ( UNIX  SYSTEM  V )   الذي لاقى انتشاراً واسعاً منذ ذلك الحين.

 

      هذا وكانت جامعة كاليفورنيا قد طورت نظام يونيكس وأسمته (BSD-UNIX) ¡ لاستخدامه في

الأغراض العلمية في الجامعات والمؤسسات الباحثة. هذا  ويوجد الآن  نظام  ( SYSTEM V.R4 )

الذي دمج النظامين السابقين في نظام متطور.

 

      ومصطلح ( UNIX )  اسم مسجل لشركةِ( AT&T )   الأمريكية ، التي كانت تسمى ( BELL

سابقاً، ويوجد  أنواع أخرى من نظام يونيكس لمجال الحاسوب الشخصي ، مثل ( CoherentوMinix )

الموجودة فيِ (Atari وAmiga ) وغيرها، ومثل Univel ) و XENIX و ( SCO التي تعمل بواسطة

أجهزة ( PC's ).

 

      وفي أيامنا هذه أنتجت شركة  ( MICRO-SOFT )الأمريكية نظام (WINDOWS NT) (NT=New

Technology) ، الذي يشبه  ( يونيكس ) من حيث القدرة ، ويشبهُ نظام ( MS-Windows  V. 3.1

 من حيث الشكل، وهو يحتوي على قدرات الاثنين معاً. وأنتجت  الشركتان (AT&T  و  Novel) نظام

( Univel )  وهو نظام يونيكس مطوَّر ، وله قدرات عالية في مجال الشبكات ( Networking )  .

وهذه الأنظمة ظهرت في عام 1993 - أول مرة - إلى حيز الوجود.

 

      وإليك - فيما يلي - مجموعةَ الأنظمة التي تم تطويررها من قبل الجامعات ومنتجي

الحواسب :

 

        اسم النظام                     الجهة المنتجة

        System VR4.2                        AT&T

                                                Novell

        AIX                                   IBM

        HP UX                                HP

        IRIX                          Silecon Graphics

        SCO  Open Desctop ODT          Santa Cruz Operation

        SunOs                                Sun Microsystems

        Solaris                                SunSoft

        Ultrix                         DEC Digital Equipment Corporation

        XENIX                               MicroSoft

        SINIX                                Siemens

        OSF/1                                 Carnegie Mellon

University

        BSD Unix                     Berkeley University

 

        هناك عديد من الأجهزة مختلفة التصنيع ذات الوظائف المتعددة ، مثل وحدات التخزين

المختلفة (الأشرطة والأُسطوانات الضوئية والمغناطيسية وغيرها). وأهم وحدة في جهاز الحاسوب هي

الوحدة المركزية CPU  (Central Proccessing Unit)  ، التي تتكون من وحدتين اثنتين هما: 

وحدة الذاكرة  (Memory) ، ووحدة العمليات والمعالجة (proccessor)  التي تقوم بالعمليات

الحسابية ، وتتحكم في الأجهزة والوحدات المرتبطة في الحاسوب ، وتُنجز الأوامر الصادرة عن

الأغلفة والبرامج  .

 

هناك نوعان من الوحدات المركزية المتداولة:

 

                -      CICS (Complex Instruction Set)

                -      RISC ( Reduced Instruction Set Code

 

        وحدة (CISC) لديها إيعازات آلية أكثر عدداً من وحدة (RISC) ¡ ولذلك تكون أبطأ في

الإنجاز ، والبرامج التي تُكتب لتعمل من خلال وحدة (RISC) يكون لديها إيعازات وأوامر أكثر

لتغطية نقص الإيعازات الآلية فيها، ولكنّ هذه البرامج تظل سريعة الإنجاز لأن وحدة العمليات

والمعالجة لاتحتاج إلى إيعازات آلية كثيرة لإنجاز واجبات البرامج ، وإنتاجُ وحدات (RISC)

صناعياً أسهل وأسرع.

 

        إن وحدة (CISC) هي من إنتاج شركة (INTEL)  (المشهورة ب 8086 إلى 80486  و

Pentium) وشركة Motorola ( المشهورة ب  68XXX  ) .

 

         أما وحدات (RISC) فهي من إنتاج شركات   DEC (Alpha-Chip) و MIPS (R4000-R4400) و

QED (Orion-Chip) و SUN وSPARC  وغيرها.

 

        وحدة الذاكرة:

 

        في وحدة الذاكرة تتواجدالإيعازات الضرورية لوحدة العمليات والمعالجة والتحكم،

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

التشغيل.

 

وحجم وحدات الذاكرة ووحدات التخزين الأخرى تُقاس بكمية ال (Byte) :

 

KB (Kilo-Byte) ¡   MB (Mega-Byte) ¡   GB (Giga-Byte)

Byte=8Bit       KB=1024Bytes   MB=1024KB   GB=1024MB

 

وال Byte  يحتوي على 8 Bit¡ ووحدة Bit لها حالتان 1 أو 0 ،  والByte  الواحد يستطيع أن

يستوعب عدداً ما (من 0 إلى 255) ، أي 256 حالة . وحجم الذاكرة (RAM  ) في الأجهزة التي تعمل

بنظام يونيكس تتراوح عادةً ما بين 8 إلى 64  MB  ، وذلك حسب الحاجة والمقصد.

 

         الوحدات الأخرى:

         توجد وحدات (أجهزة) إضافية بجانب الوحدة المركزية مثـل :

 

        وحدات التخزين الثابتة (Hard-Disk) البالغة سعتها عدة GB=GigaByte  والتي يُخزن

بها نظام التشغيل ، وبرامجه العديدة ، والمعلومات والبرامج الخاصة Software & Data

لمستخدِمي الجهاز والتي تتواجد في وحدة الذاكرة بعد الانتهاء من العمل،لأن هذه المعلومات

تضيع لدى إطفاء الجهاز ولذلك يجب تخزينها .  ويمكن استعمال وحدات التخزين الثابتة كوحدات

ذاكرة إضافية إذا استدعت حاجة أحد البرامج إلى ذاكرة أكثر مما هو موجود في ( RAM ) ،

ويعمل هذا البرنامج بطريقة أبطأ من البرامج التي تعمل في الذاكرة الحقيقية ، لأن القراءة

والكتابة في هذه الحالة تكون ميكانيكية وليست الكترونية .

 

        ووحدات التخزين المتنقل هي أقراص(_SYMBOL 60 \f "Wingdings"_ _SYMBOL 61 \f

"Wingdings"_ floppy-disk) ¡ وأشرطة (tape)¡ و أقراص ضوئية ( laser-disk) ¡ بلاستيكية ،

كضمان في حالة التلف أو العطل.

        وأجهزة الإخراج كالطابعة والراسم .

 

        وأجهزة الاتصال (_SYMBOL 57 \f "Wingdings"_ modem ) هي لربط جهاز الحاسوب بأجهزة

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

 

ومطاريف العمل _SYMBOL 58 \f "Wingdings"_ Terminals ( تحتوي على الشاشة ومفاتيح الإدخال)

¡

 

        ومطاريف الإدخال هي التي تمكّن الإنسان من القيام بالاتصال بالحاسوب والعمل والتفاهم

معه. وهناك عدة احتمالات لوصل هذه المطاريف بالحاسوب، والاحتمال الرئيسي هو أن يكون المطراف

موصولاً بصورة مباشرة مع الجهاز من خلال الخط التسلسلي (  serial  port) ، أما إذا كان

المطراف بعيداً عن جهاز الحاسوب فيمكننا ربطه بواسطة خط الهاتف  من خلال ال ( modem ) أو من

خلال الشبكات ( NETWORK) .

 

        إن جهاز يونيكس يحتاج بالطبع إلى المطراف الرئيسي (_SYMBOL 58 \f "Wingdings"_ 

Console)¡ والذي يمكن من خلاله التحكم في النظام ، ومطاريفِه العديدة ، والأجهزةِ المرتبطة ،

وشبكةِ الاتصالات ، وغيرها... ولقد كانت المطاريف تقتصر في إظهار وإدخال المعلومات على

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

وغيرها... وهذه المطاريف يجب ربطها بواسطة الشبكة الإلكترونية أو الوصل المباشر ، لأن كميات

المعلومات التي تُنقل إليها كبيرة جداً، وخطوط الهاتف -حالياً- لا تستطيع نقل هذه الكميات

بالسرعة المطلوبة.

 

_

 

بعض الأجهزة التي يمكن ربطها بالنظام UNIX

 

        نلاحظ هنا الفاكس ، والفأر ، وال PC ¡ والطابعات ، وأسطوانة التخزين ، والمطراف.

 

        استخدام الرموز والمصطلحات:

 

        قمت بكتابة أسماء الملفات والأدلة والأوامر ومفاتيح العمل وغيرِها بشكلها المتداول 

مثل ( group/etc Return Directory ) إلخ... ولم أقم بترجمتها حرفياً ، أما الرموز على

مفاتيح العمل فتجدها كما هي مطبوعة في مكانها، مثل  (Return _SYMBOL 191 \f "Symbol"_ و

Control(Ctrl) Delete(Del) أوF1 F2 ...... F12   أو ScrollLock) . ومن الجدير بالذكر أن

مفتاح (Shift_SYMBOL 241 \f "Wingdings"_) يستخدم لكتابة الأحرف الكبيرة ، وأن مفتاح

(Ctrl) يستخدم لإدخال رموز الأوامر مثل ( Ctrl -C ) ¡ أي أنه يُضغط مفتاح (Ctrl) ويبقى

مضغوطاً و يُضغط مفتاح حرف (C) ثم تترك معاً ، وهذا يوقف عمل برنامج ما. ويستعمل مفتاح

الهروب (Esc) للخروج من البرامج تدريجياً ، وأسماء الملفات المقصودة وضعت لها البدائل (

filename أو file ) ، أما إضافات الأوامر فيتم إدخالها بعد علامة الطرح (مثل -a).

 

_

لوحة مفاتيح الإدخال

الفصل الأول

 

الدخول إلى النظام

 

        1.1    عملية الإدخال                

        2.1    تسجيل الدخول Login                

        3.1    انتهاء العمل في يونيكس             

        4.1    المستخدِمون والمجموعات           

        5.1    مدير النظام   root            

        6.1    كلمة المرور                          

        7.1    المساعَدة help                       

الفصل الأول

الدخول إلى النظام

 

1.1. عملية الإدخال

 

        يتم إدخال المعلومات والأوامر غالباً بواسطة لوحة المفاتيح المتصلة بالمطراف، كما

يتم بواسطتها إدخال الأحرف الأبجدية (Z-A) ¡ والأرقامِ ، والرموزِ الأخرى ، مثل /!.$.&()

وغيرها. وتتشابه لوحة المفاتيح في الغالب مع مفاتيح الآلة الكاتبة المعتادة ، إضافةً إلى

مفاتيح الإدخال الأخرى مثل  (Return أو Enter) ، وهذا المفتاح يحتوي على السهم المعوج

_SYMBOL 191 \f "Symbol"_ المتجه إلى اليسار، وهو ينهي كل سطر من إدخال الأوامر والإيعازات

المعطاة والأسطر الكتابية، ويرسلها لوحدة العمليات والمعالجة في الحاسوب . أما مفتاح

(BackSpace) وهو سهم متجه إلى اليسار  _SYMBOL 231 \f "Wingdings"_ فيحذف الأحرف المصفوفة

باتجاهه ، ومفتاح (  Del  أو Delete ) يحذف من اليمين. وتوجد أيضا مفاتيح ( F1إلىF12 ) ،

وهي مفاتيح يمكن برمجتها للقيام بوظائف تكرارية في البرامج الخاصة.

 

وفي قسم المطاريف من هذا الكتاب يمكننا معرفة كيفية تغيير وظائف المفاتيح.

 

2.1 تسجيل الدخول Login 

 

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

ويظهر الوامض مع كلمة Login:  كمحث للتسجيل. وفي هذه الحالة يجب إدخال اسم المستخدِم الذي

يريد الدخول، وأن يكون مُسجلاً لدى النظام، ويكونَ ممنوحاً حق الدخول. وبعد ذلك يطلب النظام

إدخال كلمة المرور الخاصة بالمستخدِم التي تُخَزن مرموزة ، وذلك كي لا يستطيع أحد غير مخول أن

يحل رموزها السرية. والأحرف لاتظهر على الشاشة أثناء إدخالها ، حفاظاً على سرية كلمة المرور

(الشكل 1).

 

 

 

_

الشكل 1

 

        وننهي كل إدخال بمفتاح Return  أو Enter. ويجب لدى إدخال هذه المعلومات أن ننتبه

لكتابة الأحرف الكبيرة والأحرف الصغيرة أثناء الإدخال، لأن يونيكس يفرق ما بينها، وذلك خلافا

لنظام MS-DOS الذي لا يفرق بين هذه الأحرف. وفي حالة حصول خطأ في إدخال المعلومات الصحيحة،

فإن النظام يُعلمنا بذلك تلقائياً ويظهر Login incorrect..  أو  Invalid  Login  على

الشاشة، وتظهر بعد ذلك عبارة Login: ثانيةً ، لكي تعاد عمليةالإدخال مرة أخرى. وبعد إدخال

المعلومات الصحيحة (الاسم وكلمة المرور) تظهر على الشاشة علامة الدولار  $ (علامة الغلاف) مع

إشارة الوامض الذي يظهر ويختفي كل الوقت ، بشكل وامض أو غماز كما هو مبين في الشكل

المرفق:

 

_

الشكل 2

 

        بعد ظهور علامة $ مع الوامض، يكون النظام يونيكس الآن مستعداَ لاستقبال الأوامر. وهذه

العلامة $ هي علامة الغلاف  Shell الذي يشكل بحد ذاته واحداً من برامج يونيكس ، ووظيفة هذا

البرنامج هي ترجمة الأوامر الخطية المكونة من أحرف إلى إيعازات آلية ، تُوَجَّه إلى وحدة

التحكم التي تقوم بتشغيل البرامج الضرورية للقيام بالوظائف المختلفة والمقصودة، وهذه

العلامة $ تكون قابلة للتغيير. ولايستطيع المستخدِم أن يقوم بتشغيل أي برنامج في هذا النظام

دون استخدام الأغلفة Shells  . وبعد قيام الأغلفة بأداء عملها بنجاح يظهر المحث _$ مع

الوامض ثانية لاستقبال أوامر أخرى. وفي بعض الأحيان يكون شكل المحث هكذا % أو # أو بأي شكل

آخر، وهذا يعني في بعض الحالات أن هذا النظام يستعمل غلافاً غير نموذجي ، أو أن المحث قد تم

تغييره من قبل مدير النظام. وفي هذا الكتاب نستعمل غالباً المحث _$ الذي نوضح في جزء

الأغلفة منه كيفية تغيير شكله.

 

$ date                برنامج إظهارالتاريخ  date

 Wed Feb. 19  10:46:15  1993

$_

 

        باستعمال الأمر (date) يظهر في المثال أعلاه، اليوم والشهر والساعة والدقيقة

والثانية والعام.

 

        وبرنامج bc   يحسب لك الأرقام كالآلة الحاسبة  (وننهي كل سطر ب Return   ) كما هو

في المثال التالي:

 

$ bc

128+54

182

24^4

331776

quitt

$_

وينتهي العمل في هذا البرنامج بإدخال  Quit

 

        وإذا أردت أن تحسب مع استخدام الفاصل التعدادي فيجب أن تدخل الإضافة-lmath    بعد

الأمر bc :

 

$ bc -lmath

2.2-1.1

1.1

Quit

$_

 

        ويمكن استخدام جميع العمليات الرياضية (مثل سينوسS() Sinus  ) ولاتنسَ أن تضع مفتاح

الفراغ ما بين الأمر والإضافات .

3.1    انتهاء العمل في يونيكس

 

        عند الانتهاء من العمل في يونيكس يجب تسجيل الخروج ( logout أو exit ) قبل مغادرة

الجهاز، وعند ذلك يظهر محث (login) للدخول مرة أخرى من قبل شخص آخر إلى النظام. وفي حالة

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

الخاصة، دون أن يُدخل نفسه إلى النظام بطريقة مشروعة. وإذا عَزَلت الطاقة عن مطرافك ولم تُخرِج

نفسك بالطريقة المذكورة، فإنّ أيَّ إنسان يستطيع أن يشغِّل المطراف ثانية، ويكون من المستطاع

العمل كما كان ذلك قبل إطفائه وبصلاحياتك . ولا تطفىء جهاز اليونيكس الرئيسيَّ (server) أثناء

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

لم يتم تخزينها بعد. وقبل إطفائه يجب تخزين محتويات وحدة التخزين (RAM) في وحدات التخزين

(hard-disks) _SYMBOL 59 \f "Wingdings"_.

 

4.1 المستخدِمون والمجموعات

 

        إن كل مستخدِم في نظام يونيكس - كما ذكرنا سابقاً - له اسم خاص وكلمة مرور خاصة،

يستطيع النظام بواسطتها أن يحميَ معلومات المستخدِم الخاصة من العبث واستعمال غير المخول.

واسمُ المستخدِم يكون أيضاً العنوانَ المعتمدَ للبريد الإلكتروني التابع للنظام. ونظامُ يونيكس

يستعمل داخلياً رقم المستخدِم فقط وليس اسمَه ، وهذا الرقم يُعطى تلقائياً من قِبَلِ النظام في

حالة تسجيل مستخدِم جديد. وإذا أردنا معرفة أسماء العاملين على النظام في الوقت الحاضر،

نُدخل الأمر  whoونضغطReturn  .

 

 

$ who

Ziad          ttyp0          Feb          6    09:41

mazen      ttyp1          Feb          6    11:15

Ahmad     ttyp2          Feb          6     12:00

nabilah     ttyp3          Feb          6     13:01

root          console     Feb           6     10:10

$

الشكل 3

 

        كما ترى أعلاه، يعمل هؤلاء المستخدِمون حاليا ًفي النظام من اليسار إلى اليمين، وتظهر

جلياً الأسماء والمطاريف والتاريخ والوقت.

 

        والأمر who am  i يعطيك اسمَ الذي يعمل على هذا المطراف :

 

$ who am i

ziad          ttyp0         Feb      6      9:41

 

        ويستطيع مدير النظام (superuser) أن يستعمل سجل المجموعات لإعطاء الصلاحيات

والحقوق، أي أن يسجل الأشخاص في مجموعات مختلفة، لكي يعطيَ لكل مجموعة حقوقاً وصلاحيات خاصة

بها. فلو وجد على سبيل المثال ثلاثة عاملين في قسم المحاسبة ، فإنه يحق لهم استخدام

معلومات معينة، مثل معلومات الميزانية أو الأجور، ويمكن جمعهم في مجموعة واحدة لها حقوق

معينة.

5.1  مدير النظام   root

 

        يوجد لنظام يونيكس في العادة مدير يتمتع بالحقوق الممنوحة له جميعاً  يسمى (root)

، ورقمه التسلسلي صفر ، وهذا المدير يحق له أن يسجل ويحذِف المستخدِمين والمطاريف والاجهزة ،

ويحذِف الملفاتِ والبرامجَ ، وينهيَ العمليات ...إلخ

 

6.1  كلمة المرور

 

        كلمة المرور هي "مفتاح الخزنة" ، وعندما تكون معروفةً من قبل المستخدِم يكون من

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

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

وأرقام ورموز يتعين خلطها كبيرةً وصغيرةً ، ولا تضع أسماء معروفة أو كلمات من القاموس أو أي

مرجع معروف ، واستعمل الرموز مثل  !@#^&*)(.. وكما تلاحظ (الشكل 4 تالياً) ، فإنه يمكن

تغيير كلمة المرور في أي وقت باستعمال أمرpasswd .

 

$ passwd

Changing password for ziad

Old password:

New password:

Re-enter new password:

$

الشكل 4

 

        إن برنامج passwd   يطلب أولاً كلمة المرور الحالية old password، ثم الكلمةَ

الجديدةnew passwod  ، ويعاد كتابتها للتأكد  Re-enter password  ، وبعد ذلك تكون الكلمة

الجديدة هي المعتمدة في حالة دخولٍ  جديدٍ إلى النظام .

 

7.1  المساعدة help

 

        إنَّ أحد برامج يونيكس المسمى (help) يُستعمل كمرجع ومساعد، وهو يعطيك معلومات عن

الأوامر والإيعازات الموجودة في النظام إلى جانب إضافاتها¡

 

        وإليك حالاتِ الإدخال كما هي في الشكل التالي:

 

صورة عامة عن الأوامر في نظام (AIX)

$ help

 

Look in a printed manual for general help if you can. To get started.

refer to Using the AIX Oerating System manual.

 

 

The commands:

        man -k keyword     

lists commands relevant to a keyword

        man command                prints out the manual pages for a command

are helpful; other basic commands are:

        cat            - concatenates files (and just print them out)

        ex             - text editor

        finger         - user information lookup program

        ls              - lists contents of a directory

        mail           - send and receive mail

        passwd        - change login password

        sccshelp      - view information on the Source Code Control System

        tset            - set terminal modes

        who           - who is on the system

        write          - write to another user

 

you could find programs about mail by the command:   man -k mail

And print out the man command documentation via:      man mail

you can log out by typing control -d (if your prompt is $)

or by typing logout (if your prompt is %)

 

        هذه المعلومات المدونة أعلاه تعطي صورة عامة عن الأوامر كما هو مبين ، وإذا أردنا

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

كإضافة:

 

$ man who

 

        وفي الجدول التالي ترى بياناً تفصيلياً عن الأمر who في (SunOs):

 

 

WHO(1)                                     USER COMMANDS                       WHO(1)

 

NAME

        who - who is logged in on the system

 

SYNOPSIS

        who [  who-file] [ am i ]

 

DESCRIPTION

        Used without arguments¡ when who lists the login name¡ terminal

        name¡ and login time for each current user. who gets this

        information from the   /etc/utmp  file.

        If a filename argument is given¡ the named file is examined

        instead   of   /etc/utmp.  Typicaly  the named   file   is

        /var/adm/wtmp¡ which contains a record of all logins since

        it was created. In this case. who lists logins¡ logouts¡

        and crashes. Each login is listed with username¡ terminal

        name (with   /dev/ Supperessed)¡ and date and time. Logouts

        produce a similar line without a user name. Report produce

        a line with '~' in place of the device name¡ and a fossil

        time indicating when the system went down. Finally¡ the

        adjacent pair of entiers '|'  and '}' indicate  the system-

        maintained time just before and after a date command changed

        the system's idea of the time.

        Whit two arguments¡ as in ' who i am ' (and also 'who is

        who')¡ who tells who you are logged in as : it displays your

        hostname¡ login name¡ terminal name¡ and login time.

 

EXAMPLES

                example % who am i

                example ziad   tty0     Mar 23 12:30

                example %

                example % who

                samir         Mar     24 11:20

                munir         Mar     24 12:03

                example %

 

FILES

                \etc\utmp

                \var\adm\wtmp

 

SEE ALSO

                login(1). w(1). whoami(1). utmp(5V). locale(5)

                Sun Release 4.1   Last change: 20 April  1990

 

        يتبين - هنا - اسمُ الأمر وشرحٌ قصير بعد (Name) ¡ وكيفيةُ إدخال الأمر مع إضافاته بعد

( SYNOPSISاوSYNTAX ) ¡ ونجد الإضافاتِ جميعاً بعد (DESCRIPTION)، والأمثلةَ بعد (EXAMPLES) ،

والملفات الضروريةَ لهذا الأمر بعد (FILES) ، والأوامرَ المماثلةَ ، والواجباتِ بعد (SEE ALSO).

 

        نلاحظ من خلال عرضنا الذي سبق للأمر who ¡ وبعد تقديم شرح مختصر لهذا البيان ، 

كيفيةَ إدخال الأمر مع إضافاته، والأمثال والملفات الضرورية لهذا الأمر، والأوامر المماثلة،

ونستطيع على ضوء ذلك  أن نستبدل ب (who) أيَّ أمر آخرَ تابعٍ للنظام.

 

        وهناك طريقة أخرى للحصول على المعلومات باستعمال (man -k <word> ) ¡ وذلك بأن

يبحث (man) عن كلمة "word" أو أي كلمة أخرى في معلوماتِ أحد برامج النظام.

الفصل الثاني

 

الملفات والأدلة

 

1.2    عمل ملف جديد و إظهار المحتوى           

2.2    سرد الملفات

3.2    الأدلة

                1.3.2 جذرالأدلة ، تشعب الأدلة

                2.3.2 أدلة العمل

                3.3.2 التنقل بين الأدلة

                4.3.2 الأدلة الرئيسة والمنسوبة

                5.3.2 عمل دليل جديد

                6.3.2 إضافات  لجدولة الملفات والأدلة              

                7.3.2 نظام الملفات

 

4.2    الأدلة التقليدية لدى يونيكس

 

                1.4.2 الدليل الجذر root-directory  

                2.4.2 دليل البرامج /bin 

                3.4.2 دليل ملفات التعليمات /etc

                4.4.2 الدليل المؤقت /tmp

                5.4.2 دليل المستخدِمين

                6.4.2 دليل الأجهزة  /dev

 

5.2    حقوق الاستعمال والحماية

                1.5.2 جدولة الحقوق                

                2.5.2 أحرف إضافية للحظر والحماية

                3.5.2 تغيير و إلغاء الحقوق 

6.2    تغيير الملكية و التاريخ

                1.6.2 تغيير الملكية  

                2.6.2 تغيير تاريخ الملكية   

7.2    إظهار محتويات الملفات

                1.7.2 الإظهار الكلي لمحتويات الملفات

                2.7.2 الإظهار التدريجي                             

                3.7.2 إظهار بداية ونهاية الملف                    

                4.7.2 الإظهار البينري binary-coded

                5.7.2 إظهار نوعية الملف                          

8.2    إدارة وتنظيم الملفات                         

                1.8.2 تغيير الاسم           

                2.8.2 طبع ونسخ الملفات

                3.8.2 الإشارة لارتباط الملفات

                4.8.2 إزالة وحذف الملفات

                5.8.2 إزالة وحذف الأدلة

                6.8.2 البحث عن الملفات

9.2    ملفات الأجهزة والوحدات     

الفصل الثاني

الملفات والأدلة

 

        تقوم أنظمة تشغيل الحواسب باستعمال الملفات (Files) لتنظيم المعلومات والاحتفاظ

بها، ويكون محتوى هذه الملفات برامجَ أو معلوماتٍ تحتاج لها البرامج ، أو معلوماتٍ شخصيةً

يُحتفظ بها على شكل سجل أو بيان أو صورة ...إلخ . ولكل ملف اسم يختلف عن الآخر، أي لا يجوز

إعطاء الاسم الواحد لأكثرَ من ملف واحد في الدليل ذاته. وأسماءُ الملفات يجب أن لايتجاوز حجمها

14 حرفاً لكل ملف. وتتكون غالباً من أحرف ورموز، ويجب الانتباه عند التسمية إلى إدخال الأحرف

الصغيرة والكبيرة، حيث أن (Letter  و letter  و LETTER ) تختلف ، أي أن اسم Letter يمكن

إدخاله بأشكال عديدة . بخلاف نظام التشغيل التابع للحاسوب الشخصي  MS-DOS ، الذي لا يقارِن

ما بين الأحرف الكبيرة والصغيرة في تسمية الملفات، إنما يفرق فقط في وضع النقطة في الاسم ،

مثل (LETTER.TXT) , ويتكون اسم الملف في نظام DOS من 8 أحرف زائد 3 أحرف بعد النقطة،

ويونيكس يستعمل النقطة كبداية للملفات الخفية فقط مثل .profile ، وماعدا ذلك ، تكون

النقطة كأي حرف آخر.

 

        وتوجد معلومات إضافية يستعملها يونيكس لإدارة الملفات، مثل لائحة المعلومات عن

الملفات Inode (informations code) ¡ والتي تحتوي على جميع المعلومات الخاصة بالملفات

الموجودة في النظام. ويُسجِّل النظام لكل ملف مالكاً أو مجموعة من المستخدِمين . وللملف رقمُه

التسلسلي الموجود في لائحة (Inode) ، وبذلك يُسَجل من له الحق بفتحه ورؤيته وتغييره وحذفه

...الخ . ويُسَجل  أيضا عدد الأحرف (Byte) في الملف ، وتاريخَ تأسيسه وتغييره  ، وآخرَ مرة تم

فيها قراءته.

 

        وهناك ملفات الأجهزة : مثل ملفات المطاريف والطابعة وأقراص التخزين والأشرطة

والأجهزة الأخرى المربوطة بالنظام. وعليه يمكننا القول:

 

        إن نظام يونيكس يتمتع بالمرونة العالية ، حيث يرسل المعلومات إلى الشاشة أو

الطابعة لكتابتها في ملفاتها ، أي أن الشاشة أو المطراف أو الطابعة هي أيضاً ملفات .

 

        وهناك الأدلة، وهي أماكن تواجد الملفات، أي أن الأدلة تحتوي ملفات وليس معلومات أو

معطيات، وسنذكر مزيداً عن الأدلة لاحقاً.

 

1.2  عمل ملف جديد و إظهار المحتوى

 

        نعمل ملفاً جديداً بواسطة استعمال الأمر  cat:

 

_

الشكل 5

        وذلك يعني أنك عندما تدخل الأمر (cat) وبعده الإشارةَ (<) ، يرسل (cat) كُلَّ ما تكتبه

إلى الملف (file)¡ بعد أن تضغط المفاتيح (Ctrl -D) .

 

        وإذا أردنا أن يُظهر يونيكس ما كتبناه على الشاشة نُدخل الأمرهكذا:

 

$ cat  file                                 

this is my 1. file in UNIX           

 

        وكما ترى ، فإن برنامج (cat) متعددُ الجوانب ، وكلمة (cat) تعني (concatenate)

تركيب . وتستطيع أن ترفق بعد (cat) عدة ملفات لتَظهَرَ على الشاشة ، أو تُرسَلَ إلى الطابعة

بالتتالي ، أو إلى ملف آخر يجمعها فيه وذلك كالتالي:

 

$ cat     personal   adress    telephon    > staf

 

        ونفهم من ذلك أن الملفات (personal   adress  telefon) تُسَجَّلُ محتوياتُها في ملف

جديد أسميناه (staf) ¡ وتبقى الملفات المنقولة كما هي. وفي حالة عدم وضع > staf بعد cat ¡

يُظهر لنا (cat) محتوى الملفات واحداً تلو آخر على الشاشة فقط. وملخص ذلك، أننا نستطيع

استعمال (cat) لجمع معلومات  كثيرٍ من الملفات في ملف واحد، أو أن نكتبَ الملاحظات ونُخزنَها

في ملف جديد . وفي حالة إدخال الأمر (cat) بدون إضافات، يُظهِر ما نكتبه على الشاشة فقط دون

تخزين.

 

2.2  سرد الملفات

 

يُظهر برنامج  ls  ما يحتويه الدليل من ملفات على الشاشة:

 

$ ls

personal    adress    telefon   staf

$

الشكل 6

 

        وبواسطة استعمال الإضافات تتنوع حالات الإظهار. وبعض هذه الإضافات كالرموز المُمَثلة (?

 * ) وتسمى meta character . وهذه الرموز تُعد بديلة عن الأحرف المقصودة في الكلمة عند

البحث عن أحد أسماء الملفات ، ومعنى ذلك أنه إذا أردنا إظهار قائمة الملفات بالأسماء التي

تبدأ بحرف معين مثل(p) نستعمل كتابة الأمر هكذا:

 

ls      p*

personal        peter

$

 

        وهنا نبين حالة استخدام علامة الاستفهام التي تنوب عن حرف واحد :

 

$ ls     persona?

personal

$

 

        وحالة اُخرى:

$ ls   pe??r

peter

$

 

وفي حالة وضع الإضافة (-a) يظهر لنا في اللائحة جميع الملفات، ومن ضمنها الملفات الخفية:

$ ls   -a

.          ..         .profile    personal       petor    adress    staf

$

 

        وملف (.profile) يحتوي على الإيعازات الأولية التي تُنجَزُ عند تشغيل النظام يونيكس ،

وهو يشبه (AUTOEXEC.BAT) في النظام (MS-DOS). أما بالنسبة إلى النقاط ( . و .. ) فهي

إشارات الدليل، أي أننا نتواجد في أحد الأدلة المتفرعة، وليس في الدليل الرئيسي (root) .

 

3.2  الأدلة

 

        تُعتبر الأدلةُ دوسيهاتٍ للملفاتِ أو بالأحرى فهارسَ وجداولَ لها، ومحتويات هذه الأدلة

تتكون من الملفات فقط ، أي أن الأدلة لاتحتوي على أية معلومات. إنما تكون المعلوماتُ موجودةً

في الملفات فقط .

 

        لنتصور بانَّ لدينا في الحاسوب 10.000 ملفاً بأسماءٍ ومجالات مختلفة، هل يكون

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

المساعِدةُ الحقةُ في تنظيم الملفات وترتيبها في النظام. ومن المستحسن وضع الملفات في أدلة

تشير إلى نوعها مثل دليل  /dev (device)¡ الذي يحتوي على ملفات الأجهزة كالطابعة

والمطراف... ويونيكس شبيه من هذه الناحية التنظيمية - فيما يتعلق بالأدلة - بالنظام  MS-

DOS ¡ وليس ذلك بغريب لأن مهندسي MS-DOS   اقتبسوا ذلك من النظام يونيكس.

1.3.2   جذرالأدلة ، تشعب الأدلة

 

        إن الأدلة الموجودة في نظام يونيكس تشبه في تنظيمها جذر الشجرة، إذ يشكل  (root-

directory) الجذرَ الرئيسيَّ الذي تتفرع منه الأدلة الفرعية (directoris ).

 

_

 

_EMBED PBrush_ _جذرالأدلة

 

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

ملفات تحمل الاسم  نفسـه ولكن في دليل آخر، وفي حالة العمل بهذه يجب إدخال اسم الدليل معها

هكذا (/usr/text/filename). أما في حالة إدخال الأدلة فيجب استعمال  الفاصل / ، لأنه يدل

على أن هذا الاسم هو دليل. ومثال على ذلك أن الدليل /usr  دليل متفرع من الدليل الرئيسي / 

(root) ¡ أما (/text) فهو دليل فرعي من /usr  ¡ والملف filename  يحتوي على المعلومات

التي نقصدها ، أي أنه يجب إدخال الطريق والعنوان للتوصل إليه.

 

2.3.2  أدلة العمل

 

        إذا أدخلنا الأمر  pwd بعد المحث ، يبلغنا النظام اسمَ الدليل المعمول به حالياً. و

pwd  تعنيprint workings directory  ، أي أن اسم الدليل الذي نتواجد به يظهر على الشاشة

على النحو التالي:

 

$ pwd

/usr/ziad

$

الشكل 7

 

        وهذا يعني أنَّ دليل العمل الحالي هو /ziad ¡ وهو دليل فرعي من دليل /usr .

 

        وهنا لا بد من الإشارة إلى أنَّ كلَّ مستخدِم في نظام يونيكس له دليلُ عمل خاصٌ يسمى  home

directory  ، وعندما يسجل مدير النظام مستخدِماً جديداً، فإنه يسجل له دليلَه الخاصَّ والذي

يكون دليلاً فرعياً من دليل  /usr أو  /home  ، و يحمل اسم المستخدِم الجديد.

 

3.3.2  التنقل بين الأدلة

 

        نلاحظ من خلال الشكل التالي أنه بواسطة الأمر cd (change directory)   يتاح لنا

التنقل بين الأدلة:

$ pwd

usr/ziad

$ cd /etc

$ pwd

/etc

 

        وهنا يَظهَرُ موقعنا بواسطةpwd  ¡  وهو الدليلusr/ziad  ¡ ونغير الموقع بواسطة cd ¡

ويصبح  /etc .

 

        وفي هذا الشكل نعود إلى موقعنا الأصلي:

$ cd /usr/ziad

$ pwd

/usr/ziad

 

4.3.2  الأدلة الرئيسة والمنسوبة

 

        إنَّ الأدلة التابعة للجذع -كما ذكرنا سابقاً - هي الأدلة الرئيسة ، وتبدأ بالفاصلة /

وتتبعها الأدلة المنسوبة، أي الفرعية ، وهذه تبدأ بدليل رئيسي بالإضافة إلى /:

$ pwd

/usr/ziad

$ cd text

$ pwd

/usr/ziad/text

$

        وهنا ترى أن /usr  هو دليل رئيسي ، و/ziad   منسوبٌ إليهِ ، والدليل /text  منسوبٌ

إلى الدليل /ziad  . وتلاحظ أننا غيرنا مكان العمل من /usr/ziad  إلى  /usr/ziad/text دون

ذكر الطريق الكامل ، أي بدل (cd  /usr/ziad/text  ) أدخلنا (cd text) ¡ لأن موقعنا كان

/usr/ziad.

 

        وإذا أردنا الخروج من هذا الدليل إلى الخلف نستعمل الأمر cd و النقطتين (cd ..)  

¡ وهاتان النقطتان تعنيان دليل التواجد لدى النظام:

 

$ pwd

/usr/ziad/text

cd..

$ pwd

/usr/ziad

 

5.3.2  عمل دليل جديد

 

        بواسطة الأمر (make directory)  mkdir نستطيع عملَ دليل جديد:

 

$ pwd

/usr/ziad

$ mkdir text2

$ cd text2

$ pwd

/usr/ziad/text2

$_

الشكل 8

 

        بذلك عملنا دليلاً جديداً منسوباً إلى الدليل/ziad   . ونظام يونيكس يسمح بوضع دليل

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

6.3.2  إضافات  لجدولة الملفات والأدلة

 

        لدى استعمال الأمر ls  يُظهر يونيكس الملفات والأدلة دون إظهار النوعية وذلك كالآتي:

 

$ ls

personal adress peter staf text text2

 

        وفي هذه الحالة يتبين استعمال الإضافة -f بعد ls :

 

$ ls -f

personal  adress  peter*  staf/  text/  text2/

 

        وتظهر الأدلة مضافاً إليها الفاصلة / وأسماءُ البرامج مع نجمة *.

 

        وهناك إضافات أخرى لبرنامج   ls  مثل -aR ¡الذي يُظهِرُ لك جميع الأدلة المنسوبة إلى

دليل معين ومحتوياتها:

 

$ ls -aR staf

staf

data:

41520.dat  38123.dat  40532.dat

$

 

7.3.2  نظام الملفات Filesytem

 

        لنظام يونيكس نظام أرشيفيُّ  "Filesystem"  يعمل على تخزين وتنظيم الملفات والأدلة،

وهذا النظام يشبه إلى حد كبير نظام السواقات diskdrives¡ والتي تكون على شكل C:\  D:\ A:\

 لدى النظامMS-DOS ، وهي أُسطواناتُ خزنِ المعلومات المرتبطة به، وتسمى harddisk 

وfloppydisk  ، وكل واحدة من هذه السواقات تشكل نظامَ ملفات مستقلاً ، أما في نظام يونيكس

فيوجد نظام الأرشيف ، وأسماء السواقات drives ، وهي بحد ذاتها ملفاتٌ  تسمى Disk1 Disk2 ...

، أشرطة التخزينTape-Device  تسمى  Tap1 Tape2 ...  ...إلخ . والنظام يونيكس يعتبر جميع

السواقات نظامَ ملفات filesystem واحداً ،أو أن تُقسَم كل وحدة على حدة كنظام ملفات مستقل.

وهناك أيضاً نظامُ ملفات مطوَّرٌ يُستعمل في أنظمة الشبكات يسمى NFS .

 

4.2 الأدلة التقليدية لدى يونيكس

 

        من المعروف أنَّ نظام يونيكس يحتوي على الأدلة التقليدية، وهذه الأدلة تحتوى على جميع

برامج وملفات النظام ، وهي أدلة رئيسة ثابتة تابعة للدليل الجذر... وإليك أكثرَ الأدلة

رواجاً:

 

  الدليل الجذر            / 

البرامج الرئيسة                 /bin

ملفات إضافية للبرامج  /etc

المستودع المؤقت             /tmp

دليل إضافي للمستخدِمين      /usr

دليل الأجهزة المرتبطة /dev

1.4.2  الدليل الجذر root-directory

 

        دليل الجذر هو الدليل الأعلى في النظام ، وكل الأدلة الأخرى تكون متفرعة منه، وهو

الدليل الأم للمستخدِم الرئيسي root ، وبه نجد الملفات الخاصة وملفات العمل التلقائي مثل

الملف  .profile، الذي يحتوي على الأوامر التلقائية التي تُنفذ في حالة تشغيل الجهاز. وفي

دليل الجذر نجد أيضاً برنامج نواة نظام التشغيل ، والنواةُ هي البرنامج الرئيسي للنظام

وتوابعه، وهي التي تحرك الجهاز وتوابعه وتجعلها قابلة للعمل. ويتم إدخال هذا البرنامج (

النواة) من وحدة التخزين إلى وحدة الذاكرة تلقائياً (boot) حال إدخال الطاقة إلى الجهاز.

ويسمى البرنامج في الغالب  unix أو vmunix ، وحجمه يتراوح ما بين نصف إلى واحدMB . وسنقدم

مزيداً من الشرح والإيضاح حول هذاالموضوع في جزء النواة من هذا الكتاب.

 

2.4.2  دليل البرامج /bin

 

        في هذا الدليل نجد البرامج الإضافية التابعة لنظام يونيكس ،التي تقوم بأعمال

مختلفة لخدمة المستخدِم مثل البرامج  cat و ls وpwd  وغيرها.

 

3.4.2  دليل ملفات التعليمات /etc

 

        دليل /etc   يحتفظ  بملفات تعليمات النظام، ومن أهمها : الملف group الذي يحتوي

على المعلومات الخاصة بالمجموعات ، والملف passwd الذي يحتوي على  كلمات المرور السرية ،

وأرقام وأسماء المستخدِمين والأدلة الخاصة بها، ومحتوى الملف passwd  يكون على هذا الشكل:

 

ziad:jpiygOU.DInTs:201:200:ziad yousef:/usr/ziad:/bin/sh

 

        وكما نرى أعلاه فإن كلمة المرور مرموزة وليس لها معنى لغوي مفهوم ، وهذا يمنع حل

الرموز من قبل شخص آخر. وبعض أنظمة يونيكس تستعمل النجوم بدل الرموز لإخفاء الكلمة.

ولايستطيع أحد قراءة الملف passwd  إلاَّ root  ¡ وفي ملف group نجد أسماء المجموعات

والمستخدِمين التابعين لها. وفي هذا الدليل نجد أيضاً ملفاتٍ أخرى مثل:motd  الذي يحتوي على

معلومات توجيهية تظهر على الشاشة أثناء تشغيل المطراف ، ومثل الملف utmp الذي يحتوي على

معلومات المستخدِمين الذين يعملون حالياً في النظام ،أما wtmp  فهو ملف احتياطي مؤقت يحتوي

على الأعمال التي يقوم بها المستخدِمون حالياً، وهذا الملف يتم تفريغه تلقائياً من حين لآخر ،

أسبوعياً أو شهرياً حسب ما يقرره مدير النظام.

 

4.4.2  الدليل المؤقت /tmp

 

        في الدليل المؤقت تخزن المعلومات في ملفات مؤقتة لتحذف بعد الانتهاء من العمل من

قبل النظام ، وذلك لأجل الحصول على السعة في أسطوانة (وحدة) التخزين ولمنع التضخم،

 

5.4.2  دليل المستخدِمين   /usr

 

        إنَّ دليل مستخدِمي النظام /usr لايحتوي في أغلب الأحيان على ملفات، ولكنه يحتوي على

أدلة المستخدِمين ، ومن أهمها دليل  /usr/bin  الذي يحتوي على برامج النظام الخاصة

بالمستخدِمين. وفي بعض الأحيان يتواجد الدليل /usr/etc الذي يحتوي على ملفات التعليمات

الخاصة بالمستخدِمين. وفي الدليل /usr/lib نجد جدول الوظائف للغات البرمجة. وفي 

/usr/inc/ude  نجد معلومات خاصة للبرمجة. و /usr/man  يحتوي على المراجع (manuals) .

و/usr/spool   يحتوي على معلومات وملفات الطباعة والبريد الإلكتروني.

 

6.4.2  دليل الاجهزة  /dev

 

        دليل /dev يحتوي على ملفات الأجهزة التابعة للنظام والمعلومات الخاصة بها، مثل

ttyp1  (مطراف) ¡ و lp1 (طابعة)، وnull  (المخرج الوهمي) .

 

5.2  حقوق الاستعمال والحماية

 

        في نظام الحاسوب متعددِ المستخدِمين Multiuser-System نجد دائما الحصانة التي تمنع

أي محاولة للعبث بالمعلومات أثناء القراءة والكتابة للملفات والأدلة، ولولا ذلك  تسـود

الفوضى داخل النظام. ويعتمد نظام يونيكس على حماية الموجودات بتصنيف هذه الحقوق إلى حقوق

كتابة وقراءة واستخدامٍ للملفات. ويعطى للمستخدِم حالةٌ أو حالتان أو ثلاثُ حالات rwx.

 

        وحالة (r)هي للقراءة ، أما (w) فهي تشمل الكتابة والقراءة والاستخدام والحذف

والنقل والتغيير ...إلخ. و (x) للاستعمال فقط، ويمكن ترتيب وإعطاء الحالات منفردة أو مجتمعة

لإحدى مجموعات المستخدِمين أو لكل مستخدِم على حدة. ومجموع حقوق الاستعمال تسعة حقوق (rwx rwx

rwx  ) تطبق على الملفات والأدلة والمستخدِمين ، وليس على (root) مديرِ النظام.

 

1.5.2   جدولة الحقوق

 

        كما ذكرنا سابقاً فإن برنامج ls يجدول لك أسماء الملفات الموجودة في الدليل ، وإذا

أضفت لهذا الإيعاز -F ¡ فإنه يجدول لك أسماء الملفات والأدلة إلى جانب رموز توضح نوعها. أما

علامة / فإنها توضع للأدلة ، ودونها يكون الملف ملفاً عادياً ، وتوضع النجمة * للبرامج.

 

        وإذا أردنا جدولة كل المعلومات عن الملفات والأدلة فيجب أن نضيف -l إلى الأمر ls:

 

$ ls -l

drwxr-xr-x    2      ziad      staf           320     04       Mar       10.33

letter

        الاسم الساعة          التاريخ    الحجم       المجموعة المستخدِم الارتباط 

الحقوق

الشكل 9

 

        وهنا تظهر صفات الملف والحقوق (drwxr-xr-x) ، وشرحها من اليسار إلى اليمين: حيث

أن الحرف الأول  d  يعني  دليل (directory) ، وإذا كان الحرف b أو c فهو يعني أنه ملف جهاز

( device  =  c  or  b ) وأن إشارة الطرح - تعني أنه ملف عادي .

 

 أما الحروف التسعة الباقية فتكون على هذا النحو  r w x r - x r - x  ¡ (   r= read 

قراءة ¡   w= write كتابة ¡  x= using  استعمال ، و - لاحقوقَ)

 

        الحرف الثانى من اليسار ولغاية الرابع يختص بحقوق المالك (owner) للملف أو الدليل

، ومن الخامس وحتى السابع يختص بحقوق المجموعة التابع لها المالك  group ، ومن الثامن

لغاية العاشر يختص بحقوق الباقين من المسجلين لدى النظام  others وفق الترتيب التالي :

 

ls   -al

drwxr-xr-x    5      ziad    staf            1024 10     Feb    12.22  .

drwxr-xr-x    33     root   system        4096 11     Jan    11.10  ..

drwxr-xr-x    2      ziad    staf            320   04     Mar   10.33  letter

-rwxr-x ---    1      ziad    staf            35932       10     Apr    11.34 

personal

 

        انظر إلى الدليل letter   (في الأعلى)، لقد اعتبر دليلاً لأن أول حرف من زاوية الحقوق

هو d  ¡ والحروف التسعةالتي تلي تعني :

 

-      الحروف الثلاثة الأولى r  w  x   فيها جميع الحقوق للمالك  ziad   .

-      والحروف الثلاثة التي تليها r - x  ¡ يحق فيها للمجموعة القراءة     والاستعمال .

-      أما الحروف الثلاثة الأخيرة فهي لباقي المستخدِمين الذين يحق لهم ما        يحق  

للمجموعة.

 

        وبالنسبة إلى ملف personal  ¡ فهو يُعَدُّ برنامجاً (ملفاً) ، لأن أول رمز (-) ¡ ولأن

الثلاثة الأولى من التسعة تحتوي على x ¡ وهي تعني استعمال البرنامج. والاستعمال بمثل هذه

الحالة يكون في أغلب الأحيان معطىً للبرامج والأدلة، وليس للملفات العادية. أما الثلاثة

الأخيرة - - - ، فهي لا حقوقَ فيها لباقي المستخدِمين.

 

2.5.2  أحرف إضافية للحظر والحماية

 

        ذكرنا سابقاً أنه يوجد تسعة أحرف للحظر والحماية ، مقسمة إلى ثلاث مجموعات ، كل

مجموعة مقسمة إلى ثلاثة أحرف :

 

        المجموعة الأولى تمثل حقوق مالك الملف أو الدليل أو البرنامج ، والمجموعة الثانية

تمثل حقوق المجموعة التي يَنتَسِبُ لها المالك ، والمجموعة الثالثة تمثل باقي المستخدِمين في

النظام.

 

        في المجموعة الأولى: الحرف الثالث يكون - وتعني حظراً كاملاً ، أما  x  فتعني حق

الاستعمال . وبدل (x  أو -) يمكن تحديد الحظر بالحرف  sأو t :

 

s = setuid-Bit:        وهذا يعني أن البرنامج يعمل بحقوق المالك أو المجموعة.

 

t = sticky-Bit:        البرنامج يُحفظ في وحدة الذاكرة طوال وقت العمل ، لكي

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

 

$ ls -l  /bin/cat

-rwsr-xr-x  1  root        system        71488    12   Okt    13.20  cat

 

        في الشكل الأعلى : البرنامج cat  نجد بحقوقه حرف s بدلآ من الحرف الثالث  x  من

المجموعة الأولى ، وفي هذه الحالة يستطيع أي مستخدِم أن يُظهِرَ محتويات أي ملف تواجَدَ في مجاله

دون أي حظرٍ أو تقييد ، لأن حرف  s  يُعطي برنامج  cat  حقوق root  مالكِ هذا الملف ، الذي له

الحق في كل شيء في النظام.

 

3.5.2   تغيير و إلغاء الحقوق

 

        كما ذكرنا: إن لكل مستخدِم و لكل مجموعة مستخدِمين حقوقاً معينة للقراءة و الكتابة

والاستعمال. وهذه الحقوق يمكننا  تغييرها أو حذفها في حال حيازتنا ملكيةَ الملف. والمدير

العام للنظام له الحق في التغيير وحذف الحقوق. وهذا التغيير يتم بواسطة البرنامج chmod 

(change mode).

 

        ويجب اعتماد إضافات التغيير لهذا البرنامج وهي  (u¡ g¡ o)¡ حيث  u تعني اسم

المستخدِم user  ¡ و g  تعني مجموعة المستخدِمين group  ¡ أما o فباقي المستخدِمين others.

 

        كما يجب مُراعاة ما ذُكر سابقاً عن الحظر واعتماد الرموز التسعة  (rwx rwx rwx

للحظر ومجموعاتها الثلاث ، وتتغيّرُ حقوقُ المجموعة الأولى بواسطة حرف u ، وحقوقُ المجموعة

الثانية بواسطة حرف  g، وحقوقُ المجموعة الثالثة بواسطة حرف o   كإضافة للأمر chmod.

 

        ويمكننا تغيير الحقوق - كلاًّ على حدة - باستعمال الحروف المذكورة أعلاه، أو سوياً

باستعمال حرف a (all) بدل  u¡g¡o، والتغيير يحصل من خلال إدخال رموز التغيير (+  -  =) ،

حيث تعني  + إضافة ، و - حذف، و = إضافة جديدة .  وبعد إدخال الحروف البديلة u¡g¡o تُكتب

الحقوق  r=read قراءة ، و  w= write كتابة ، و   x= using  استعمال.

 

        ونستطيع أيضاً إدخال أو تغيير الحرف الثالث من المجموعة الأولى بإدخال الحرفs   ¡

أو بإدخال t    ¡ كما ورد سابقاً عن هذه الحروف وعن مفعولها كبديلة للرمز x  .

 

        وهذه بعض الأمثلة التي توضح تغيير الحقوق:

 

$ chmod g+w Filename                           Filename =   ملف ما

 

        أضفنا حق السماح للمجموعة بالكتابة g+w¡ وتعني  g   مجموعة ، و+ إضافة ، وw 

كتابة.

 

$ chmod o=rx Filename

 

        الحقوق r - x   ¡ قراءة واستعمال من غير كتابة لباقي المستخدِمين o (others).

 

$ chmod a-w Filename

        إزالة حقوق الكتابة من الجميع a (all)   باستعمال w- .

 

        هذا ، ويمكن تغيير عِدَة حقوق في أمر واحد باستعمال الفاصلة ، كما في الشكل الأسفل:

 

$ chmod g=rx¡u+s File

 

        عملنا على إعطاء حقوق القراءة والاستعمال للمجموعة ، وإضافة حرف s  للمالك ، أي أن

هذا الملف يعمل بحقوق المالك كما ذكرنا في السابق.

 

        ويمكن استبدال رموز التغيير (rwx) باستعمال الأرقام (الأوكتالية 8^2)، فهي تغني

عنها . وهذه الارقام هي 1 و 2 و 4 ومجموعها  7 عند جمعها حسابياً (1+2+4=7) ، إذ تعني  rwx 

1 استعمال ، و 2 كتابة ، و 4 قراءة ، مثالُ على ذلك: 777 معناها ( rwx  rwx rwx )   ، 

ومثال آخر: 644 معناها (- r w - r - - r -  )  ...الخ .

 

        ونستطيع إدخال الحرف s   رقماً رابعاً. مثالُ ذلك:

 

        4755 وهي تعني أن جميع المستخدِمين يحصلون على حق القراءة والاستعمال، وأن مالك

الملف يحصل على جميع الحقوق، إضافةً إلى أن هذا الملفَ يعمل بحقوق المالك (rwsr-xr-x) . أما

حرف  t فيتم إدخاله بواسطة (root) مديرِ النظام فقط .

 

6.2  تغيير الملكية و التاريخ

 

1.6.2  تغيير الملكية

 

        ويتم تغيير الملكية بواسطة البرنامج  (change owne)  chown هكذا:

 

$ ls -al personal

$ -rwxr-x---  1      ziad       staf    35750       13  Feb  12.13  personal

$ chown mazen personal

$ -rwxr-x---  1      mazen  staf    35750  13  Feb  12.13  personal

 

        وتغيير ملكية الملف  personal من المالك ziad إلى المالك  mazen  لا يتمُّ إلا من قبل

مالك الملف أو مديرِ النظام root  .

 

        وجدير بالذكر أنَّ بعض أنظمة يونيكس تُحدد قسماً خاصاً من وحدة التخزين لكل مستخدِم في

استعمال مساحة محددة منها ، ويمكن أن يرفض النظام التغييرَ المرغوب به لقلة حجم المساحة

المعطاة لأحد المستخدِمين ، أي أنَّ (disk quta) المعطاة للمستخدِم تكون مستهلكةً أو غيرَ كافية

، وفي بعض الأحيان يكون مفعول البرنامجchown  ملغياً من قبل مدير النظام. وما ذكرنا عن

تغيير المالك يُطَبَّقُ أيضاً على المجموعات المالكة ، وذلك بإدخال الأمر كما يلي:

 

 

$ chgrp support personal

$ ls -al personal

-rwxr-x---1 mazen support 35750 13 fos 12.13 personal

$_

الشكل 10

 

2.6.2  تغيير تاريخ الملكية

 

        بواسطة البرنامج touch  يمكننا تغيير تاريخ آخر استعمال حصل لملف معين ، وذلك حسب

الشكل التالي :

 

$ touch personal

$ ls -al personal

-rwxr-x---1 mazen support 35750 15 sep 10.15 personal

$_

الشكل 11

 

        والتاريخ المقصود هو تاريخ النظام الحالي ووقته، ولكن يمكننا إدخال الوقت

والتاريخ كما نريد باتباع النمط التالي : سنة، دقيقة، ساعة، يوم، شهر:

 

$ touch 08100815 personal

$ ls -al personal

-rwxr-x---  1 mazen support 35750 10  Aug 8.15 personal

 

        ويمكن استعمال touch لعمل ملف جديد ، وذلك بإدخال touch هكذا:

 

$ touch samir

 

7.2  إظهار محتويات الملفات

 

1.7.2  الإظهار الكلي لمحتويات الملفات

 

        بواسطة البرنامج cat يتم إظهار ما بداخل الملف من معلومات مثلما ذكرنا في السابق:

 

$ cat  file  

this is my 1. file in UNIX           

$ cat  > file                            وهنا عملُ ملفٍ جديد

this is my 2. file

 

this is a File whithout No.

 

(Ctrl -D)                            اضغط هذه المفاتيح للإنهاء

الشكل 12

 

        ويمكن إضافة  -n  لترقيم السطور عند الإظهار، وإضافة -b لعدم ترقيم السطور الفارغة

مثل:

 

$ cat  -n file                                 

this is my 2. file

2

this is a File whithout No.

4

$ cat  -b file                                 

this is my 2. file

 

this is a File whithout No.

 

 

        وإذا أردنا إرسال محتوى الملف إلى الطابعة بدلاً من الشاشة ، فما علينا إلا كتابة

الإدخال على هذا النحو :

 

$ cat File > /dev/lp1               lp1 = ملف الطابعة

 

        وسنذكر مزيداً حول ذلك في جزء الطباعة من هذا الكتاب.

 

2.7.2   الإظهار التدريجي

 

        في حال استعمال البرنامج cat تظهر كافة محتويات الملف ، ولكنَّ هناك ملفاتٍ تكون

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

متتابعةً، وكذلك نستطيع إيقاف تعاقب الصفحات على الشاشة بضغط المفاتيح Ctrl -S ¡ ونعيد

تتابعَها بواسطة المفاتيح Ctrl -Q.

 

        ولكن ذلك ليس هو الحلَّ الصحيحَ، لأنه توجد أوامرُ أُخرى يستحسن استعمالها للإِظهار

التدريجي ، وتسمى هذه الأوامرُ more  و pg ¡ وهي التي تُظهر المحتويات صفحة صفحة:

 

$ more file1 file2 file3

 

        وبهذا المثال نسطيع رؤية هذه الملفات الثلاثة واحداً تلو آخر ، وتظهر لنا عند

انتهاء كل صفحة عبارة --more--   مشيرة إلى أنَّ البرنامجَ more  ينتظر منا السماح بتواصل

الإظهار ، بواسطة ضغط مفتاح الفراغ بعد كل صفحة ، حتى ينتهي محتوى الملف . وبواسطة ضغط

المفتاح Return يظهر الملف سطراً بعد سطر.

 

        ونستطيع أن نُظهر كل المعلومات المتعلقة في البرنامج more على الشاشة ، بإدخال

الحرف  h  (help) أثناء العمل بواسطة more  ¡ وذلك على الشكل التالي :

 

Most commands optionally preceded  by integer argument k. Defaults in brackets.

Star (*) indicates argument becomes new default.

-------------------------------------------------------------------------------------

------------------

<space>                      Display  next  k  lines  of  text   [ current screen size ]

z                               Display  next  k  lines  of  text   [ current screen

size ]*

<return>                     Display  next  k  lines  of  text   [ current screen

size ]

d or Ctrl -D                   Scroll  k  lines [ current screen size¡ initially 11

]*

q or Q or <interrupt>         Exit  from  more

s                              Skip forward  k  lines of  text [1]

f                               Skip forward  k  screenfuls of  text [1]

b or Ctrl -b                   Skip backwrds  k  screenfuls of  text [1]

¡                              Go to place where previous search started

=                              Display current line number

/<regular expression>       Search for  kth  occurrence of regular expression[1]

n                              Search for  kth  occurrence of last r.e [1]

!<cmd> or :!<cmd>          Execute <cmd> in a subshell

v                              Start  up  /usr/ucb/vi  at current line

ctrl -L                         Redraw screen

:n                             Go to  kth  next file [1]

:p                             Go to  kth  previous file [1]

:f                              Display current file name and line number

.                              Repeat previous command

ومن أهم هذه المعلومات الإضافاتُ s و f و   b  التي توضع أمام الأمر more:

 

إضافات more

           s    بعدها عدد السطور يقفز more إلى ما بعد ذلك العدد

        f       عدد الصفحات يقفز more إلى ما بعد هذا العدد من الصفحات

        b       يعود 10 صفحات إلى الخلف أو  Ctrl -B صفحةً صفحةً

          q     إنهاء العمل في more قبل نهاية الملف أو  Ctrl -Q

        /       بحث عن كلمة أو مصطلح بعد الفاصلة /word  وتليها Return

                 n ويعاد البحث

        !       بعد هذا الرمز نستطيع إدخال أي أمر موجود في النظام ،                    

        والعودةَ إلى more

          n     يظهر لنا الملف الآتي في حال تعدد الملفات

           p    يظهر لنا الملف السابق 

           f    يظهر لنا الملف الحالي

          =    تعيد لنا آخر أمر أدخلناه

  Ctrl -L      يعيد لنا بناء الشاشة

 

        هنا نقدم شرحاً عن برنامج pg ، وهو يشبه more إلى حد ما. ونستطيع إدخال (pg  file 

) لكي يَظهرَ لنا الملفُ صفحةً صفحةً على الشاشة .

 

        وبواسطة الحرف h  يظهر لنا المرجع help كما يلي:

 

h                              help

q or Q                         quit

 

<blank> or           \n next page

l                               next line

d or  ^D                      display a half page more

. or   ^L                      redisplay current page

f                               skeep the next page foward

n                              next

p                              previous file

$                              last page

w  or  z                        set window size and display next page

s  savefile                    save current file in savefile

/pattern/                      search forward for pattern

?pattern? or ^pattern^ search backward for pattern

!command            execute command

 

        مفتاح Return يظهر لنا الصفحة التالية  ( Return مكتوب في الأعلى بشكل \n  ¡ وهذا

يشبه الإدخال في لغة C) ¡ وإدراج السطر بحرف L  إضافة إلى عدد السطور القادمة ( L  5) ¡

وبواسطة علامة الطرح -( L -5 )   تظهر السطورالسابقة ، وإدخال 10 و Return  يظهر 10 صفحات

متتابعة،   وإدخالُ حرف  f يُظهِرُ الصفحة القادمة ، ورمز الدولار $ يُظهِرُ آخر صفحة  سابقة في

الملف.

 

        والبحث عن إحدى الكلمات يكون بإدخال الكلمة ووضعها داخل فاصلتين. فعلى سبيل

المثال ، إذا أردنا البحث عن كلمة House  فيجب كتابتها هكذا  /House/  ، وضغط Return  .

وإعادة البحث  تكون بواسطة // .  كما نستطيع البحث عن كلمة ما عكسياً ، أي  من آخر الملف

إلى أوله بكتابة الكلمة هكذا  ? House/ مع علامة الاستفهام بدل الفاصلة.

        وباستعمال الحرف n  أو الحرف p  نستطيع القفز مابين الملفات - في حالِ إظهار

العديد منها - ، وبالإمكان إدخال الأوامر بعد علامة ! ،وننهي البرنامج بحرف q  أو  Q .

ونستطيع تخزين الملف الظاهر باسم آخر ، إذا كتبنا الحرف  s وبعده فراغٌ ، ثم الاسمَ (s

file2) .

 

        والبرنامجان more و pg يعملان مع برامج أخرى للإظهار ، مثل برنامجls    وغيره ،

بواسطة استعمال الاُنبوب (|) pipe . مثال على ذلك :

 

$ ls -al | more

$ ls -al | pg

تظهر لنا - في الأعلى - قائمة الملفات بالصفحة ، وفي هذه الحالة يجب فصل البرامج  باستعمال

الاُنبوب (|) pipe ¡ وهي موجودة في أغلب لوحات المفاتيح ، ورقمُها 124 من ASCII-Code .

 

3.7.2  إظهار بداية ونهاية الملف

 

        مما نود ذكره أن برنامج  head  يُستخدم لإظهار أول الملف، والبرنامج  tail لإظهار

آخر الملف. والبرنامج head يمكن الاستغناء عنه ، لأن البرنامجين more  و sed  يقومان

بعمله.. انظر المثال التالي:

 

$ head -20 file

أو

$ sed 20q file

 

        وسنشرح مزيداً عن الأمر sed فيما بعد.

        أما البرنامج  tail  ¡ فيُظهر آخر المعلومات من الملف المطلوب، ونستطيع استعمال  -

و +  مع عدد الأسطر للانتقال إلى الأمام والخلف، بهدف إظهار محتوى الملف. وبالإمكان أيضاً

استعمال عدد السطور أو الأحرف لدى إدخال الأوامر كما هو في المثال التالي:

 

$ tail -20 file                 يظهر آخر 20 سطراً من الملف

$ tail -300c file              يظهر آخر 300 حرف من الملف

$ tail +200 file               يظهر الملف بعد السطر 200

 

        الإضافة f   تُظهر لك آخر الملف ،وحرف c  يعني  (character):

$ tail -80cf file

 

        والمثال الأعلى يُظهر آخر 80 حرفاً من الملف ، وينتظر تضخم الملف لإظهار الأحرف

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

مهم لمراقبة العمل الخلفي للنظام (انظر المعالجة الخلفية للعمليات في هذا الكتاب). ملاحظة:

ربما لا تجد البرنامجين  tail و head  في نظامك.

4.7.2  الإظهار البينري binary-coded

 

        كلمة (بينري) تعني التعداد الكمبيوتري الذي يَستخدِمُ الطريقة الثنائية بالعدد 2

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

و1 ، وهذه تكون حالة ال  Bit الواحد (خلية واحدة)، والمجموعة من هذه ال Bit's تسمى  Byte

، وهذه تتكون من  Bit 8  (بينري 10101010 عشري 170)

 

 

 1  0  1  0  1  0  1  0

128+32 +  8  +  2=170

 

 

32=2^5      16=2^4      8=2^3       4=2^2       2=2^1       0=2^0

 

        ونستطيع الاحتفاظ بعدد من 1 إلى 255 في كل   Byte ¡ ويوجد نظام خاص بهذا متعارف

عليه من قبل العاملين في مجال الحاسوب يدعى نظامَ  ASCII-Code ¡ وهنا نبين جدولَ الأحرف من 1

إلى 127 المتعارفَ عليها:

American Standard Code for Informetion  Interchange  =  ASCII

  0   NUL  21  NAK  42   *    63   ?     84   T   105  i

  1   SOH 22  SYN   43   +   64   @   85   U   106  j 

  2   STX 23   ETB   44   ¡    65   A    86   V   107  k 

  3   ETX 24   CAN  45   -    66   B ;   87   W  108  l 

  4   EOT 25   EM    46   .     67  C    88   X   109  m  

  5   ENQ 26  SUB  47   /     68   D    89   Y    110  n 

  6   ACK 27   ESC 48   0    69   E    90   Z    111  o 

  7   BEL  28   FS    49   1    70   F    91   [     112  p

  8   BS    29   GS    50   2    71   G   92   \      113  q 

  9   HT     30   RS    51   3    72   H   93   ]      114  r

 10   LF    31   US    52   4    73   I     94   ^     115  s 

 11   VT    32            53   5    74   J    95   _     116  t 

 12   FF    33   !        54   6    75   K   96   `      117  u

 13   CR   34   "        55   7    76   L    97   a    118  v 

 14   SO   35   #       56   8    77   M   98   b    119  w 

 15   SI     36   $       57   9    78   N    99   c    120  x 

 16   DLE 37   %     58   :      79   O  100  d    121  y 

 17   DC1 38   &     59   ;       80   P  101  e    122  z 

 18   DC2 39   '       60   <      81   Q  102  f     123  { 

 19   DC3 40   (       61   =      82   R  103  g    124  | 

 20   DC4 41   )       62   >      83   S  104  h    125  } 

                                                               126  ~ 127 DEL

 

        وأرقام ال ASCII ال 127 الأولى متعارف عليها ، أما الباقي من الأرقام فليس لها

تحديد معروف. وفي نظام  MS-DOS مثلا ، نجد أحرف اللغات المختلفة موجودة فيما فوق 127 ،

ومثال على ذلك الأحرف العربية.

 

        وهنا ترى أن الأرقام من 0 إلى 31 هي أحرف القيادة والتوجيه للطابعة ، أو المطراف ،

أو الراسم ، أو أجهزة أخرى، وعلى سبيل المثال :

 

         الحرف رقم 10  LineFeed= LF يعني أمراً للطابعة والشاشة بإنهاء السطر، ورقم 7

يعطي أمراً لسماعة الجهاز بإصدار صوت BEL ، ورقم 12  FormFeed=FF  يعطي إشارة آخر الصفحة ،

وهكذا...

 

        وإذا أردت أن تُظهر أحد الملفات التي تحتوي على أحرف غير الأحرف ما بين 0 إلى 127 ،

فيجب استعمال البرنامج  od  (octaldump) ¡ وليس البرامجِ التي عالجناها في السابق مثل  cat

¡ more ¡ ps ¡ tail ، .

 

        وبرنامج od يُظهر لك محتويات الملف المطلوب إظهاراً بينرياً ، أي بالأرقام والرموز

حسب تواجدها في الملف، ويظهر  كل Byte  على حدة بموجب ال ASCII-CODE . وباستعمال الإضافة 

-a يكون الإظهار كما هو في قائمة ASCII-CODE¡ وباستعمال الإضافة-b   تَظهر لك كل الأحرف

بينرياً ، وباستعمال الإضافة  -cيكون الإظهار كما هو متعارف عليه بلغة البرمجة  C، أي أنّ \n 

 تعني linefeed=LF  ، و \0  تعني    NUL ...إلخ  وباقي الأحرف تظهر بالعدّ الأوكتالي (octal)

 (8^2) ، وباستعمال الإضافة -h  تَظهر كل الأحرف بالعدّ (هكسا)  (hexadecimal) (16^2).

 

        وإليكَ بعض الأمثلة للتوضيح:

$ od -a filename

0000000    soh  etx  soh   bs  nul  nul  enq    8  nul  nul  etx    p  nul  nul  nul

 

$ od -b filename

0000000  201 003 001 010 000 000 005 270 000 000 003 120 000 000 000  000

 

$ od -c filename

0000000 201  003  001   \b   \0   \0  005  270   \0   \0  003    p   \0   \0   \0   \0

 

 

$ od -h filename

0000000 8103  0108  0000   05b8  0000   0350  0000  0000

 

        وإذا أردنا تخزين الأعداد أكثر من 255 ، فيجب تخزينها في عدة  Bytes  .

 

        على سبيل المثال : يمكن تخزين العدد من 0 إلى 65535  في Bytes 2 (1-16^2) ¡ وتكون

هذه مقسمة إلى Low-Byte وHigh-Byte  ¡ وتضرب High-Byte  في 256 (=8^2) بالإضافة إلى Low-

Byte لنحصل على النتيجة . وبهذا يمكن تخزين الأرقام التي تزيد عن ذلك وتُجمع فيByte 4  ...

إلخ

 

        وإليك بعضَ الشرح لإظهار هذه الأرقام:

 

        أرقام ذات اثنين  Byte دون علامة  أو مع -  :

 

$ od -d filename

0000000  33027  00264  00000  01464  00000  00848  00000 00000

 

        وفي الآتي يظهر أل Bit الأول من  High-Byte كرمز - أو + (ناقص أو زائد) :

$ od -i filename

0000000  -33027    264             0    1464            0        848           0       

   0

        وهنا أعداد في Byte مع علامة (-) :

$ od -l filename

0000000  -330278765     &nnbsp;        1464           8488             0

        وهنا أعداد مع فاصل:

 

$ od -f filename

0000000   -3.3027876e-45  4.0606406e-43  1.7684876e-52  0.0000000e+00

        وإذا استعملنا البرنامج od دون إضافة ، فتظهر الأرقام في  octal dump (Byte 2) :

$ od filename

0000000  033027  000264  000000  001464  000000  000848  000000 000000

        والإظهار للمعلومات والعمل بها في يومنا هذا يكون غالباً بتعداد الهكسا

hexadecimal.

 

5.7.2  إظهار نوعية الملف

 

        ويتم ذلك بواسطة البرنامج file لإظهار نوعية الملف :

 

$ file \bin\cat

\bin\cat:  sparc pure dinamicaly linked executable

$ file \etc\passwd

\etc\passwd: ascii text

 

        ومن المستحسن إظهار النوعية بواسطة file قبل إظهار محتويات الملفات  التي تتم

بواسطة البرنامجين cat أو od أو غيرهما للتأكد من النوعية.

8.2  إدارة وتنظيم الملفات

 

        سنعالج في هذا القسم حركة الملفات ¡ مثل تغيير الاسمِ ، ونقلِ وازدواج الملفات.

 

1.8.2  تغيير الاسم

 

        يُغير الاسم بواسطة البرنامج(move) mv  . مثال: هناك ثلاثة ملفات samir¡ kamal¡

mustafa  :

 

$ ls

kamal mustafa samir

$ mv samir muhdi

$ ls

muhdi mustafa kamal

 

        وهكذا تغيّر اسم samir إلىmuhdi  ¡ وبالمثال التالي نستطيع نقل الملف إلى دليلٍ آخرَ

، وباسمٍ آخرَ:

 

$ ls

muhdi museafa kamal

$ mkdir text                               نعمل دليلاً جديداً

$ ls -F

muhdi mustafa kamal text/

$ mv muhdi text

$ ls -F

mustafa kamal text/

$ ls text

muhdi

$_

 

        في هذا المثال عَمِلنا دليلاً جديداً باسم /text ¡ ونقلنا muhdi إليه ، واختفى muhdi

من الدليل الحالي ، لأنه أصبح في الدليل /text   ¡ ونستطيع نقل ملفات كثيرة باستعمال ( * و

? ) ، وقد ذكرنا سابقاً كيفية استعمال هذه الرموز.

 

2.8.2  طبع و نسخ الملفات

 

        بواسطة البرنامج (copy)  cp يمكن عمل نُسخة إضافية للملف باسم آخر:

 

$_

$ cp mustafa Ahmad

$ ls -F

ahmad mustafa kamal text/

$_

 

        كما يمكنك أن تنسخ الملف في دليل آخر  بالاسم ذاته:

 

$ cp ahmad text

$ ls -F text

ahmad muhdi

$_

 

3.8.2  الإشارة لارتباط الملفات

 

        لقد شرحنا عن البرنامج cp الذي ينسخ الملف ليصبح لدينا ملفان مستقلان يمكننا تغيير

محتوياتهما كُلاً على حدة. والبرنامج  ln  يربط الملفات، وذلك بعملِ ملف نظري كصورة عن ملف

معين، وليس ملفاً حقيقياً . وإذا تم تغيير محتوى أحد هذه الملفات فيتم تغيير محتوى الآخر

تلقائياً ، لأن المحتوى واحد، أي أن المحتوى والمعلومات موجودة مرة واحدة في وحدة التخزين،

بخلاف ما ذكرناه عن البرنامج cp ، الذي ينسخ الملف بكامل محتوياته فيصبح لدينا ملفان

مستقلان. وهنا مثال لارتباط ملفين:

 

$ ls -F

ahmad mustafa kamal text

$ ln kamal kamal2                  وهنا يحصل الارتباط

$ ls -F

ahmad mustafa kamal kamal2 text/

$_

 

$ ls -L

- rw-r--r--   1 ziad           staf            380   13     Feb    08.10 ahmad

- rw-r--r--   1 ziad           staf            420   15     Mar   10.03 mustafa

- rw-r--r--   2 ziad           staf            80     20     Sep    11.12 kamal

- rw-r--r--   2 ziad           staf            80     20     Sep    11.12 kamal2

drwxr-xr-x 2   ziad           staf            384   20     Sep    10.11 Text

        وهنا أظهرنا ارتباط kamal  و kamal2  ¡ وتراه بظهور عدد الارتباط 2 ، وحجمُ الملفين

هنا 80 حرفا.

 

        ويظهر الارتباط جلياً بواسطة ls -i  ، ويظهر لنا رقم الملف المعتمد لدى النظام

كالتالي:

 

$ ls -i k* ahmad

320 ahmad

402 kamal

402 kamal2

$

 

        وهنا أرقام الملفين kamal و kamal 2 ¡ 402 ¡ ومعنى ذلك أنه الملف ذاته ، والصلة

تكون الارتباط فقط.

 

4.8.2  إزالة وحذ ف الملفات

 

        يتم ذلك بواسطة الأمر  (remove) rm ¡ حيث نستطيع إزالة الملفات من الدليل الحالي

أو من أحد الأدلة الأخرى.

 

$ ls -F

ahmad kamal kamal2 mustafa text/

$ rm ahmad

$ ls -F

kamal kamal2 mustafa text/

 

        الملف ahmad لم يعد موجوداً في الدليل. ونستطيع حذفه من الدليل /text  أيضاً:

 

$ ls text

ahmad muhdi

$ rm  text/ahmad

$ ls text

muhdi

 

        ونستطيع أيضاً استعمال ( * و ? ) لحذف عدة ملفات، ولكن يجب الحذر من ذلك ، لأن هناك

احتمالاً لحذف كثيرٍ من الملفات باستعمال النجمة (*) .

 

        بعد حذف الملفات تضيع المعلومات الموجودة بها إلى غير رجعة. وننصح باستعمال

الإضافة   -i لمنع الحذف التلقائي ، وللإجبار على إعطاء الموافقة أثناء إزالة الملف المعني.

 

$ rm -i mustafa

mustafa ? n                   n  رفض الحذف

 

        وبهذا لم يُحذف الملف لأننا وضعنا n وليس y (yes  &  no)

 

5.8.2  إزالة وحذ ف الأدلة

 

        ذكرنا سابقاً أنّ الأدلة تحتوي ملفات مختلفة النوعية،  وإذا أردنا إزالة أحد هذه

الأدلة ، فيجب إفراغها من الملفات أولاً بحذف جميع الملفات والأدلة الفرعية الموجودة داخلها ،

ويتم ذلك بواسطة الأمر (remove directory)  rmdir  ¡ أو مع الإضافة  -r التي تزيل الدليل

ومحتوياته. وهذا خطر جداً ويجب الحذر قبل استعماله. ولا أنصح بذلك قبل التأكد من محتويات

الدليل.

 

$ ls -F

kamal kamal2 mustafa text/

$ rmdir text

rmdir: text not empty        لا يُحذف الدليل لاحتوائه ملفات

$ mv text/*

$ rmdir texte

$ ls -F

kamal kamal2 mustafa

$_

 

        لاحظنا في المثال الأعلى أنه لم يحذف rmdir الدليل لأنه يحتوي ملفات ، وبعد إفراغه

بواسطة rm  ¡ أعدنا الحذف بواسطة rmdir .

 

        لكن ماذا يحدث لو استعملناrm -r    ؟

 

$ ls -F

kamal kamal2 mustafa text/

$ rm -r text

$ ls -F

kamal kamal2 mustafa

 

        لقد حُذف الدليل ومحتوياته في آن معاً  !

 

        ولو كانت هناك أدلة منسوبة إلى الدليل  /text لحُذفت أيضاً ، دون معرفة ما بداخلها

من أدلة وملفات، ولذلك احذر استعمالrm -r  ¡ لأنه يُعتبر من أخطر الأوامر على الإطلاق.

 

على سبيل المثال : لو أن مدير النظام  root أدخل الأمر كالتالي   rm  -r /  ،  لحُذفت جميع

الأدلة عن بكرة أبيها من النظام ، وهذا يعني أن النظام قد دُمِّر نهائياً.

 

 

6.8.2  البحث عن الملفات

 

        هنا نشرح قدرات البرنامج find في البحث عن الملفات ومحتوياتها. حيث ذكرنا سابقاً

أنّ الملفات موجودة في أدلة مختلفة موزعة في النظام، ولدينا هناك 200 دليل تحتوي مئات

الملفات ، ولكن إذا وُجد ملفٌ في أحد الأدلة وكنا بحاجة إلى محتوياته ، فكيف يمكننا أن نجده

بسهولة..؟

 

        في البداية نشرح معايير وإضافات البرنامجfind :

 

-name                ????         اسم الملف

-perm        777           حقوق الملف

-type                 f               (d دليل) (f ملف)

-user                 ziad           مالك الملف

-group               staf            المجموعة

-newer               mustafa       mustafa الملف الأحدث من

-atime                +7            ملفات لم تستعمل منذ 7 أيام

-mtime               +7            ملفات لم تغير منذ 7 أيام

-ctime                +7            منذ7 أيام لم تغير inode لائحة

-links                2              عدد الارتباطات

 

        وهنا نشرح بعضها بالتفصيل:

-name

find -name   'a*'                      aالبحث عن الملفات التي تبدأ في

find -name   mustafa         mustafa البحث عن الملف

find / -name  mustafa                في جميع الأدلة mustafaالبحث عن

find /text -name mustafa     /textفي دليل   mustafaالبحث عن

 

-perm                        chmodلاستعمال هذا المعيار انظر الأمر 

perm 777                             rwx rwx rwxابحث عن ملف بهذه الحقوق 

perm 755                             rwx r-x r-x    ابحث عن ملف بهذه الحقوق 

perm 600                             rw- --- ---      ابحث عن ملف بهذه الحقوق 

 

-type   d                             ابحث عن أدلة

-type   f                              ابحث عن ملفات

 

        وهنا بعض الأمثلة لاستعمال برنامجfind :

 

$ find -name mustafa -exec file { }\;

 

        ابحث عن الملف mustafa ¡ واعمل بالأمر file (بواسطة -exec)¡الذي يُظهر لنا نوعية

الملف.

 

$ find -name mustafa -ok rm { };

 

        ابحث عن الملف mstafa  واحذفه بواسطة rm   بعد الموافقة (-ok).

 

$ find / -type f -user ziad -perm 777 -print

 

        ابحث عن جميع الملفات التي يملكهاziad  ¡ على أن يكون لباقي المستخدِمين الحقوق

الكاملة (777) ، وأرسل المحتوى إلى الشاشة -print .

 

$ find   / -name  'mu*'  -mtime +7-exec rm> { };

 

        ابحث عن الملفات التي تبدأ بالأحرف  mu  ¡ والتي لم تتغير منذ الأيام السبعةالأخيرة

، واحذفها من وحدة التخزين دون موافقة.

9.2  ملفات الأجهزة والوحدات

 

          ذكرنا سابقاً أنّ الأجهزة موجودة في النظام كملفات في الدليل /dev . وهذا بالطبع

يعد تفوقاً على الأنظمة الأخرى، لأن برامجَ النظام ، والبرامجَ الخاصةَ والأخرى لا تحتاج للإفصاح عن

كيفية إخراج المعلومات إلى الشاشة، أو إلى الطابعة ، أو إلى وحدة التخزين ، وتُوَجَّهُ

المعلوماتُ إلى ملف وحدة الإخراج ، أو إلى أي ملف آخر من ملفات الوحدات ، لإدخال أو إخراج 

هذه المعلومات.

 

        وتستطيع إظهار الملفات في الدليل /dev هكذا:

 

$ ls -l /dev

crw--w--w-    3      root   system        0.   1          11   Mar   10.12

console

brw-rw-rw-    2      bin     bin            2.135   22   Jul     13.10 fdo

brw-rw-rw-    2      bin     bin            2.143   24   Jul     1992         fd1

brw-------      1      sys    sys            3.    1         04   Nov   12.12 hd1

brw-------      2      sys    sys            3.    2         04   Nov   1992         hd2

brw-------      2      sys    sys            3.    3         04   Nov   1992         hd3

crw-------      1      sys    system        3.    1         04   Nov   1992         kmem

crw-rw-rw-    1      root   system        6.    0         22   Jul     13.10 lpo

crw-rw-rw-    1      root   system        6.129   22   Jul     13.03        lp1

crw-------      1      sys    system        8.    0         04   Apr    1992         mem

brw-rw-rw-    1      root   sys             4.    0         20   Jul     1992         mt0

brw-rw-rw-    1      root   sys             8.    2         12   Jul     14.13 null

crw-------      1      sys    sys            23.  1          01   Apr    1992         swap

crwx-w--w-    1      ziad    tty              15.  0          11   Mar   12.16 ttyp0

crwx-w--w-    1      root   system        15.  1          11   Mar   12.16 ttyp1

crwx-w--w-    1      root   system        15.  1          11   Mar   15.10 ttyp2

الشكل 13

 

        ومن الممكن أن يكون هناك ملفات أكثر من ذلك. وهذه الملفات  في الشكل الأعلى تبدأ

بحرف c أو b . وبدل سعة الملف في ال Bytes أي عدد الحروف تجد عدداً بفاصل (15.  1) ، أما

باقي المعلومات عن هذه الملفات فهي إلى حد بعيد تشبه معلومات باقي الملفات الموضحة سابقاً.

 

        حرف c يعني أن هذه الوحدة مخصصة لتوجيه الأحرف)  بان تُرسل المعلومات بالحرف

character  إلى الشاشة) ،  مثلا حرف b  يعني أن هذه الوحدة تُوجِّه المعلومات بالدفعة (

الرزمة) وليس بالحرف، وهذه الدفعة تقدر ما بين 512 - 1024  Bytes ، ويتم توجيهها إلى

أُسطوانة التخزين (وحدة التخزين) أو إلى شريط التخزين إلخ... والعدد الأول (بدل السعة) يعني

الرقم الرئيسي للوحدة ، والعدد الثاني الرقم التسلسلي من ذات الوحدات ، أو بمعنى آخر:

العدد الاول  major device number  ، والعدد الثاني  minor device number .

 

        ونجد في الأعلى أيضاً: وحدات التخزين الصغيرة  fd0 وfd1  ¡ ووحدات التخزين الكبيرة

hd0   hd1   hd2   ¡  والطابعات p0   اوp1  ¡ ووحدة الأشرطة ( mt0 ) ¡ والمطاريف ttyp0 

ttyp1 ttyp2  consle   ¡ ووحدة الذاكرة ( mem أو kmem ) ¡ ووحدة الذاكرة الإضافية  swap¡

وهي جزءٌ من وحدة التخزين الكبيرة ، ونجد أيضاً الوحدة الوهمية null  .

الفصل الثالث

 

المطاريف

 

        1.3    القياسات والمواصفات للمطاريف              

        2.3    إدخال المواصفات                                    

        3.3    قياسات التوصيل                                     

                1.3.3 تصفية الإدخال والانقطاع

                2.3.3 تصفية الإخراج       

                3.3.3 تفسير وتأويل أحرف القيادة

                4.3.3 احتمالات أخرى

                5.3.3 فهرس المواصفات

        4.3    ملفات القياسات والمواصفات

الفصل الثالث

المطاريف

 

        إن المطراف هو الصلة بين الإنسان والآلة (الحاسوب). ووصل المطراف بالحاسوب يكون في

العادة   seriall تسلسلياً، أي أن الإرسال والاستقبال يتم بالحرف ، ويستعمل seriall أيضاً

لنقل المعلومات عبر خط الهاتف بواسطة مترجم (محول) الذبذبة (Modem)  . أو إيصال المطراف

بواسطة شبكة الاتصال(Network)  التي تنقل المعلومات بالحزمة، وهذه الطريقة تعد أسرعَ الطرق

في نقل المعلومات مابين المطراف والحاسوب ، وهي الطريقة المتبعة حالياً، لأنّ مطاريف نظام

يونيكس تعمل في الوقت الحاضر من خلال النوافذ Windows التي تتكون من مجموعة كبيرة من

المعلومات ،التي تُنقل ما بين مطراف النوافذ والحاسوب. ونستطيع أيضاً استعمال الحاسوب

الشخصي  PC كمطراف بواسطة أحد برامج التكييف emulation للمطاريف . وأهم المطاريف لإدارة

النظام هو المطراف الرئيسي consle ¡ وهذا بدوره يكون موصولاً مباشرةً بالحاسوب ، وهو -غالباً-

من النوع الحديث تكنولوجياً ، والسريع الأداء ، والقابل لإعداد الرسوم والصور high graphics

resolution ، ويربط به ما يسمى (الفأر)  (mouse)   ، للاستعمال المريح والفعال للنوافذ.

 

        وكما ذكرنا سابقاً ،إنَّ لكل مطراف ملفاً خاصاً به في النظام يتواجد في الدليل/dev .

والمطاريف الموصولة مباشرة في الحاسوب تكون أسماء ملفاتها  tty01 أو ttyb ، أما بالنسبة

إلى المطاريف الموصولة بواسطة شبكة اتصال Network  فتكون أسماؤها ttyp01 أو ttyp02 ، وحرف

p يعني ( pseudo ) أيَّ اسم مستعار.

 

1.3  القياسات والمواصفات للمطاريف

 

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

بعين الاعتبار . إذ من المعروف أن نقل المعلومات من وإلى المطراف تُذكر في عدد ال Bits التي

تُنقل في الثانية الواحدة baud-rate  ¡ فلو افترضنا أن خط النقل التقليدي ينقل مثلا 9600 

Bit في الثانية ، كم حرفا تكون هذه..؟ إن ذلك يرتبط ببعض المواصفات الأخرى التي يجب

توضيحها:

 

        إنَّ حالات النقل 300  1200  2400  4800  9600  19200  و 38400  baud هي المتعارف

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

19200 boud ، واذااستعملنا مترجم الذبذبة ( modem )  لنقل المعلومات ، فإن الكميات تبلغ

1200 - 9600   baud .

 

        وإذا حددنا الكمية فيجب إيضاح نوعية المعلومات التي يجب نقلها. وهذه المعلومات

تتكون من Bytes ¡ وهذه بدورها تكون بحجم 6و7و8 Bit زائد  Bit  الفحص والاختبار parity-bit.

وإذا أردنا الفصل ما بين ال  Bytes فنحن نكون بحاجة إلى Bit التوقف ( stop-bit ) . وفي

أغلب الأحيان تكون المعلومات أو الأحرف مكونة من 8 Bits  زائد 2  stopp-bits  بالإضافة إلى

ذلك  Bit الاختبار (parity-bit) الذي يحتوي 0 أو 1 ، ومعنى ذلك أن عدد ال  Bitsفي ال Bytes

 الواحدة تكون زوجية أو فردية، أي even parity  أو odd parity ¡ وهذا يساعد إلى حد كبير

على حساب سرعة نقل المعلومات ، لأنَّ هذه ال Bits ستُنقل أيضاً بالمعية.

 

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

        إنَّ 9600  Baud ينقل 1070 حرفاً في الثانية لو كان كل حرف مكونا من Bits 9فقط

(8+1). وهذا يساعد المختصين على حساب مدة وكمية نقل المعلومات.

 

2.3  إدخال المواصفات

 

        ويتم ذلك بواسطة البرنامج stty الذي من خلاله نستطيع تغيير المواصفات للمطراف

ولوحات مفاتيح الأحرف.

 

ولإظهار المواصفات الحالية لمطرافنا نستعمل الأمر هكذا:

$ stty

speed  19200  baud; evenp

erase = ^H

-inpck  imaxbel  -taps

iexten  crt

        أو هكذا بالتفصيل:

$ stty -a

speed  19200  baud¡ 0 rows¡ 0 columns

parenb  -parodd  cs7  -cstopb  -hupc1  -cread  -cllocal  --crtscts

-ignbrk  brkint  ignpar  -parmrk  -inpck  -istrip  -inlcr  -iigncr  icrnl  -iuclc

ixon  -ixany  -ixoff  imaxbel

isig  iexten  icanon  -xcase  echo  echoe echok  -echonl  -nofilsh  -tostop

echoctl  -echoprt  echoke

opost  -olcuc  onlcr  -ocrnl  -onocr  -onlret  -oofill  --ofdel  -taps

erase  kill  werase  rprnt  flush  lnext  susp  intr  quit  stop  eof

^H    ^U    ^W    ^R    ^O    ^V    ^Z/^Y ^C    ^\     ^S     ^Q   

^D

الشكل 14

        شكل هذا الإظهار غيرُ مرتب لكنه سهل الفهم . وإليك استعمال الحالات في الأعلى موضحةً

بالتدريج:

 

        فتح وإغلاق هذه الحالات تُنجز بواسطة البرنامج stty  ¡ بالإضافة إلى إشارة الطرح (

إغلاق) ، أو دون إشارة الطرح (فتح):

 

$ stty ignbrk         ignor Break  (لا توقف عمل البرامج)

$ stty -ignbrk                إلغاء الحالة

 

3.3  قياسات التوصيل

 

        في حالة ربط المطاريف بالنظام تتركب المواصفات والمقاييس تلقائياً (أوتوماتيكياً)

بواسطة نظام التشغيل ، وفي بعض الأحيان يكون من الضروري تغيير هذه المقاييس . شرح:

 

 

cs5 cs6 cs7 cs8  النقلByte  في 5،6،7،8¡ Bit ال عدد

[-]parenb            parity Bit  فحص إشارة الاختبار

[-]parodd            يكون زوجياً أو فردياًparity Bit 

[-]cstopb             علامات الانفصال( -cstopb 1 Bit ¡  cstopb 2 Bit)

[-]hupcl              ) modem  فصل الخط بعد الخروج أو عدم الفصل(

 

 

        شرح تفصيلي للإيضاح:

 

  cs5¡ cs6¡ cs7¡  cs8 يعني أنَّ  Byte النقل حجمها 5 ،6 ،7 أو 8 Bit

  off/on parenb       يعني أنَّ هناك إشارةاختبار parity bit أو لا ¡

                        ويكون غير مفتوح هكذا  -parenb ومفتوحاًparenb

 parodd               Byteيكون زوجيا (parodd) أو فرديا -parodd

cstopb         علامات الانفصال مابين Byte النقل1-2 Bit

hupc/ hup             يعني فصل الخط (خط الهاتف مثلآ)ا -hup لا يفصل

                        بعد الخروج.

 

1.3.3  تصفية الإدخال والانقطاع

 

        وأهمها إشارة تجاهل وقف عمل البرامج بواسطة Ctrl -C  (ignbrk) ¡ وقد تم ذكرها

سابقاً. أما الاُخرى فنشرح مكوناتها كالتالي:

 

[-]igncr              Carriage Return مراعاة

[-]icrnl               Linefeed  إلى Carriage Return  تحويل

[-]ixon               السماح بإيقاف إخراج المعلومات

[-]ixany              متابعة إخراج المعلومات بضغط أحد المفاتيح

 

شرح تفصيلي:

   igncr       تحويل ضغط مفتاح Return إلى Linefeed

  icrnl         تحويل Linefeed إلى carriage return أي عكس igncr

 ixon          وقف الإرسال في الشاشة بواسطة -ixon  ¡ ctrl-s لا

  ixany        تواصل عمل الشاشة بعد الضغط على مفتاح الفراغ

2.3.3  تصفية الإخراج

 

        إضافات التصفية أثناء الإخراج:

 

[-]opost      السماح بالتصفية

[-]olcuc      تحويل الأحرف الصغيرة إلى كبيرة

[-]onlcr      Carriage Return+LF إلى Linefeed  تحويل

[-]ocrnl      Linefeed  إلى Carriage Return  تحويل

[-]inlcr       Carriage Return إلى Linefeed (LF)  تحويل

[-]icrnl       Linefeed  إلى Carriage Return تحويل

 

3.3.3  تفسير وتأويل أحرف القيادة

 

        هناك حالات عديدة تختص بتغيير رموز القيادة وهي:

 

 icanon (canonian modus) ¡ وهذه الحالة يجب أن تكون مفتوحة  icanon  ¡ وبإضافة علامة

الناقص [-] تكون مغلقة ، وهي تحول دون إيقاف البرامج بواسطة (Ctrl - C  ) ودون العمل

بمفتاح الحذف اليساري  BackSpace  .

 

        أما  echo off/on  فتكون مغلقة ، أي off ¡ وتحول دون إظهار الأحرف على الشاشة ،

مثل إدخال كلمة المرور لمنع إظهار حروف الإدخال على الشاشة

        وأحرف القيادة تتغير باستعمال stty أيضاً ، إضافةً إلى اسم حرف القيادة المراد

تغييره والحرف الجديد . وأحرف القيادة هي:

 

^H    ^U    ^W    ^R    ^O    ^V    ^Z/^Y ^C    ^\     ^S     ^Q   

^D

 

        وهذه الأحرف تتألف من مقطعين: الرمز   ^ ويعني Ctrl والحروف  A - Z  ¡ بالإضافة إلى

الرموز الأخرى #$%|/][.

 

أسماء الوظائف القابلة للتغيير

erase  c         رمز الحذف

kill            c       رمز الإيقاف

eof            c       رمز نهاية الملف

eol            c       رمز نهاية السطر

start   c       رمز متابعة إخراج معلومات المفاتيح

stop   c       رمز إيقاف إخراج المعلومات

susp   c       إيقاف البرنامج لمتابعته لاحقاً

rows   n       عدد السطور في الشاشة

cols           n       عدد الخانات في الشاشة

وc  يعني حرف القيادة character و n رقم.

 

        وهذه قائمة بأحرف القيادة المتبعة  standard

   ^H   erase         احذف الأحرف من اليسار

   ^C       intr         إيقاف عمل البرنامج أو إظهار الملف

 kill U      ^         إنهاء عمل البرنامج أو إظهار الملف

  ^\       quit        إنهاء عمل البرنامج أو إظهار الملف

      ^D      eof      إشارة نهاية الملف

  ^S/^Q    stop إيقاف العمل

 ^Z/^Y   susp         إنهاء العمل

4.3.3  احتمالات أخرى

 

        يمكننا عمل تغيير جماعي لعدة مواصفات بواسطة cooked  ¡ وبهذا نفتح icanon   و

opost  سوياً مع إضافاتهما، ونغلقهما بواسطة  raw. وهذه الأخيرة خطرة جداً ، لأنه بسبب

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

 

        وإذا حصلت عراقيل من قبل المطراف دون معرفة السبب ندخل المواصفة  stty sane التي

تعيد كل التغييرات إلى المستوى العادي standard.

 

cooked        مراعاة الرموز

raw            لا مراعاة ولا تغيير للإدخال

sane   وضع التغييرات العادية تلقائياً أو أوتوماتيكياً

 

5.3.3  فهرس المواصفات

 

        تعتبر الإشارة [-] حالة نفي للمقاييس ، كما هو مبين في الجدول التالي:

 

[-]parenb    parity Bit  فحص إشارة الاختبار

[-]parodd    يكون زوجياً أو فردياًparity Bit 

cs5 cs6

cs7 cs8        النقلByte  في 5،6،7،8¡ Bit ال عدد50 إلى

19200       النقل  في Bit`s ال عدد

[-]hupcl      فصل الخط بعد الخروج

[-]cstopb       علامات الانفصال( -cstopb واحد Bit¡   cstopb 2 Bit)

[-]ignbrk     Ctrl -C العمل ب

[-]istrip      الثامن أثناء الإدخال(مراعاة أم لا Bit ال

[-]inlcr       Carriage Return إلى Linefeed (LF)  تحويل

[-]igncr      Carriage Return مراعاة

[-]icrnl       Linefeed  إلى Carriage Return  تحويل

[-]iuclc       تحويل الأحرف الصغيرة إلى كبيرة أثناء الإدخال

[-]ixon       السماح بإيقاف إخراج المعلومات

[-]ixany      متابعة إخراج المعلومات بضغط أحد المفاتيح

[-]opost      السماح بالتصفية أثناء الإخراج

[-]olcuc      تحويل الأحرف الصغيرة إلى كبيرة أثناءالإخراج

[-]onlcr      أثناء الإخراج Carriage Return+LF إلى Linefeed  تحويل

[-]ocrnl      أثناء الإخراجLinefeed  إلى Carriage Return  تحويل

[-]icanon     مراعاة رموز القيادة بأحرف عادية

[-]cbreak    مراعاة رموز القيادة بأحرف

[-]echo       إظهار ضغط مفاتيح الإدخال على الشاشة

erase c          وضع رمز الحذف

kill    c       وضع رمز الإيقاف

eof    c       وضع رمز نهاية الملف

eol     c       وضع رمز نهاية السطر

start   c       وضع رمز متابعةإخراج المعلومات بضغط  المفتاح

stop   c       وضع رمز إيقاف إخراج المعلومات

susp   c       إيقاف البرنامج لمتابعته لاحقاً

rows   n       عدد السطور في الشاشة

cols    n       عدد الخانات في الشاشة

cooked        مراعاة الرموز

raw            لا مراعاة ولا تغيير للإدخال

sane           وضع التغييرات العادية تلقائياً أو أوتوماتيكياً

الشكل 15

 

4.3    ملفات القياسات والمواصفات

 

        في الملف /usr/lib/terminfo نجد المعلومات الخاصة بالمطاريف ، وفي  BSD-Uinx يكون

الاسم (/etc/termcap) . وملف  terminfoيكون مترجماً بلغة الآلة، أما ملف termcap فهو في حالة

أبجدية (text) ، أي بالأحرف فقط ، وبالإمكان تغيير محتواه دون مصاعب. ويتعين على المبرمجين

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

محتوى الملف termcap  كما يلي:

 

d0|vt100-am|vt100am|dec vt100:\

        :do=^J:co#80:li#24:cl=50\E[;H\E[2J:sf=5\ED:\

        :le=^H:bs:am:cm=E[%i%d;%dh:nd=2\E[C:up=2\E[A:\

        :ce=3\E[:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\

        :md=2E[1m:mr=2E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H:\

        :rf=\usr\share\lib\tabset\vt100:\

        :rs=\E>\E[?31\E[?41\E[?51?\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1lE>:\

        :ku=E0A:kd=\E0B:kr=\E0C:kl=\E0D:kb=^H\

        :ho=\E[H:k1=\E)P:k2=\E0Q:k3=\E0R:k4:\E0S:pt:sr=5\EM:vt#3:xn:\

        :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:

الشكل 16

 

        وهذا المحتوى تابع إلى المطراف من نوعية VT100 من شركة DEC ¡ وفي السطر الأول نجد

اسم نوعية المطراف، ويليه حجم الشاشة بالأحرف  :co#80:li#24  و  do=^J  ومعنى ذلك أن   

Ctrl -J يذهب بالمحث  (courser) إلى السطر الأسفل ، و up=2\E[A تعني أنَّ Ctrl -A يذهب

بالمحث سطراً إلى الأعلى ...إلخ.

الفصل الرابع

 

الأغلفة

 

1.4    الأغلفة التقليدية في يونيكس

2.4    العمل بالغلاف

3.4    تغيير غلاف الدخول

4.4    تحويلات ورموز الغلاف

                1.4.4 بدائل الأحرف

                2.4.4 توجيه خروج المعلومات

                3.4.4 توجيه إدخال المعلومات

                4.4.4 تعدد الأوامر في سطر واحد Pipe    

                5.4.4 رموز الإدراج

5.4    قدرات إضافية لغلاف سي

6.4  بدائل النظام والأغلفة   

                1.6.4 بدائل غلاف بورني    

                2.6.4 بدائل غلاف سي

7.4    برامج الأغلفة الخاصة shell-scripts  

الفصل الرابع

 

الأغلفة

 

 

        الأغلفة shells ¡ هي طليعة البرامج , ووظيفتها ترجمة الأوامر التي يفهمها ويدخلها

الإنسان إلى إيعازات آلية، ولتكون صلة بين الآلة والمستخدِم الذي يعمل بنظامها. وبرنامج

الغلاف يُدخل مباشرة إلى الذاكرة RAM بعد الدخول إلى النظام بواسطةlogin .

 

        والغلاف يُشغل البرامج المرغوبة بعد إدخالها بواسطة المطراف ، وتُرسل الإيعازات

مترجمة إلى النظام ليقوم بتنفيذها. والغلاف يشبه إلى حد كبيرالمترجمَ العاملَ في إحدى

الشركات والتي يعمل بها كثيرٌ من الموظفين مختلفي اللغات والقدرات ، ويكون قادراً على فهم

لغاتهم وأعمالهم ، ويقوم بترتيب وظائفهم حسب أصول النظام . وفي نظام MS-DOS يكون

COMMAND.COM  شبيهاً بذلك.

 

        ولكل غلاف لغة برمجة خاصة به ( ليس كلغة C أو Pascal )¡ وبواسطة أوامر هذه اللغة

نستطيع كتابة برامج بسيطة لتقوم بوظائفَ متعددة تكرارية ، لكي لانحتاج إلى إدخال هذه

الوظائف يومياً بعد تشغيل الجهاز. وهذه تعمل  كالبرامج التي تكتب في MS-DOS في ملفاتها ،

التي تنتهي بالأحرفBAT  ، وتسمى ملفات الأوامر المكدسة (batchfiles) ، وهي تسمى في يونيكس

مخطوطات الأغلفة (shell-scripts) .

 

1.4  الأغلفة التقليدية في يونيكس

 

        هناك كثير من الأغلفة ، ومن أوسعها انتشاراً غلاف بورني  (sh) Bourne-Shell  الذي

يحمل اسم مبرمجه  S.R. Bourne¡ وعلامة الدولار ($) هي المحث التقليدي لهذا الغلاف.  وهناك

أيضاً غلاف سي ( csh )   C-Shell الذي يحتوي على قدرات واحتمالات ووظائف أكثر تطوراً، وقد أُخذ

اسمه من لغة البرمجة C . ويحتوي هذا الغلاف على لغة النحو (instructions  syntax) من لغة

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

المُحثِّ في هذا الغلاف تكون عادة الرمز المئوي (%). وقد لاقى هذا الغلاف إقبالاً واسعاً في معظم

الأنظمة. كما توجد أيضاً أغلفة أخرى مثلtcsh¡ bash¡ ksh  . ولغلاف بورني sh نوع مصغر يسمى 

rsh ، ويخصصه مدراء الأنظمة للمستخدِمين الذين لايحق لهم العمل المطلق في النظام ، وبالمثال

فالغلاف (rsh)  لايسمح بتغيير الدليل بواسطة الأمر  cd .

 

2.4  العمل بالغلاف

 

        في حال تشغيل المطراف ، وبعد إدخال الاسم وكلمة المرور ، يعمل الغلاف المسجل في ملف

كلمة المرور (/etc/passwd) مباشرةً ، وتظهر علامة الغلاف $ أو % أو غيرها من علامات الأغلفة ،

أو أنها تكون قد غُيرت من قبل المسؤول عن ذلك. ومدير النظام هو الذي يسجل في الملف المذكور

نوع واسم الغلاف في حالة تسجيل أو إدخال مستخدِم جديد إلى النظام. ويستطيع المدير تغيير هذا

الغلاف في ذلك الملف في أي وقت . وبعد الدخول إلى النظام يستطيع المستخدِم user إدخال غلافٍ

آخرَ مثل csh أو غيره للعمل من خلاله ، والخروج منه يكون بواسطة exit على النحو التالي:

 

csh

% alias  1   ls  -aF

%  1

kamal kamal2 mustafa text/ .profile exefile*

exit

$ 1

1: not found

$ alias1 ls-aF

alias: not found

 

        في الأعلى ،كما  تلاحظ ، أدخلنا  csh(%) غلاف سي من خلال غلاف بورني   sh($) ،

وعملناalias  ، وهي أسماء مستعارة لاختصار الأوامر والإضافات في غلافC-shell    ، وأوعزنا إلى

  csh بأن تنتحلَ اسماً مستعاراً (1)  كبديل للأمر ls -aF  ، وأدخلنا (1) كأمر مباشر ليقوم

بدوره بالأمر ls -aF   دون إدخال الأمر والإضافات، وبعد ذلك خرجنا من csh  بواسطة  exit  ،

وعدنا إلى غلاف بورني  sh  الذي لايستعمل الأسماء المستعارة  alias ، وكانت المحاولة فاشلة

بالطبع لعمل alias من خلال غلاف بورني ($).

 

3.4  تغيير غلاف الدخول

 

        وتغيير غلاف الدخول يتم بواسطة الأمر(change shell) chsh   هكذا:

$ chsh

changeing login shell for ziad on jordsys.اسم النظام

Old shell: /bin/sh                                    اسم الغلاف الحالي بورني

New shell: /bin/csh                           الغلاف الجديد سي

 

        وهنا نرى أن الأغلفة موجودة في الدليل  /bin¡ أما الأغلفة الأخرى التي ذكرناها سابقاً

، فهي موجودة في الدليل  /usr/bin أو /usr/local/bin :

 

4.4  تحويلات ورموز الغلاف

 

        هناك رموز توجيه الإدخال و الإخراج (مثل < و >) للمعلومات من وإلى الشاشة ، أو

الطابعة ، أو إلى ملف معين ، وكذلك رموز البدائل ؟ و * التي تستخدم للبحث عن الملفات

وغيرها من الرموز المفيدة. وسنقدم للقراء في هذا الجزء تفسيراً لهذه الرموز والبدائل

المستخدِمة في الأغلفة sh و csh..

 

1.4.4  بدائل الأحرف

 

         أشرنا سابقاً إلى البدائل * و؟ وذكرنا أنَّ * هي بديلة لجميع الأحرف والرموز ، وأنَّ ؟

بديلة عن حرف واحد أو رمز، ويمكن استعمالها في عدة طرق على النحو التالي :

 

$ ls                   جميع الملفات

letter1 letter2 letter3 letter4letter2¡old text2¡old

 

$ echo letter*           letter جميع الملفات التي تبدأ ب

letter1 letter2 letter3 letter4 letter2¡old

 

$ echo letter?     وحرف ما واحد letter   جميع الملفات التي تبدأ ب

letter1 letter2 letter3 letter4

 

$ echo *2*    جميع الملفات التي تحتوي على 2 في داخلها

letter2 letter2¡old text2¡old

        وهنا استعملنا الإيعاز echo ¡ وهذا ليس برنامجاً مثل ls ¡ ولكنه أمر تابع للغلاف .

ومن الممكن استبدال  ؟  أو  *2*  باستعمال [ ] ما بين قوسين ، ووضعِ مانبحث عنه من أسماء

بداخلها كالتالي :

 

$ ls

letter1 letter2 letter3 letter4 letter2¡old text2¡old

$ echo letter[13]

letter1 letter3     والتي تنتهي ب 1 او3  letter  جميع الملفات

 

        ويمكن كتابة ذلك هكذا:  [a-z  A-Z]  ونعني الأحرف من  A إلى Z  ¡ ويمكن استعمال

[7-3!] ، وهذا لا يعني 3 أو 4 أو 5 أو 6 أو7 ، وعلامة التعجب ( ! ) تعني النفي  (negation):

 

$ echo letter[!3-7]

letter1 letter2

 

2.4.4  توجيه خروج المعلومات

 

        في هذا الشكل نوضح ما تحدثنا عنه سابقاً حول توجيه المعلومات إلى الملف أو إلى

الطابعة ، وليس إلى الشاشة:

 

$ date > tarich                tarich أرسل التاريخ إلى الملف

$ cat tarich                     tarich  أظهر محتوى الملف تاريخ

wed sep 20 12:32:15 1993

 

        وهنا لم يظهر التاريخ على الشاشة كما توقعنا، ولكنه سجل في الملف  tarich  ثم

أظهرناه بواسطة البرنامجcat  . وباستخدام علامة < يعمل ملفاً جديداً ، أو تحذف المعلومات

السابقة في الملف الموجود. أما علامة الإخراج المزدوجة <<  فتضيف المعلومات إلى نهاية ملف

موجود، وتحتفظ  بالمعلومات السابقة (انظر الشكل الأسفل):

 

$ date >>tarich

$ cat tarich

wed sep 20 12:32:15 1993

wed sep 20 13:10:10 1993

 

        أضيفت هنا المعلومات إلى الملف tarich  ¡ بينما بقيت المعلومات السابقة محفوظة.

 

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

معين للاحتفاظ بها.

 

$ alias1  ls  -aF  >achta

$ cat achta

alias:not found

 

لاحظ كيف وجهنا معلومات الأخطاء إلى ملف achta .

 

وهذه حالة أخرى لموضوع التوجيه:

 

$ find  /usr  -name  vi  -print  >natiga  27  /dev/null

 

        نلاحظ أن البرنامج  find  يبحث عن الملف  vi  في الدليل /usr ،ويرسل ما وجده إلى

الملف  natiga  ، وإذا حصل خطأ ما فإن النظام يرسل الخطأ إلى الملف /dev/null  ، وهذا

الملف هو سلة المهملات في النظام.

 

        وهنا تُرسل الأخطاء إلى ذات الملف الذي يحتفظ  بالمعلومات (natiga) .

 

$ find  /usr  -name   vi  -print  >natiga  27 & 1<

 

وبواسطة غلاف C-shell لانستطيع تحويل الأخطاء إلى ملف آخر، ولكن إلى ملف واحد للمعلومات

والأخطاء :

 

% find /usr -name vi -print >& natiga

 

        وهنا يجب استعمال & للإفصاح بأنَّ الأخطاء والمعلومات ترسل إلى هذا الملف. ونشير بأنَّ 

<< توضع في حالة إضافة المعلومات أو الاخطاء إلى الملف المعني بدل >.

 

3.4.4  توجيه إدخال المعلومات

 

        وكما نخرج المعلومات إلى الملف أو الطابعة بعلامة < ،فإننا نستطيع أيضاً إدخال

المعلومات مستخرجَةً من ملف ما بواسطة العلامة >. وفي العادة نُدخل المعلومات والأوامر إلى

النظام عن طريق لوحة المفاتيح، ولكنَّ هناك طريقةً  أُخرى لإدخال معلومات تكون موجودة في ملف

ما بواسطة إشارة التوجيه <. ونستطيع وضع هذه المعلومات على شكل أوامر وإضافات ، وإدخالَها

من ملف ما ليُعمل بها من خلال أحد البرامج مثل  findكالتالي:

 

 

$ cat >idafat                 idafat نعمل ملفاً جديداً باسم إضافات

/usr -name letter* -print -exet  ls<  { } \ ;  ونكتب الإضافات في الملف

Ctrl -D                               نخزن المعلومات وننهي العمل

$ find < idafat                         idafatهنا ندخل المعلومات من الملف

letter1 letter2 letter3 letter4 letter2.old text2.old النتيجة

 

        أمثلة أخرى:

 

        البرنامج wc يقرأُ ويعمل بتعداد الأسطر والكلمات والأحرف الموجودة في الملف letter1

الداخل إليه بواسطة  <:

 

$ wc < letter1

    17     460    2085  

(الأسطر 17 والكلمات 460 والأحرف 2085 )

 

        ويمكن عمل الإدخال والإخراج في آن واحد:

 

$ wc <letter1 >ichraj        ichraj  وأرسل إلى letter1 اقرأ من

$ cat  ichraj

     17    460    2085

 

4.4.4  تعدد الأوامر في سطر واحد Pipe 

 

        بواسطة علامة الأنبوب  " | "   (pipe) نفصل الأوامر المدخلة الموجودة في سطر إدخال

واحد ، لتنفيذها واحداً تلو آخرَ.

 

وهنا نلاحظ إظهار عدد الملفات في الدليل على الشاشة:

 

$ ls | wc

25     25      215          عدد الملفات 25 مثلا 

 

        وإذا أردنا إظهار ملفات متعددة الصفحات نستعمل :

 

$ cat  text2.old  |more

 

        وعلامة " | " تفرض على البرامج العمل المشترك لتكون النتيجة مشتركة أيضاً .

 

        وللحصول على العمل المنفصل للبرامج الموجودة في السطر الواحد، نضع الفواصل ( ; أو

& )  ،  وبذلك تعمل البرامج مستقلة:

 

$ pwd ; ls

/usr/ziad

letter1 letter2 letter3 letter4 letter2.old text2.old

أو هكذا:

$ pwd & ls

/usr/ziad                                                             الدليل

letter1 letter2 letter3 letter4 letter2.old text2.old الملفات

 

        ونستعمل الإشارة & في نهاية سطور الأوامر لكي تعمل البرامج خَفِيَّةً (باطنياً) ، وذلك

بأن تُرسَلَ البرامج إلى قسم المعالجة الخلفية للعمليات background  processing:

 

$ find / -name xyz.txt -print  >natija &

2375                         هذا رقم العملية

 

        في بعض الأحيان يحتاج البرنامج find   إلى وقت طويل للقيام بالبحث عن ملف ما في

جميع الأدلة الموجودة في النظام ، ولذلك أرسلنا سطر الأوامر إلى المعالجة الخلفية ،  للعمل

من وراء الستار ،  بأن نضيف العلامة & إلى آخر سطر الأوامر ، كما لاحظنا في الأعلى ، والرقم

2375 هو رقم العملية هناك . وسنجد مزيداً من الشرح عن ذلك في قسم المعالجة الخلفية

للعمليات!

 

5.4.4  رموز الإدراج

 

        تتكون رموز الإدراج ، من العلامة  \  والفواصل المرتفعة  ’ ’ و " " ، والبرامج

تحتاج هذه الرموز للإفصاح عمّا يليها (مثل \ ) ، أو ما بداخلها (مثل ’ ’ أو " ") من

المعلومات التي لا تُستعمل كأمر أو إضافة.

 

$ find / -name \*.c  -print

 

        أعلمْنا البرنامج  find ¡ أن النجمة البديلة * ما بعد \ تكون مغلقة أو محمية .

ويمكن بالطبع استعمال رموز الإدراج الأخرى (’ ’ و " ") كبديلة لرمز \ كالتالي:

 

$ find  /  -name  '*.c'  -print

$ find  /  -name "*.c"  -print<

        ورمز  \  يستعمل لحماية رمز واحد فقط  ( \*.c )¡ أما مايخص الحالات الأخرى

مثل"letter*.*") و ('letter*.*'فيجب استعمال " "و’ ’ )

 

$ echo  ' (2 * 6 ) + 2 = 14'    الإدخال       

(2 * 6) + 2 = 14          الإخراج

5.4 قدرات إضافية لغلاف سي

 

        إن غلاف سي (csh) C-Shell له قدرات تفوق أو تختلف عن قدرات (sh) Bourne-Shell¡ وفي

هذا القسم نوضح بعض هذه القدرات.

 

        في حالات الإدخال يستعمل الرمز ~  بديلاً عن  (Home-Directory)  الدليل الأم التابع

للمستخدِم (وفي Bourne-Shell  نستعمل $ بدل ~ ):

 

$ csh                         نُشغل الغلاف سي

%                                     نعمل الآن في غلاف سي

% pwd

/usr/ ahmad

% cp letter100.txt   ~/ letter100.new

% pwd

/usr/ziad

% cp letter1 ~ahmad        أو هكذا

% cd  ~ahmad

% ls

letter1  letter100.txt

% pwd

/usr/ahmad

% cd  ~ziad

/usr/ziad

 

        ونستعمل هاتين القوسين { } لوضع المختصرات المطلوب البحث عنها، وذلك عوضاً عن

الأسماء كاملةletter1 letter2 letter4 letter100.txt  ¡ وندخل المختصرات هكذا {1،2،4،100.}

 ، ونوضح ذلك بالشكل التالي:

 

% ls  letter{1¡2¡4¡100.txt}

 

letter1  letter2  letter4  letter100.txt

%_

 

        وأثناء العمل بواسطة الغلاف سي ، يمكن أيضاً تخزين الأوامر المرسَـلة إلى النظام في

History  وترقيمها، ويبدأ التعداد من 1 فما فوق¡  وإذا أردنا معرفة الأوامر التي أُدخلت من

البداية للعمل في الغلاف ، فإننا نطلبها كالتالي:

 

% history

 

ls

cp letter1   ~ahmad

cd   ~ahmad

ls

pwd

history

 

%_

 

        ويظهر لنا آخرُ 6 أوامرَ اُدخلت إلى النظام بواسطة الغلاف سي . ولإعادة استعمال أحد

هذه الأوامر نضع علامة التعجب (!) يليها الرقم التسلسلي للأمر أوْ أولُ حرف منه كالتالي:

 

% ! 6

ls

letter1 letter2 letter3 letter4 ...........

% !p                   

pwd

/usr/ziad

% !!                                          العمل بالأمر الأخير  

pwd

/usr/ziad

%_

 

 

        وإذا أخطأنا في إدخال أحد الأوامر الطويلة ، فنستعمل علامة    ^ لتصحيح الخطأ ، كي

لا نُدخل الأمر من جديد ، وذلك كالتالي:

 

% fidn -name lett* -print

fidn: not found

% ^fidn^find

find -name letter* -print

letter1 letter2 letter3 letter4  letter...إلخ

%_

 

 

        في الأعلى أدخلنا fidn بدل find وصححنا الخطأ باستعمال ^  .

 

        وباستعمال الأسماء المستعارة alias نستطيع تقصير الأوامر الطويلة.

 

% alias fl "find -name letter* -print"

% fl

letter1 letter2.............................

 

        وإذا أردنا معرفة الأسماء المستعارة المخزنة ، فإننا ندخل الأمر alias:

 

% alias

fl fidn -name  letter* -print

% _

 

وإذا أردنا حذف أحد الأسماء المستعارة فإننا نستعمل unalias هكذا:

 

% unalias lf

 

6.4  بدائل النظام والأغلفة

 

        توجد ملفات تحتوي معلومات عديدة يحتاجها النظام ويحتاجها الغلاف المعمول به ، مثل

معلومات البدائل التي تسمىvariable  . وهذه البدائل تُخزن في ملف خاص بالنظام.

 

        وبواسطة البرنامج env نستطيع إظهار محتويات هذه الـvariable   :

 

$ env

HOME=/home/ziad

SHELL=/bin/sh

TERM=vt100

USER=ziad

PATH=/bin:/usr/ucb:/usr/bin:/etc:/usr/etc:/usr/X11/bin:/usr/gnu/bin:.

LOGNAME=ziad

PWD=/home/ziad/text

HOST=jordsys

HOSTTYPE=sun4

EXINIT=set ai noto aw wa noslow opt

الشكل 17

 

        وبدائل النظام أو الغلاف  تتواجد هنا بالأحرف الكبيرة ، ويمكن إضافةُ بدائل أخرى

خاصةٍ إليها. ولكل مستخدِم تكون هناك معلومات خاصة بعمله ، ومن خلالها يعرف النظامُ التفاصيل

: ما هي أدلته ومطرافه ، واسم النظام الذي يعمل به ، ونوعيته ، والأدلة المفتوحة له،

والغلاف الذي يعمل به حالياً.

 

         وهذه الأسماءُ المكتوبةُ بالأحرف الكبيرة هي أسماءّ ثابتة ¡ وتتغير توابعها حسب حاجة

المستخدِم لهذه التوابع.

 

1.6.4  بدائل غلاف بورني

 

        كما ذُكر سابقاً ، هناك أسماء معينة للنظام تتغيير حسب المستخدِم وتسمى البدائل 

variable . وتوجد أيضاً بدائلُ أخرى بأسماء ثابتة لكل غلاف وللعامل به ، ونستطيع إظهار هذه

البدائل التي تخص غلاف بورني باستعمال الإيعاز set :

 

$ set

EXINIT=set ai noto aw wa noslow opt

HOME=¡/home/ziad

HOST=jordsys

HOSTTYPE=sun4

IFS=

LOGNAME=ziad

MAILCHECK=600

PATH=/bin:/usr/ucb:/usr/bin:/home/ziadscript:/etc:/usr/etc:/usr/X11/bin:

/usr/gnu/bin:.

PS1=$

PS2=>

PWD=/home/ziad/text

SHELL=/bin/sh

TERM=vt100

USER=ziad

الشكل 18

 

                بذلك ترى أن بعض ما أظهرناه بواسطة env من بدائل   variable  النظام

موجودة أيضاً هنا ، لأنها تضاف إلى set وهي البدائل (IFS¡ MAILCHECK¡  PS1¡  PS2  )

 

        البديلة PS1  تُظهر إشارة المحث ($) ، ونستطيع تغييرها بأن نُدخل عبارة بديلة

(Input command ->) كالتالي .

 

$ PS1=" Input command ->"

Input command ->

Input command -> PS1="$"

 

2.6.4   بدائل غلاف سي

 

        بدائل   C-Shell تكون مكتوبة بالأحرف الصغيرة، ونستطيع رؤيتها باستعمال الإيعاز set

أيضاً.

 

$ csh         ندخل أولاً أمر العمل بغلاف سي

% set

argv           ()

cwd            /home/ziad/text

filec

history        50

home          /home/ziad/

hostname     jordsys

path           (/bin /usr/ucb /usr/bin /etc /usr/etc /usr/X11/bin /usr/gnu/bin .)

prompt        %

shell           \bin\csh

status 0

term           vt100

user           ziad

الشكل 19

         يظهر هنا - مثلاً - أن  PS1 الموجودة في Bourne-Shell اسمها prompt  ¡ وهي لتغيير

علامة المحث % ،  و PWD اسمه  cwd ¡ ونجد بديلة جديدة history  تخبرنا  بعدد الأوامر

السابقة التي تخزن كما ذكرنا . والخروج من الغلاف يتم بواسطة Ctrl -D . ولكي نمنع الخروج

من الغلاف بواسطة  (Ctrl -D) يجب إعلام النظام بذلك باستعمال ignoreof  ¡ واستعمال exit  أو

  logout كبديل ل Ctrl -D  يستعمل للخروج من الغلاف. ونقوم بذلك كالتالي:

 

$ set ignoreof

 

وتوضع الأدلة التي يجب فتحها عن طريق  path  بين قوسين منفصلة بفراغ. ونستطيع إظهارها

بواسطة  $path  % echoعلى الشاشة. وإذا أردنا تغيير ذلك نستعملset  :

 

% set history =100

% echo history

100

%_

 

 

        وبهذا غيرنا history من 50 إلى 100 ، وإذا أردنا تغيير path فيجب وضع رقم ما نريد

تغييره من الموجود في path  بين زوايا [ ] :

 

% echo $path

/bin /usr/local/ucb /usr/bin /usr/etc /usr/x11.bin  /usr/gnu/bin

% set path [2]=/usr/local

% echo $path

/bin /usr/local  /usr/bin  /usr/etc  /usr/x11/bin  /usr/gnn/bin

% echo $path[2]

/usr/local

%_

        هنا غيرنا الدليل الثاني من السطر باستعمال بين قوسين زوايا [2] للإرشاد إلى ثاني

الموجودات داخل البديلة path .

 

        وتغيير نوعية المطراف Terminal يتم هكذا:

 

% set term=vt100

% echo $term

vt100

7.4  برامج الأغلفة الخاصة shell-scripts

 

        أثناء العمل بواسطة غلاف ما، نستطيع إدخال الأوامر والإيعازات أمراً أمرا ، ونستطيع

إعادة إدخالها بواسطة  history  كما ذكرنا . ولكن يمكن كتابة عدة أوامر وإيعازات وتخزينها

في ملف معين ، لكي يقوم الغلاف بتنفيذ هذه الأوامر واحداً تلو آخرِِ، بواسطة قراءة هذا الملف

وإنجاز محتوياته. وهذه البرامج تشبه ملفات BATCHFILES  في النظام MS-DOS. وهي لاتحتاج إلى

التجميع والترجمة (compile) مثل برامج Fortran   أو Pascal  أو C قبل تشغيلها.

 

        ونقوم بتشغيل برامج الأغلفة shell-scripts   بإدخال اسم الملف المحتوي على الأوامر

والإيعازات، شريطة أن يكون هذا الملف له الحقوق التالية ( rw--r--r-- ) ، أي دون حقوق

استعمال ، بعكس ملفات المعلومات العادية التي تحتوي على أحرف ،  وخلاف ذلك يُرسلُ النظام

ملحوظة خطأ  (premission denied) في حالة إدخال اسم ذلك الملف كأمر.

        ومن ميزات برامج الأغلفة (shell-scripts) هذه ، أنّ بإمكاننا كتابة برامجَ إداريةٍ

كاملةٍ لإدارة الملفات والأدلةِ ، وبرامجِ تخزينِ الملفات وحفظِها على الأشرطةِ والأسطواناتِ ، دون

اللجوء إلى اللغات الدارجة. وهذا يسهل عمل مدير النظام بعمل برامج تساعده ،  بدل استعمال

الأوامر كلاً على حدة، مما يهدر الوقت هباءً ، مثل تسجيل مستخدِم جديد ...إلخ. وهذه البرامج

لاتُغني بالطبع عن استعمال اللغات السائدة مثل C وغيرها من لغات البرمجة. ونحن لانريد أن

نشرح تعليم البرمجة بواسطة الغلاف ، فهناك كتب كثيرة في الأسواق تتناول ذلك ،  لأنه إذا

أردنا التعمق في شرحها، فإنَّ هذا يفوق حجم الكتاب ، ولكن نريد إعطاء لمحة عن البرمجة

بواسطة الأغلفة  (C-Shell  و Bourne-Shell ) فقط .

 

        سنقوم بعمل برنامج لحذف الملفات وللحصول على الفرصة لإعادة هذه الملفات إلى حالتها

الطبيعية ، بعد حذفها من وحدة التخزين.

 

        نحن نعلم بأنَّ الأمر rm يحذف الملفات إلى غير رجعة ، ونحن نريد الآن أن نبرمجَ أمراً

يحمي الملفات ، ويعيد وجودها كبديل للأمر rm . وسنسمي هذا الأمر (الملف)del  ¡ وسنكتب في

هذا الملف الأوامر اللازمة للاحتفاظ بالملفات المراد حذفها في دليل إضافي لحين حذفها نهائيآ.

وسنستعمل في هذا الملف الأمر mv لنقل الملفات إلى الدليل الإضافي ، وسنستعمل -u كإضافة

لإعادة هذه الملفات إلى حالتها الطبيعية ، وتوضع هذه الإشارة كإضافة بعد الأمر ، بالإضافة إلى

اسم الملف المعني .

 

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

 

        نُدخل الأمر del ¡ وبعده اسم الملف المراد إزالته (del file) . وإذا أردنا إعادة

الملف فيجب إدخال الإضافة -u واسم الملف file del -u . وفي الحالتين يظهر إعلام الخطأ في

حالة عدم إدخال اسم الملف. ويسألك البرنامج عن التأكيد بأن تدخل Y أو Yes للموافقة على ما

تريده ، وبعد ذلك يُنفَّذ الأمر. والملفات التي نريد إزالتها مؤقتا تُنسخ في الدليل  /puffer

وتبقى هناك . ويمكن إعادة نسخها في الدليل الحالي للمستخدِم إذا دعت الحاجه لذلك . واسم

الدليل (/puffer) يمكن أن يكون أيَّ اسم تختاره خصيصا لهذه الغاية .

 

        وهنا نقدم لك نسخة البرنامج الذي يعمل بالغلاف  Bourne-Shell:

 

 1     #!/ bin/sh

 2

 3     puffer=$HOME/puffer

 4

 5     if  [  $1  =  '-u'  ]

 6     then

 7             for def  in  $puffer/def.*

 8             do

 9                     .  $def

10                    echo  -n  "$file  ? "

11                    read  answer

12                    case  $answer  in

13                    y|yes

14                            cd $dir

15                            mv  $puffer/$copy  $file

16                            rm  $puffer/def.$copy

17                            echo File $file  recovered

18                            echo "  "

19                            ;;

20                    *)

21                            ;;

22                    esac

23            done

24     else

25            for  file in $*

26            do

27                    copy='basename $file'$$

28                    if [  -r  $file  ]

29                    then

30                             mv  $file  $puffer/$copy

31                            echo "File=$file; Copy=$copy;  dir='pwd' "

>$puffer/def.$copy

32                    else

33                            echo File  $file  not found  !

34                    fi

35            done

36     fi

 

الشكل 20

 

        وفي السطر رقم 1 تكون علامة # ، والتي يكون ما بعدها معلومات تخص المبرمج ، ولكن

إذا أضفنا إليها (!) تصبح معلوماتٍ يقرؤها النظام كإيضاح لنوعية الغلاف ، وبهذه الحالة

(#!/bin/sh) يكون هذا البرنامج مُحَرَراً ليعمل بغلاف  sh bourne-shell

 

        في السطر رقم 3 اسم الدليل الذي تتواجد به الملفات المقصودة ، وهذا الاسم يكون

اسماً بديلاً.

 

تُرَقَّمُ الإضافات من 1$ إلى 9$ ، أي أنه لدى إدخال الإضافات يعد النظام من 1$ إلى 9$ ، وذلك

حسب إدخالها في سطر الأوامر . وفي السطر رقم 5 نرى أن 1$ تحتوي الإضافة  -u ¡ وبهذه الحالة

يعمل البرنامج حتى السطر 23 ، ويعود بذلك الملف إلى حالته القديمة ، وخلاف ذلك ، أي دون

الإضافة -u  يعمل البرنامج من السطر 25 إلى 35 ، أي يُزيل الملف مؤقتاً.

 

        ويعمل البرنامج بدورات مشتَرَطةٍ  if  ¡ وتنتهي هذه الدورات ب fi ¡ وللبرنامج دورتا  

 if ¡ واحدة رئيسة وواحدة متفرعة ، ونستعمل else و then  سواء عُمِلَ بالشرط أم لا.

 

        في السطور 25 إلى 35 تتم إزالة الملف مؤقتاً (بوضعه في الدليل   puffer) ¡ وتبدأ

هذه العملية في دورة do....for وتنتهي ب done ¡ وموجود في هذه الدورة دورة  if  التي

تنتهي ب  fi   ¡ وتعمل دورة for   مادامت تتواجد معلومات بالإضافات المخزونة ، والمتعارف

عليها هنا ب ($*) ، بأن تُؤخذ واحدةً تلو أخرى ، لأنها تحتوي أسماء الملفات المراد إزالتُها .

مثال:   del file1 file2  ، وهذا معناه أن file1  يتواجد في 1$ ، وأنfile2  في 2$ ...إلخ

.

 

        وعندما ينتهي برنامج mv في السطر رقم 30 من العمل تعاد الدورة ، وتأتي البديلة

الثانية والثالثة إلخ.. وذلك في حالة تعدد الملفات المراد حذفها. وعلامة $$ في سطر 27 هي

بديلة ثابتة لرقم العملية هذه . ووظيفة الأمر basename  هي أن يقتطع اسم الملف دون الدليل.

وفي سطر 28 يتأكد البرنامج من أن الملف المراد إزالته قابل للإزالة (له حق القراءة) وأنه

موجود فعلا في الدليل . وفي هذه الحالة (then) (السطر29) يُعمل بالسطر 30 لحذف الملف . وفي

حالة عدم وجود الملف المعني يظهر File not exist  ، وفي السطر 31 ينسخ البرنامجُ اسمَ الملف

الأصلي ، ويعطيه اسم ملف بديل (def.$copy  ) .

 

        وفي السطور من 9 إلى 22 تكون عملية إعادة الملف إلى حالته الأصلية بواسطة الإضافة

(-u) . وبما أن معلومات الملف المحذوف موجودة في ملف آخر له الاسم الأصلي والمضاف له def

فليس صعباً إعادته إلى حالته الأصلية . وفي السطر 10 يسأل البرنامج عن الموافقة y أو yes 

وبعد ذلك ( الإضافة  -n تحول دون مواصلة العمل لحين إدخال ( yأو n ) ، وفي السطر 14 ننتقل

إلى الدليل الأصلي للملف ($dir) . وأمر mv في السطر 15 ينقل النسخة المسجلة باسم def.file 

إلى الدليل الأصلي المتواجد حالياً ، وبعد ذلك تُحذف النسخة من دليل /puffer . وفي السطر 20

يوجد (* التي تراقب حالة عدم إدخال  y أو yes  وينتهي البرنامج في هذه الحالة دون إنجاز

أي عمل ما.

 

وهنا نقدم لك نسخة البرنامج لغلاف C-Shell :

 1     #!/ bin/csh

 2

 3     set puffer=~/puffer

 4

 5     if  [  $1  ==  -u  ] then

 6             foreach def  (  $puffer/def.*  )

 7                     source  $def

 8                     echo  -n  "$file  ? "

 9                     set  answer=($<)

10                    switch  ( $answer )

11                    case y

12                    case yes

13                            cd $dir

14                            mv  $puffer/$copy  $file

15                            rm  $puffer/def.$copy

16                            echo File $file  recovered

17                            echo "  "

18                            breaksw

19                    default:

20                            breaksw

21                    endsw

22            end

23     else

24            foreach  file  ( $* )

25                    set  copy='basename $file'$$

26                    if (  -r  $file  )  then

27                    mv  $file  $puffer/$copy

28                    echo "set File=$file; Copy=$copy;  dir='pwd' "

 >$puffer/def.$copy

29                    else

30                            echo File  $file  not  found  !

31                    endif

32            end

33     endif

الشكل 21

 

        وهذا البرنامج يعمل تماماً مثل برنامج Bourne-Shell ¡ ولكنّ هناك بعضَ الاختلاف في

كتابة البرامج النحوية (syntax).

 

        هناك مثلا إضافات دورات   if تُكتب ما بين قوسين زوايا [] ، خلاف? البرنامج السابق ،

وبدل (يساوي) = واحدة نضع = = اثنتين ، وكلمة  then  تكتب في ذات السطر ، ونهاية  if 

نجدها هناendif  ¡ ودورات  for تكتب  foreach   بدون  in  ¡ وتوضع محتويات foreach  بين

قوسين ، وبدل   case   يوجد هنا   switch ¡ والإشارة إلى البدائل تبدأ بكلمة set  ، وبدل

النقطة نكتب  source ، للعمل بفقرات برنامجية خلال الدورات . ولا يوجد كلمة  read  في هذا

البرنامج.

        ونأخذ بعين الاعتبار أن مثل هذه البرامج التي تخزن الملفات في أدلة إضافية لاتحذفها

تلقائياً . ومن الممكن أن تمتلئ أسطوانة التخزين يوماً ما ، ويسبب ذلك الإطاحة بالنظام ،

وهذا شيء يسبب عملاً كثيراً لمدير النظام لإعادة كل شيء إلى طبيعته ،  وخسارةَ معلومات قيمة ،

لذلك يجب حذف الملفات غير المستخدَمة بين حينٍ وآخرَ ، لتفادي هذه المصاعب.

 

        وجدير بالذكر أنَّ لكل غلاف ملفَ أوامر تلقائياً يعتمد عليه في حالة إدخال غلاف معين

للعمل به ، وتجد في هذا الملف كثيراً من الأوامر التلقائية التي تحتاجها . ومن أهم هذه

البرامج التلقائية الملف (.profile) التابع لغلاف Bourne-Shell  ، وملف (.cshrc) التابع

لغلاف C-Shell ،  وأيضاً الملف (.login)  ، وجميع هذه الملفات يجب أن تتواجد في الدليل الأم

(homdirectory)  لكي تستخدمها الأغلفة تلقائياً. وملف (.login) يُعمل به تلقائياً لدى الدخول

إلى النظام ، وملف (.logout) لدى الخروج منه ، وملف (.cshrc) يُعمل به لدى إدخال غلاف  C-

Shell . وفي هذه الملفات تجد معلومات عن المستخدِم ومواصفات النظام مثل : البدائل ، ونوعية

المطراف ، والأدلة التي يجب العمل بها ، والطريق إليها (path) إلخ....

 

        وهنا نقدم نسخة عن ملف (.cshrc) الخاص بغلافC-Shell 

set  history=50

set  ignoreeof

set  hostname="'hostname'"

set  term=vt100

set  prompt="$hostename $user  (\!): "

set  path = (/bin /usr/ucb /usr/bin /etc /usr/etc /usr/X11/bin /usr/gnu/bin .)

setenv  HOST "'hostname'" 

setenv  EXINIT  'set  ai  noto  aw  wa  noslow  opt'

stty  erase  '^H'

alias   h       'history  |  tail  -32'

alias   l       "ls  -lag \!*  |  more"

الشكل 22

        في بداية هذا الملف يتغير عدد الأوامر التي يجب تخزينها بواسطة  history ¡ ونغير

بواسطة set أي بديلة بالشكل الذي نريده ، مثل (ignoreeof  و hostname  و term  و prompt و

path ) .

الفصل الخامس

 

عمليات نظام التشغيل

 

1.5    النواة                         

2.5    العمليات

3.5    العمليات المساعدة    

4.5    حقوق العمليات

5.5    مراقبة العمليات

6.5    حذف وإيقاف العمليات

7.5    المعالجة الخلفية للعمليات     

8.5    صلاحيات ومرتبات العمليات

9.5    تحديد أوقات عمل العمليات الزمنية

الفصل الخامس

عمليات نظام التشغيل

 

1.5 . النواة

 

        إن علاقة أي مستخدِم لنظام بونكس تكون  مع الغلاف المعمول به فقط، ومستخدِم النظام

لايرى ولا يشعر بعمل نواة النظام إلا من خلال الغلاف المعمول به، لأن الغلاف  يقوم بالاتصال

بالنواة ، ويجعلها تقوم بالوظائف المرغوب إنجازُها. والنواة بحد ذاتها تكون ركيزة  نظام

التشغيل ، الذي يقوم بدوره  بمراقبة الأجهزة ، وإنجاز البرامج العامة، والعمليات الخفية ،

والاتصالات إلخ...

 

        والنواة هي برنامج أو بالأحرى ملف موجود في الدليل الرئيسي للنظام، واسمه  unix 

أو  vmunix ¡ وله من السعة ما بين 500 KB إلى 2 MB  في أسطوانة التخزين (Harddisk)  .

ولدى تشغيل الجهاز يقوم برنامج إدخال النظام الموجود في وحدة ذاكرة خاصة  (ROM) بقراءة

برامج النواة من أسطوانة التخزين وإدخالها إلى وحدة الذاكرة  (RAM)  ، لتبقى هناك طوال

وقت العمل لحين إطفاء الجهاز ، أي عزلِ الكهرباء عنه. وتقوم النواة بتفحص الأجهزة المرتبطة

، مثل : ارتباطِ الطابعةِ ، و مطراف الإدخال  (console)  ، ومترجم الذبذبة (modem) ،

والمطاريف الأخرى ، ولوحات المفاتيح للأحرف ، و الفأر (mouse) ، وشبكاتِ الاتصالِ (Network

بواسطة شريحة الارتباط (Adapter) ، ووحداتِ الذاكرة RAM الإضافية ، ووحداتِ التخزين النموذجية

floppydrives  و diskdrives و tapedrives 

 

        والنواة هي التي تقوم بأعمال النظام : مثل وظائف التفتيش . وتحرص على عدم القيام

بأعمال غير مسموح بها ، مثل أن يحاول أحد قراءة ملف معين ليس له صلاحية قراءتِه ، أو

استعمالِه ...إلخ.

 

2.5  العمليات

 

        إنَّ إدارة وحدة الذاكرة (RAM) ¡ وإدارة العمليات ، هي من أهم أعمال النواة . وهذه

العمليات تظهر إلى حيز الوجود لدى القيام بتشغيل أحد الأوامر أو البرامج . وفي هذه الحالة

تعطي النواة كل برنامج يكون في حيز التشغيل رقمَ عملية . وتقوم وحدة العمليات والمعالجة 

(processor)  بإنجاز هذه العمليات واحدة تلوَ أخرى ، بتقسيم الوقت ما بين هذه العمليات

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

وتقسيم وقت عمل وحدة العمليات والمعالجة، بأن يراقب العمليات التي تكون بحالة انتظار ،

ويدخلها إلى وحدة المعالجة ، وتُرتب هذه العملياتُ حسب أهميتها ، ودورِها ، والمرتبةِ التي

تكون مسجلة لها ، وتقوم بالطبع أولاً بإنجاز العمليات ذات أعلى المرتبات. ومن المستطاع تغير

مرتبات الإنجاز للعمليات أثناء العمل بها ، أو إيقافُها عن العمل ، أو حذفُها ، قبل الانتهاء

من الإنجاز. وبواسطة البرنامج nice الذي يغير المرتبة،  وبرنامج  kill  الذي يزيل العملية

، نستطيع التحكم في تلك العمليات.

 

        يعطي النظام لكل عملية رقم تعريف  PID (process identification)¡ وعمليات النواة

(وتسمى العمليات الأمُ) رقمها التعريفي يسمى PPID  (parent process identification)  ،

والعملية الأولى للنظام تسمى عمليةَ الإدراج أو التصفيف swapper-process ، ويعطى لها رقم PID

0 ، وهذه العملية تقوم بتشغيل العملية القيادية INIT-process  التي تحمل الرقم PID1 ،

وتقوم بتشغيل عمليات أخرى ضرورية .

 

        وتقوم عملية PID 0 بإدارة وحدة الذاكرة (RAM) المخصصة للعمليات. ولكل عملية بجانب

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

البرنامج ، وما سيتوصل إليه من عمليات حسابية أو كتابية ...إلخ ، لذلك يجب أن يكون هناك

سعة كافية من وحدة الذاكرة لتلك المعلومات، وإذا لم يكن هناك سعة كافية ، يقوم النظام

بتخصيص قليل من مساحة أُسطوانة التخزين ويستعملها وحدةً إضافية للذاكرة، ويضع فيها بعض

العمليات التي تكون في حالة انتظار لحين الحاجة إليها ، أو إلى أن يأتيها الدور الترتيبي

في الإنجاز ، وهذه هي وظيفة عملية الإدراج   swapper-process .

 

3.5  العمليات المساعدة

 

        وإكمالاً لما ذكرنا سابقا ، فإن عملية (PID 0)  تشغّلُ عملية (PID1 INIT-process) ¡

والتي بدورها تقوم بتشغيل عدة برامج أسماؤها تبدأ ب (/ete/rc.*  ) ¡ وهذه البرامج تكون

بطبيعتها برامجَ مساعِدة وتسمى  demon-process  ¡ وهي تقوم بوظائفَ خاصة بالنظام ، وتعمل

بمرتبة إنجاز عادية ، والمقصود من ذلك أنَّ من المستطاع وقفَها عن العمل وإعادةَ  تشغيلها ،

بعكس العمليات   INIT و  swapper  التي تعمل بمرتبة عالية ، وليس مستحسناً إيقافُها عن

العمل، لأنّ النظام ينهار حين ذلك.

 

        ومن وظائف هذه العمليات (demon-process) إدارةُ وتنظيمُ عمل الإخراج إلى الطابعة

(spool)  ¡ واستقبالُ البريد الإلكتروني عن طريق شبكة الاتصالات ، وإدارةُ الاتصال بحواسبَ بعيدةٍ

مرتبطةٍ بواسطة الشبكة.

        وعملية   INIT-process تشرف على دخول المستخدِمين إلى النظام بواسطة login ¡ بأن

تشغل في البداية برنامج getty ¡ الذي يرسل بدوره محث التسجيل والكلمة (login:) إلى الشاشة

، لكي يستطيع المستخدِم أن يدخل اسمه، وبعد إدخال هذا الاسم يشغل  getty برنامجَ  login¡

الذي يرسل محث إدخال كلمة المرور (password:) الى الشاشة، وبعد ذلك يشغل برنامجlogin 

الغلاف(Shell)  المسجل في ملفه ، لكي يستطيع المستخدِم التعامل مع النظام ، وتصبح هذه

الخطوة عملية متكاملة (porocess) .

 

        إن ما تقدم كان لمحةً تخطيطيةً لعملية INIT-process  (PID1)  في الدخول إلى النظام.

_

الشكل 23

 

        INIT-process هي العمليةُ الأمُ لجميع العمليات التي لم يعد لها مصدر أصلي . ونقصد

بذلك أنه لكل عملية مصدر أم ، وبفقدانه تصبحINIT  هي المصدر الأم لهذه العمليات. ومثال ذلك

: إدخال إحدى العمليات وإخراجها من النظام قبل إنجاز هذه العملية.

 

4.5  حقوق العمليات

 

        إن لكل عملية معلقة أوعاملة مالكَها وحقوقَها. ونقصد بذلك أنَّ عملية معينة لايُستطاع

إيقافُها أو حذفُها دون حيازة الحقوق كاملة لذلك . ومالك الملف يُسجَّـلُ رقمُه  UID (User

Identification)  ¡ ورقمُ مجموعته  GID  (Group Identification)   في العملية تلقائياً حين

تشغيلها . وحقوق العمليات تكون مرتبطة بواسطة الأرقام الفعالة EUID    (effective user

indentification)   التابعة للمستخدِم ، و  EGID التابعة للمجموعة (effetive group

identification)  . ولدى تشغيل أحد البرامج العادية تكون الأرقام UID  و  EUID وأيضاً GID و

EGID مطابقة لبعضها ، أي أن العملية تعمل بحقوق المستخدِم مُشَغِّلِها . وهناك العمليات ذات

الرقم (صفر) التي تكون مُلك المستخدِم root   مدير النظام . وهناك حالات أخرى تكون  EUID  و 

EGID  مختلفة ، وهنا نشير إلى ماذكرناه في جزء حقوق المستخدِمين بالنسبة ال s-Bit  ، أي أن

البرنامج يعمل بحقوق مالكه ، وليس بحقوق المستخدِم (أنظر جزء الحقوق) . ولذلك تعمل أي

عملية (process)  بحقوق المستخدِم ، أما البرنامج الذي تنجز أوامره فيعمل بحقوق مالكه.

والمعلومات عن المالك تكون مسجلة في  EUID وEGID  في هذه العملية... ومثال  ذلك  البرنامج

المعروف cat:

 

$ ls  -al  /bin/cat

-rwxr-xr-x  1   root   bin   29124    06  Feb  10.12  cat

 

        وهنا نرى أن البرنامج cat له مالكه root التابع للمجموعة bin . وكل مستخدِم يستطيع

استعمال هذا البرنامج (أنظر حرف x ) ويقرأه (أنظر حرف  r) ، أمّا مالكه فيستطيع أكثر من

ذلك (أنظر البداية r w x  ).

 

5.5  مراقبة العمليات

 

        بواسطة البرنامج ps   نستطيع إظهار العمليات القائمة على العمل في النظام ،

والعملياتِ الخاصة بالمستخدِم. ونحن لانستطيع ذكر جميع الإمكانات المتعلقة باستعمال البرنامج 

ps (اقرأ ال manual)، ولكن سنذكر أهم هذه الإمكانات. وهناك أيضاً اختلاف بين نظام  system V

ونظام BSD ، أما بالنسبة إلى نظام AIX فتجد الاحتمالين. وهاكَ شرحاً عن البرنامج ps في نظام 

BSD-UNIX.

 

        لدى إدخال الأمر ps دون إضافات ، تظهر العمليات الخاصة بالمستخدِم فقط ، وهي تحمل

رقم المستخدِم في UID :

 

 

$ ps

  PID TT     STAT TIME COMMAND

9375 p7     S              0:05  -csh

9416 p7     S              0:00  sleep 100

9417 p7     S              0:03  sh

9418 p7     R              0:00  ps

الشكل 24

 

        نرى - هنا - عملية استعمال الغلاف csh ¡ ثم عملية انتظار 100  sleep، وبعد ذلك

تشغيلَ غلاف   sh  Bourne ، ونرى أيضاً أرقام العمليات PID ، والمطرافَ التابع لهذه العملية

TT (p7) ، والحالةَ  STAT (status) ، والمدةَ الزمنية (TIME) .

 

        والمطراف المذكور في الأعلى p7  يكون في الواقع ttyp7 . والمطراف الرئيسي إذا ذُكر

يكون مختصراً بحروف (console) co ، وعمليات  demon-process  تُختصر برمز علامة الاستفهام ?

بدل المطراف .  وتعني R أن هذه العملية تُنجَزُ الآن بوحدة العمليات والمعالجة (processor)  ،

أو أنها في حالة انتظار . وهناك حروف  I¡D¡S  بدل R .

 

 

D =   انتظار من أجل معلومات تُقرأ من وحدة التخزين

S =  انتظار 20 ثانية أثناء العمل في البرامج

I  =   ولكن مدة الانتظار أكثر من 20 ثانية  s مثل

 

 

        وبحرف T تكون العملية موقفة مؤقتاً مثل حالة  Ctrl-Z (^Z). وهناك حالات لها حرفان ،

يكون الحرف الثاني منها فراغاً ، أو حرف W . وحرفW  يعني أن هذه العملية مرفوعة من وحدة

الذاكرة ، ومخزنة في swapped وحدة التخزين  لحين العمل بها. وفي أغلب الأحيان يكون الحرف

الأول لهذه الحالة (I) . وتُخزن هذه العمليات في وحدة التخزين لتوسيع المجال في وحدة

الذاكرة (RAM)  للعمليات المستعجلة.

 

        بواسطة الإضافة -a نستطيع رؤية جميع العمليات التي لها صلة بالمطراف:

 

$ ps  -a

  PID TT     STAT TIME COMMAND

7189 co     IW            0:00  -csh

7215 co     R              0:23  irc

8889 p0     IW            0:03  -sch

9401 p0     S              0:20  kermit

9375 p7     S              0:04  -sch

9416 p7     S              0:00  sleep 100

9417 p7     S              0:02  sh

9419 p7     S              0:05  ps  -a

الشكل 25

 

        ونرى - هنا - عملية تابعة إلى (console) المطراف الرئيسي المتوقف عن العمل ، وهو

في حالة انتظار لأنه لا أحد يعمل على هذا المطراف  co . وانتبه أيضاً إلى المطراف ttyp0  (

العملية الثالثة من الأعلى) وحالتِها IW  ¡ أي أن هذه العملية منزوعة من وحدة الذاكرة (RAM)

¡ ومدرجة في وحدة التخزين.

 

        بواسطة الإضافات -ax  نستطيع رؤية جميع العمليات القائمة:

 

$ ps  -ax

PID           TT     STAT TIME COMMAND

      0        ?      D              0:35  swapper

      1        ?      IW            0:07  \bin\init

      2        ?      D              0:16  pagedaemon

    53 ?      IW            0:05  portmap

    93 ?      IW            0:04  syslogd

  286 ?      IW            0:00  cron

  291         ?      IW            0:53  inetd

  294         ?      IW            0:01  \usr\lib\lpd

8888 ?      IW            0:28  in.rlogind

9326 ?      S               0:02  telnetd

7189 co      IW            0:00  -csh

7215 co     R              0:23  irc

8889 p0     IW            0:03  -csh

9401 p0     S               0:20  kermit

9375 p7     S               0:04  -csh

9416 p7     S               0:00  sleep 100

9417 p7     S               0:02  sh

9419 p7     R              0:00  ps  -a

$

الشكل 26

 

        وفي الشكل 26 نرى جميع العمليات في النظام ، بالإضافة إلى عمليات النواة مثل PID1 

¡ واسمها /sbin/init (العملية الثانية من الأعلى) ، وعملية swapper  العملية الأولى للنظام

(PID 0) .

 

        ولكي نحصِّل معلومات أكثر عن العمليات الخاصة بالمستخدِمين نضع الإضافة -u:

 

$ ps  -u

USER PID  %CPU %MEM SZ  RSS   TT   STAT   START   TIME   COMMAND

ziad   9375   0.0   0.0  204    0               p7   IW        22:01    0:04    -csh

ziad   9417   0.0   0.4  024 108               p7    S         22:05    0:02    sh

ziad   9423   0.0   0.4  184 424               p7    R 22:06    0:00    ps  -u

ziad   9416   0.0   0.0    16    0                p7   IW        22:05    0:05    sleep 100

$

الشكل 27

        وهنا نرى المستخدِم USER  ¡ ووقت بداية العمل للعملية START ¡ والنسبة المئوية من

وقت الوحدة المركزية %CPU ووقت وحدة الذاكرة %MEM.  وهذا يساعدنا على معرفة العمليات التي

تأخذ أوقاتاً???? طويلةً من وقت الحاسوب الثمين . وهناك SZ وRSS  التي تُظهر لنا كمية وحدة

الذاكرة (RAM) الضرورية للعمل . وإذا أردنا معلوماتٍ مفسرة أكثر نضع الإضافة  -l:

 

$ ps -l

        F   UID PID     PPID CP PRI NI SZ RSS WCHAN STAT TT TIME  COMMAND

20488200  207 9375  9374  0   15    0 204   0  kernelma  IW   p7  0:04   -csh

20008200  207  9416  9375  5  15   0 204    0  kernelma  IW    p7  0:04   sleep 100

20008001  207  9417  9375  0    5   0 204 108  child          IW    p7  0:04   sh 

20000001  207  9422  9417 17 29  0 204 436                     IW    p7  0:04   ps  -l

الشكل 28

 

         نرى - هنا - بجانب PID الرقمPPID  وهو رقمُ الوحدة الأم ،  والعددَ الذي يُفصح عن

مرتبة كل عملية ، أي أنَّ صُغر العدد يعني أولوية أقوى ، والمالكُ يظهر هنا كرقم (UID) .

 

         نشرح - فيما يلي - برنامج ps من خلال النظام System V ¡ والبرنامجُ ps يشبه ما

اطلعنا عليه في الصفحات السابقة، من حيث المبدأ، ولكن هناك بعض التغييرات البسيطة:

 

$ ps

   PID TTY           TIME COMMAND

1479 ttyp4          0:00  sleep

1470 ttyp4          0:01  csh

1483 ttyp4          0:00  ps

1480 ttyp4          0:00  sh

$

الشكل 29

        في الشكل 29 يظهر المطراف باسمه الكامل ، ولا تظهر الحالة (status).

 

        وإذا أردنا أن نرى جميع العمليات نستعمل الإضافة-e  ¡ والنتيجة تشبه إلى حد بعيد

ماذكرناه عن نظام BSD بإضافة  -axلبرنامج ps:

 

$ ps  -e

   PID TTY           TIME COMMAND

      0        ?              0:02  sched 

      1        ?              2:07  init

      2        ?              3:12  vhand

      3        ?              0:39  bdflush

    84 ?              0:04  portmap

    39 ?              0:15  syslogd

  185 ?              1:45  cron

  117         ?              0:06  inetd

  175         ?              0:00  lpd

  166 ?              0:05  sendmail

1469 ttyq4          0:01  telnetd

1420 console       0:03  csh

1421 console       0:10  vi

1470 ttyq4           0:04  csh

1479 ttyq4           0:00  sleep

1480 ttyq4           0:02  sh

1484 ttyq4           0:00  ps

$_

 

الشكل 30

 

        في الشكل 30 نرى جميع العمليات العاملة حالياً ، بالإضافة إلى عملية  sched ¡ التي

تمثل نواة النظام ، والتي تدير العمليات . وهناك الإضافة -f  لرؤية مزيد من المعلومات :

 

$ ps  -f

UID   PID   PPID C  STIME       TTY     TIME   COMMAND

ziad 1479  1470  0   09:50:41    ttyq4    0:00   sleep 100

ziad 1470  1469  0   09:15:09    ttyq4    0:04   -csh

ziad 1485  1480 13  09:05:12    ttyq4    0:00   ps  -f

ziad 1480  1470  0   09:12:20    ttyq4    0:02   sh

$

الشكل 31

        وفي الشكل 31 تظهر معلومات مالك العملية  UID  ¡ ورقم العملية PID ¡ والعملية الأم

PPID  ¡ ووقت بدء العمل STIME ¡ واسم العملية مع الإضافات COMMAND ¡ والمطاريف TTY .

وبالإضافة -l:

 

$ ps -l

 F   S UID   PID  PPID  C   PRI NI  P SZ:RSS WCHAN    TTY  TIME COMD

30  S  207  1479 1470  0    39  20  *  10:03                     ttyq4 0:00 sleep

30  S  207  1470 1469  0    39  20  *  52:27     801099d8  ttyq4 0:00 csh

30  R  207  1486 1480  0    66  20  0  36:35                    ttyq4 0:00 ps

30  S  207  1480 1470  0    30  20  *  23:24     80101428 ttyq4  0:00 sh

الشكل 32

        في الشكل 32 نرى حالة العملية S ¡ وهذه حالةُ انتظار ، وO  العملية في حالة عمل ،

وR  انتظار مؤقت ، و T العملية موقفة. وبدل اسم المستخدِم UID  تجد الرقم والمرتبة أسفلPRI

 ، والرقمُ الأصغرُ يكون هنا أيضاً ذا مرتبة أعلى.

6.5 حذف وإيقاف العمليات

 

        هناك آلية خاصة mechanism تعمل بها العمليات مع بعضها بعضا . وإحدى هذه الآليات

تكونُ إشارةً   signal ¡ تُرسَـل إلى العمليات من النواة ، أو من إحدى العمليات الأخرى. وهذه

الإشارة هي أمر إلى العملية المعنية بالتوقف عن العمل الحالي والقيام بوظائف أُخرى. والنظام

يملك حوالي 40 إشارة لها وظائف متعددة. وهذه الإشارات متعارف عليها من خلال الرقم الذي

تحمله . وكثير منها إعلام عن أخطاء. وهذا الإعلام بالخطأ يأتي في أغلب الأحيان من نواة النظام

، في حالة محاولة إحدى البرامج كتابةَ المعلومات في المنطقة المحظورة من وحدة الذاكرة ،

وعند ذلك يُجبر النظام على إيقاف العملية بواسطة إرسال إشارة signal  إليها ، وهناك إشارة

تُرسَـل عندما يحاول أحد البرامج أن يطرح الصفر من عدد معين. وهناك إشارات تُرسَـل إلى

العمليات  حال انقطاع الكهرباء، لكي تستطيع هذه بدورها أن تُنهي عملها بحالة معقولة، وخلاف

ذلك يمكن خسارة كثير من المعلومات. وهناك إشارات تُرسَـل في حالة ضغط المفاتيح Ctrl-C أو

Del أو Ctrl-Z إلخ...

 

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

نستطيع استعمال الأمر kill الذي يزيل العمليات من النظام نهائياً. واستعمال  kill يكون

بإدخال الأمر ورقمِ العملية خلفه كإضافة . ورقمُ العملية نستطيع إظهاره بواسطة البرنامج  ps 

كما ذكرنا سابقاُ. وهاك مثلاً لإزالة إحدى العمليات :

 

$ sleep 100  &

[1] 1479

 

$ ps

   PID TTY           TIME COMMAND

1470 ttyq4          0:01  csh

1483 ttyq4          0:00  ps

1479 ttyq4          0:00  sleep

$

$ kill 1479

[1]    Terminated           sleep 100

$ ps

   PID TTY           TIME COMMAND

1470 ttyq4          0:01  csh

1483 ttyq4          0:00  ps

$

الشكل 33

 

        في الشكل 33 أدخلنا عملية للعمل الخلفي بواسطة & ورقمها 1479 ، وبواسطة ps

أظهرناها على الشاشة. وبواسطة kill أُزيلت العملية من النظام. وهكذا أَرسَـل  kill الإشارة

رقم 15 لإزالة العملية. ومن المستطاع حذف كثير من العمليات سوياً بإدخال الأرقام واحداً تلو

آخرَ  بعد الأمر kill  منفصلة بفراغ. والإشارة  signal رقم 15 يمكن تجاهلها من قبل النظام

إذا كان هناك أمر بالتجاهل ، ولكنَّ من المستطاع بالرغم من الأمر بالتجاهل  إزالةَ العملية

بإضافة -9 ، أي أن نُدخل رقم الإشارة9  للحذف  بعد الأمر kill ، ورقمَ العملية.

 

        وإليكَ مثلاً على ذلك :

 

$ runforever   &

[1] 2312

$_

$_

$ ps

   PID TTY           TIME COMMAND

2312 ttyq4          0:00  runforever

1470 ttyq4          0:01  csh

1483 ttyq4          0:00  ps

$ kill 2312

$ ps

   PID TTY           TIME COMMAND

2312 ttyq4          0:00  runfoever

1470 ttyq4          0:01  csh

1483 ttyq4          0:00  ps

$ kill  -9  2312

[1]    Terminated           runforever

$_

 

الشكل 34

 

        وجدير بالذكر أن العمليات غير قابلة للإزالة إلاّ من قبل مالكها ، ولكنَّ مدير النظام

root (superuser) يستطيع إزالة وإيقاف العمليات جميعها .

 

7.5 المعالجة الخلفية للعمليات

 

        تبين لنا - فيما سبق - من معلومات ، أنَّ لكل وظيفة يقوم بها الحاسوب عمليةً ظاهرةً

أو عمليةً خلفيةً (أي من وراء ستار) . والعمليات الظاهرة هي عمليات تحقق الإنجازاتِ التي

نريدها في الحال ، ونحن نشعر بسرعة أو ببطىء الإنجاز ، أي أننا لانستطيع إدخال الأمر القادم

قبل أن يُنجـِز الحاسوب  المهمة السابقة ، ونحن نكون - أثناء ذلك - في حالة انتظار. بعكس

الوظائف أو المعالجة الخلفية للعمليات ، التي يكون إدخالها بالطريقة المُتبعة للأوامر ،

بالإضافة إلى رمز &  في آخر سطر الأوامر ، وذلك بعد كتابة الأمر والإضافات .

 

        وهذه المعالجة الخلفية للعمليات (كمراقبة البريد الإلكتروني، والعلاقةِ مع المطاريف

، و القيامِ بوظائف الطباعة الوسيطة spool  ¡ و مراقبةِ مترجم الذبذبة modem  ...إلخ. هي

وظائفُ يقوم الحاسوب بإنجازها باطنياً بعد إدخالها.  ويستطيع المستخدِم مواصلة عمله بعد ذلك

دون انتظار الإنجاز.

 

        ويقوم النظام بإدارة  العمليات الخلفية بواسطة ترقيمها ترقيماً مزدوجاً ، رقم

النظام   PID ¡ والرقم الوظيفي(Job-No.) ¡ ومن المستحسن استعمال الرقم الوظيفي الذي يبدأ

برقم 1  ، بعد تشغيل النظام ، لأنَّ من الصعب حفظَ أرقام العمليات النظامية. وإذا أردنا

استعمال الرقم الوظيفي فيجب إدخال الأوامر مضافاً إليها علامة %.

 

        ونستطيع إظهار هذه الأرقام الوظيفية باستعمال الأمر jobs ¡ ونستطيع تحويل العملية

الخلفية إلى  عملية ظاهرة ، ثم إعادتـَها إلى الخلف لتصبح خلفية ، وذلك باستعمال % مضافاً

إليها الرقم الوظيفي. ونجذب العملية من الخلف إلى الأمام باستعمال & بعد % والرقمِ الوظيفي

. وإذا كانت هناك عملية ظاهرة أمامية وأوقفناها باستعمالCtrl-Z  ¡ فإننا نستطيع جعلها

تتابع العمل باستعمال الأمر   bg لإرسالها إلى الخلف للمتابعة هناك . وباستعمال الأمر    fg

نجذب هذه العملية إلى الأمام لتصبح عملية ظاهرة ، وذلك بعد استعمال (Ctrl-Z) مباشرة .

وإليك بعض الأمثلة على ذلك :

 

 

 

% sleep 1000  &

[ 1 ] 120903

% vi  text    

.....................          ندخل إلى برنامج الكتابة

 

(Ctrl -Z)                      vi... ثم نوقف العمل ب

% jobs

[1]    - Running                   sleep  1000

[2]    + Suspended         vi  tetx

% find  \  -name  sort  -print  >  result

(Ctrl -Z)

% bg                 إلى العمل في الخلف  findنعيد البرنامج

[1]    Running                      sleep  1000

[2]    - Suspended         vi  tetx

[3]    +Suspended          find  \  -name  sort  -print

% jobs

[1]    -  Running                  sleep  1000

[2]    + Suspended         vi  tetx

[3]       Suspended                find  \  -name  sort  -print

% %2                                إلى العمل  vi نعيد البرنامج

الشكل 35

         أولاً :

        أدخلنا sleep للعمل في الخلف 1000 ثانية ورقمَه الوظيفي [1] ورقمـَه النظامي 120903

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

 

        ثانياً :

        أدخلنا البرنامج  vi وهو محرر (برنامج معالجة كلمات لكتابة البرامج والنشرات

ومعلومات أُخرى) ، وبعده أدخلنا اسم ملف text . وبعد إدخاله تذكرنا أننا نريد البحث عن ملف

معين بواسطة البرنامج find   ¡ وفي هذه الحالة أوقفنا العمل بالبرنامج  vi بواسطة Ctrl -Z

 . وبعد ذلك أظهرنا العمليات بواسطة  jobs ¡ وأدخلنا الأمر  find وأوقفناه أيضاً بواسطة

Ctrl-Z ¡ ثم أعدنا عمل find في الخلف . ثم أظهرنا العمليات بواسطة  jobs مرةً أُخرى. ونعود

بواسطة 2%  للعمل بالعملية رقم 2 ، وهي برنامجvi  ونتابع العمل.

 

8.5  صلاحيات ومرتبات العمليات

 

        هناك البرنامج /usr/bin/nice والأمر nice لتغيير مرتبة عمل العمليات،

و/usr/bin/nice  برنامج مستقل، والأمر nice يكون مزوداً به غلاف العمل.

 

        إنَّ المرتبة - كما ذكرنا في السابق - هي أولوية العمل لدى وحدة العمليات والمعالجة

والتحكم ، وكلما كانت المرتبة أعلى كان إنجاز البرنامج أسرعَ في العمل. ودرجات الأولوية أو

المَرتَبة تكون عادة مابين 0 إلى 19. والصفر يعني مرتبة عادية standard ¡ وزيادة العدد يقلل

الأولوية. أما بالنسبة إلى مدير النظام ، فمن حقه تصعيد الأولوية من صفر إلى تحت الصفر  (

إلى ناقص 20- ).

 

        الاختلاف النحوي للأمر  nice والبرنامج  /usr/bin/nice يكون على النحو التالي:

 

$ /usr/bin/nice  -12 cc -c *.c   &

[1] 1933

 

        أدخلنا برنامجcc  للعمل بأولوية 12 بواسطة البرنامج nice ، وبرنامج  cc  هو مترجم

البرامج للغة البرمجة C ، وهنا نترجم compiling الملفات التي تنتهي بحرف  .c   ووضعنا *

في المقدمة بدل الأسماء ، وأنهينا الإدخال ب & للعمل الخلفي . ويظهر رقم العملية الوظيفي

بين زاويتين [ ] والرقم النظامي بعد ذلك.

 

% nice   t12   cc   -c   *.c   &

 

         أدخلنا الأمر nice التابع لغلاف سي C-Shell  ونستعمل (  (t بدل (-) قبل مرتبة

الأولوية.

 

9.5  تحديد أوقات عمل العمليات الزمنية

 

        بواسطة الأمر at نستطيع الإيعاز إلى أحد البرامج (shell-script) الخاصة بالغلاف

بالعمل في زمن معين في المستقبل ، نختاره باليوم والساعة والدقيقة . وهذه الحالات تكون

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

دون أن يكون أحد موجوداً لمراقبة الجهاز ، أو الدخولِ إلى النظام ، بشرط أن يظل الجهاز

الرئيسي عاملاً ، ليلَ نهارَ ، دون إطفاءِ أو فصلِ الكهرباء عنه. وإدخالُ الوقت يكون حسبما يفهمه

النظام ، والذي يكون عادةً في النظام الأمريكي من اليسار إلى اليمين:

 

         الساعة ونقطة مزدوجة ، والدقائق ، والشهر بالاسم  واليوم بالرقم ،  بهذا الشكل:

(19:30 Jan 15 )  الساعة السابعة والنصف مساء يوم 15 من شهر كانون الثاني.

 

        ونستطيع استعمال الأوقات المسماة باللغة الإنكليزية مثل :

noon                          الساعة 12  ظهراً

midnight                      الساعة 12 منتصف الليل

now                           الآن

  Jan Feb....Dez              الأشهر (أول ثلاثة أحرف)

 today                        اليوم

 tomorow                     غداً

 days أو day                 اليوم أو الأيام

 week  أو weeks     الأسبوع أو الأسابيع

 hour أو hours               الساعة أو الساعات

 minute أوminutes  الدقيقة أو الدقائق

 month أو months    الشهر أو الأشهر

  year أو years              العام أو الأعوام

 

ونستطيع بواسطة  +  إضافة الأيام والساعات مثل :

 

now+12               اثنتا عشرةَ ساعةً من الآن

  now+2days تعني يومين بعد الآن

 noon Friday         الجمعة القادمة الساعة 12 ظهراً

 

 

        وإليك بعض الأمثلة :

 

at      9:30 Jan 15         1/15 ابدأ العمل الساعة  9 والنصف يوم

at      now + 5 days         ابدأ العمل بعد 5 أيام من الآن 

at      nooh Friday          ابدأ العمل الجمعة القادمة الساعة 12

 

$ at 3:15 Friday

startprog                             startprog  هذا برنامج

.

.

Ctrl-D                        بضغط هذه المفاتيحscript إنهاءإدخال ال

warning: commands will be executed using /bin/sh

job 693451000.a at Fri Jan 30 03:15:00 1993

$

 

        هنا نرى أن العملية ستبدأ  يوم الجمعة القادم في الساعة الثالثة والربع صباحاً

بتشغيل البرنامجstartprog  . ونحن نستطيع إدخال أكثر من برنامج للإنجاز لاحقاً قبل ضغط

المفاتيح Ctrl -D لإنهاء الإدخال ، ولتعمل البرامج في الوقت المحدد لها . ويُعلِمنا النظام

بعد Ctrl -D بتلقيه ما أُدخل إليه ، ويعطينا رقم الوظيفة والتي نستطيع  إيقافها عند الحاجة

.

 

        وبواسطة إدخال الإضافة  at  -l  نستطيع رؤية العمليات التي تكون في حالة انتظار

حُـلول الوقت المعين للإنجاز . هذا ونستطيع وقف عمل أي عملية  باستعمال :

 

$ at -r   process-No  process-No = رقم العملية

الفصل السادس

 

محررالنصوص

 

1.6    البرنامج الكتابي vi    

2.6    عملية إدخال المعلومات والأوامر

الفصل السادس

محررالنصوص

 

        إن أي مبرمج أو مستخدِم لجهاز الحاسوب يكون بحاجة إلى محرر لكتابة البرامج ، أو

الرسائل ، أو الملاحظات لطباعتها أو الاحتفاظ بها، والمحرر هذا يكون برنامجَ_INDEX_ _معالجة

الكلمات word processor ¡ ونستطيع بواسطته كتابة وتخزين ماكتبناه في ملفات ، وتغيير

ماكتبناه ، أو حذفَ بعضه ، أو نقلَ أحد محتوياته ...إلخ...

 

        وهناك كثيرٌ من برامج الكتابة والتنقيح ، وبرامجِ معالجة الكلمات ، وتختلف هذه عن

بعضها بعضاً في القدرة . وأغلب برامج الكتابة التابعة لنظام التشغيل تكون غير مؤهلة لترتيب

الكلمات بالطريقة المتقدمة ، مثل البرنامجMS-Word  مثلا.

 

والنظام يونيكس لديه برنامج كتابة (محرر) يسمى vi  ¡ ويصلح لكتابة البرامج والرسائل

البسيطة والمعلومات ...إلخ .

 

        ونحن الآن بصدد تقديم لمحة عن استعمال هذا البرنامج، دون التطرق إلى تقديم شرح عن

البرامج ed و ex و elvis ¡ وهي أيضاً برامج كتابة تابعة إلى النظام يونيكس . و يحتوي نظام

يونيكس على نسخة من برامج الكتابة أو أكثر. وأغلب هذه البرامج مثل ed و ex  تكون برامجَ

سطريةً ، أي أن عملها يكون محدوداً بالسطر الواحد ، أما برنامج  vi  فهو برنامج شاشة ، أي

أن العمل يكون بمحتوى شاشة كاملة ، أي 25 سطراً. وهكذا يعمل برنامج elvis  أيضاً.

 

        ملاحظة :

         المعتادون على العمل بواسطة برامج معالجة الكلمات من خلال الحاسوب الشخصي PC

يجدون مصاعبَ ضئيلةً للتعود على الكتابة بواسطة البرنامج VI.

 

1.6  البرنامج الكتابي vi

 

        قبل البدء بالعمل يجب التأكد من قابلية عمل المطراف مع vi ¡ وذلك بالتأكد من وجود

البديلة TERM في شكلها الصحيح (انظر جزء المطراف) قبل البداية بالعمل:

 

        نستطيع العمل المباشر بإدخال الأمر vi ملحقاً باسم الملف الذي نريد كتابته ، أو

الملفِ المراد تغييره:

 

$ vi filename

 

 

vi filename           يفتح filename عند النهاية أو يعمل ملفاً جديداً

vi /text filename      يفتح filename عند السطرحيث توجد (كلمة) text

vi n filename  يفتح filename عند رقم السطر كذا (n)

 

        وإذا كان الملف موجوداً فيظهر vi هكذا :

 

_

 

        وتظهر هنا السطور غيرُ المكتوبة مسبوقةً بعلامة ~ للإشارة إلى  أنها غير مستخدَمة. وفي

أسفل الشاشة يظهر اسم الملف. وفي حالة عدم وجود الملف ، يعمل vi ملفاً جديداً وتظهر العبارة

[New file]

 

2.6 عملية إدخال المعلومات والأوامر

 

        برنامج vi لديه حالتان للعمل: حالة إدخال الأوامر ، وحالة إدخال المعلومات ،  وهذه

الأخيرة هي الحالة التي نحصل عليها بعد ظهور شاشة البرنامج vi مباشرة . وللخروج من حالة

إدخال المعلومات نضغط المفتاح Esc فنصبح في حالة إدخال الأوامر . وهناك طرائق كثيرة للخروج

من حالة إدخال الأوامر:

 

 

        طرق الخروج الدارجة من حالة إدخال الأوامر هي إدخال الأحرف a¡i¡o وحرفِ O الكبير.

 

 a =   append        إضافة

 i =    insert  إضافة للأحرف

 o =open              سطر جديد

 

        وعمل هذه الأحرف في البرنامج vi يكون كالتالي:

 

        إذا أردنا إدخال كلمة إلى الملف ونحن موجودون في حالة الأوامر ، نضغط المفتاح a

ونكتب ما نريد ، وبعد ذلك نعود إلى حالة الأوامر بالمفتاح Esc.

 

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

واليمين (_SYMBOL 174 \f "Symbol"_ _SYMBOL 175 \f "Symbol"_ _SYMBOL 173 \f "Symbol"_

_SYMBOL 172 \f "Symbol"_ ) . وفي حالة عدم وجود هذه المفاتيح نستطيع استعمال الأحرف h

للاتجاه إلى اليسار ، و i  للاتجاه إلى اليمين ، و k  للأعلى ، و  j  إلى الأسفل .

 

        ولتغيير ماكتبناه على الشاشة نستعمل المفتاح BackSpace لحذف الأحرف من يسار الوامض

، ولحذف السطر Ctrl -U ¡ ولحذف الكلمة من اليسار Ctrl -W  ¡ ولقلب الصفحات إلى الأمام

نستعمل Ctrl -F ¡ وإلى الخلف Ctrl -B ، وللخروج من vi وتخزين الملف نُدخل ZZ . ومن

المستطاع استعمال :q! للخروج من البرنامج دون تخزين الملف بعد تغييره ، أو للخروج في حالة

عُدولنا عن تخزين الملف .

 

         أما الوظائف الأخرى فنقدم هنا لائحة بها ، وهي تُستَعمَل من خلال حالة الأوامر :

 

        التحرك في الملف:

 

 b             ينقل الوامض إلى الخلف مقدراً كلمة واحدة

 Ctrl-B        يدرج إلى الخلف شاشة كاملة

 Ctrl-D        يدرج نزولا نصف شاشة

 Ctrl-E        يدرج الشاشة صعوداً سطرا واحدا

 Ctrl-F        يدرج إلى الأمام شاشة كاملة

 Ctrl-L Ctrl-R ينشط الشاشة حاذفاً المحارف الخاطئة

 Ctrl-U        يدرج إلى الأعلى نصف شاشة

 Ctrl-Y        يدرج الشاشة نزولا سطرا واحداً

 e             ينقل الوامض إلى نهاية الكلمة الحالية

 h             ينقل الوامض إلى اليسار فسحة واحدة

 H             ينقل الوامض إلى أعلى الشاشة(High)

 j              ينقل الشاشة نزولاً سطراً واحداً

 k             ينقل الوامض صعوداً سطراً واحداً

 l              ينقل الوامض فسحة واحدة إلى اليمين

 L             ينقل الوامض إلى أسفل الشاشة (low))

 M            ينقل الوامض إلى وسط الشاشة((Middle)

 n G           ينقل الوامض إلى السطر رقم n

 w             ينقل الوامض إلى الأمام كلمة واحدة

 0(صفر)      ينقل الوامض إلى بداية السطر

 $             ينقل الوامض إلى نهاية السطر

 "              ينقل الوامض إلى الوضعية السابقة

 a             يلحق نصاً عند محرف واحد إلى يمين الوامض

 A             يلحق نصاً عند نهاية السطر

 cc            يتيح تغيير سطرٍ والمتابعةَ في نمط الإقحام

 cw            يتيح تغيير كلمةٍ والمتابعةَ في نمط الإقحام

 c(             يتيح تغيير بقية الجملة

 c{            يتيح تغيير بقية الفقرة

 i              يولج نصاً عند مكان الوامض

 I              يولج نصاً عند بداية السطر

 o             يفتح سطراً لإقحام نص تحت الوامض

 O             يفتح سطراً لإقحام نص فوق الوامض

 r              يتيح استبدال أحد المحارف والعودةَ إلى نمط الهروب

 add           a يحذف السطر ويضعه في السلة

 "ap           الأسطر المنزوعة أو المحذوفة والموجودة بالسلة

 "aP           يضع الأسطر المنزوعة أو المحذوفةَ والموجودة في السلة

 a y y  ينزع سطراً ويضعه في السلة a

 dd            يحذف سطراً كاملاً

 D             يحذف بقية السطر الحالي

 d w           يحذف كلمة word = w

 J             يصل ما بين سطرين قصيرين في سطر واحد طويل

 m a           يعلم a للنزع أو الحذف

 p             يضع النص المنزوع أو المحذوف بعد الوامض

 P             يضع النص المنزوع أو المحذوف قبل الوامض

 u             يبطل مفعول أمر لتغيير النص

 U             يبطل مفعول جميع التغييرات على السطرالحالي

 x             يحذف حرفاً

 y w           ينزع كلمة (ينسخها إلى المخزن الانتقالي)

 y y           ينزع سطراً

 .(نقطة)       يكرر الأمر السابق

 "lp            يسترجع الحذف السابق

 

        البحث عن النص :

 

 text/         يبحث باتجاه الأمام في الملف عن النص text

 ?text         يبحث باتجاه الخلف في الملف عن النص text

 n                     يتابع البحث في ذات الاتجاه

 N                     يبحث في الاتجاه المعاكس

 

        ضبط القياسات بواسطة أوامر النقطتين التابعة إلى ex :

 

 :set ai        يؤدي إلى تفعيل الحذف التلقائي للفقرات (autoindent                        

        يكرر الحذف)

 :set all       يسرد جميع الإضافات التي تستطيع ضبطها

 :set nu       يضبط الأرقام (أرقام الأسطر)

 :set noic     يجعل عمليات البحث حساسة للتفريق بين الأحرف الكبيرة                    

والصغيرة

 :set wm=n يضبط الهامش عند رقم n

        تخزين النص ، وتحريكه ، وحذفه بواسطة أوامرِ النقطتين المطابقةِ لأوامر البرنامج ex

:

 

 :e filename          ينقح (edit)

 :e                            ينقح الملف السابق

 :n                            n ينقل الوامض إلى رقم السطر رقم

 :x  y m z               z y ينقل الأسطر ما بين

 :x  y co z             ينسخ الأسطر ما بين

 :x  y d                       يحذف الأسطر من

 :x y w filename              يكتب الأسطر ما بين

 :x  y w >> filename يضيف الأسطر ما بين

 :g ?                         يجعل حالات التواجد نصاً جديداً

 :! q                          يخرج من المحرر ويلغي جميع التغييرات

 :w                            يخزن التغييراتِ الأخيرة

 :% S/oldtext / newtext/g   oldtextيبحث عن النص القديم

                               newtext ويستبدل به نصاً جديداً

الفصل السابع

 

الطباعة

 

 

1.7    الطباعة بواسطة System V

2.7    الطباعة بواسطة BSD-Unix  

الفصل السابع

الطباعة

 

        للطباعة المباشرة نستعمل :

 

$ cat filename > /dev/lp0

 

        أي أننا نرسل الملف filename إلى الطابعة /dev/lp0.

 

        واستعمال الطابعة - كما ورد في الأعلى - يسبب مشكلات في حالة إرسال ملفات كثيرة من

مستخدِمين كثيرين باتجاه طابعة واحدة ، دون إتفاق زمني بينهم . ولتفادي ذلك يُستَعمَل نظام 

الطباعة الوسيطة SPOOL (simultaneous peripheral operations on-line) ، الذي يُمَكِنُنا من

إرسال طلبات الطباعة إليه ، والتي تصبح في حالة انتظار في الصف  (queue) ، ويقوم spool

بدوره بإخراج الطباعة على شكل عمليات متتابعة زمنياً ، واحدةً تلو أُخرى .

 

        وهناك نوعان من نظام الطباعة ، أحدهما تابع لنظام system V واسمه lpsched ¡ والآخر

تابع لنظام  BSD-Unix واسمه lpd ¡ ولهذين النظامين برامج مختلفة لإدارة الطباعة الوسيطة.

1.7 الطباعة في النظام System V

 

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

$ lpstat -s

system default destination:matrix

device for matrix : /dev/lp0

device for laser   : /dev/lp1

device for plotter: /dev/lp2

 

        ويخبرنا البرنامج lpstat - هنا - بالطابعة التي تذهب إليها الملفات ففي العادة

(system-printer) ، أي إلى الطابعة matrix ، وذلك في حالة عدم توجيه الملف إلى طابعة

معينة مثل laser أو plotter.

 

        الطابعات المرتبطة في هذا النظام :

 

matrix    طابعة النقاط /dev/lp0

laser     طابعة الليزر /dev/lp1

plotter   المُخَطِط الراسم /dev/lp2

 

        وبواسطة البرنامج lp نستطيع إرسال الملفات إلى spool:

 

$ lp filename

request id is matrix-75 1file

 

        والآن يُطبع الملف المعني على الطابعة matrix .

         ونستطيع إيقاف الطباعة:

 

$ cancel matrix-75

request "matrix-75" cancelled

 

        وهنا أدخلنا الأمر cancel واسم ورقم العملية ، لإيقافها في حال وجودها في صف

الانتظار (queue).

 

        وبواسطة الإضافة -d نستطيع إرسال الملف إلى طابعة أخرى:

 

$ lp  -dlaser   filename

 

ويوضع اسم الملف مباشرة بعد -d ¡ لكي يُطبع الملف بواسطة طابعة الليزر.

 

        وأثناء طباعة أحد الملفات يكون - أحياناً - من الضروري مواصلة العمل في ذلك الملف

، أو تغيير محتواه ، عند ذلك يجب استعمال الإضافة -c (وتعني copy) ¡  كي تُنسَخ نسخةٌ إضافية

من هذا الملف ، وتُرسل إلى ملف الطباعة الوسيطة (spoolfile) ¡ لإدراجها هناك في الصف ،

ويتحررُ الملف الأصلي من قبضة ال spool.

 

        وإذا أردنا طباعة عدة نُسخ من أحد الملفات ، نُضيف عدد النُسخ إلى الإضافة (n) هكذا 

-n3 .

 

        بعد الانتهاء من طباعة أحد الملفات ، لايعلمنا البرنامج بانتهاء وظيفة الطباعة .

وللحصول على خبر message من النظام بانتهاء الطباعة ، نضيف  -m (mail) إلى سطر أمر

الطباعة لدى استعمال lp . وبذلك نحصل على إعلام بانتهاء وظيفة الطباعة .

 

$ lpstat

matrix-75     ziad    prioity  0  Mar 13  13:20 on matrix

                filename                              3210

 

        وهذا يعلمنا بأن filename يُطبع الآن بطابعة الماتركس ، و حجمه 3210 أحرف .

2.7 الطباعة بواسطة BSD-Unix

 

        الأوامر التي تختلف هنا هي:  lpr ¡ وهي تستخدم بدل lp ¡ والإضافات مثل -d تصبح هنا

-p ¡ وبدل -n نستعمل -# لطبع عدة نُسخ من الملف ، وباقي الإضافات تُستخدم كما في البرنامج lp

¡ وبديل cancel يكون lprm لإيقاف عمليات الطباعة ، وبالطبع نحتاج إلى رقم هذه العملية ،

الذي نستطيع معرفته بواسطة lpq :

 

$ lpq -plaser                 laser إظهار عمليات الطابعة

laser is redy and printing

Rank  Owner Job   Files    TotalSize

active ziad           3      letter.txt     49150 bytes

$ lprm -plaser 3                     يوقف العملية و يحذفها

الفصل الثامن

 

أوامر النظام المتطورة

 

 

1.8    أوامر المقارنة                                        

2.8    تجزئة الملفات                                        

3.8    تصنيف الملفات                                              

4.8    اقتطاع المعلومات                                            

5.8    تبديل الأحرف داخل الملف                            

6.8    تركيب الأوامر                                        

7.8    البحث عن معلومات معينة                            

8.8    ملفات الأرشيف                                       

9.8    تكثيف الملفات                                        

10.8 برامجُ أخرى مساعدة                                 

الفصل الثامن

أوامر النظام المتطورة

 

        في هذا الجزء نشرح الأوامر المتطورة ، والتي تكون برامجَ إضافيةً للنظام ، مثلَ

برنامج المقارنة ، وبرنامج تقسيم محتوى الملفات وترتيبها ...إلخ.

 

1.8 أوامر المقارنة

 

        يوجد برنامجان للمقارنة بين الملفات : أولاهما cmp  (compare)  وهو يقارن ملفين ،

ويُفصح عن حالة الاختلاف إذا ما وُجد بينهما ، و الثاني هو البرنامج  diff  الذي يُظهر الاختلاف

بالتفصيل.

 

        ولتوضيح عمل هذه البرامج ننشىء أولا ملف بيانات ، ونسميه adr ، ونضع داخله عدة

أسماء لأشخاص : ونقوم بكتابة الاسم الأول ، واسم العائلة ، والعنوان ، وتاريخِ ومكانِ الميلاد ،

ونفصل المجالات بواسطة النقاط العمودية (:) ، كما هو في الشكل التالي:

 

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

David:Goldstein:Florastr. 7:Essen:8:11:38

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

الشكل 36

        الملف  adr يحتوي الآن على سجلات ومجالات ، ويسمى هذا الملف في لغة الحاسوب قاعدة

مُعطيات (بيانات)(database)  ، والسجل يسمى (record)  والمجال  (field) . ومحتوى ملف adr 

يتكون من عدة سجلات ،  وكل سجل يتكون من عدة مجالات يُفصَـلُ ما بينها بواسطة (:).

 

        وننشىءُ الآن ملفاً آخرَ (نسخة عن adr) بمواصفات مماثلة،  باسم  new  ¡ ونغير به بعض

السجلات كالتالي :

 

الملف new

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Harry:Meier:Dorfstr. 12:Reutlingen:2:10:56

Sven:Baumann:Eschenfeld 4:Bremen:16:2:65

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

David:Goldstein:Florastr. 7:Essen:8:11:38

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

الشكل 37

 

        والآن نقارن الملفين بواسطة  cmp  كالتالي:

 

$ cmp new adr

new adr differ: char 42¡ line 2

 

        وهذا يعني أن الملفين مختلفان اختلافاً يبدأ في السطر الثاني ، ومجموع الاختلاف 42

حرفاً ، وبرنامج cmp   لايهمه نوع الاختلاف الموجود ، ولكنه يُفصح عن تعداد ال Byte's  ¡

ويخبرنا عن حالة الاختلاف تعدادياً.

 

        أما برنامج diff فيعطينا حالات الاختلاف مفصلة ، ويقرأ الملف سطراً سطراً ، ويبين

البرنامجُ ذلك بإظهار اختلاف السطور كما يلي:

 

$ diff new adr

2¡3c2

< Harry:Meier:Dorfstr. 12:Reutlingen:2:10:56

< Sven:Baumann:Eschenfeld 4:Bremen:16:2:65

.....

> Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

5a5

> Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

9a10

> Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

الشكل 38

 

        في هذه الحالة يُظهر البرنامج diff - بواسطة أحرف ورموز - كيفيةَ تصحيحِ الملف

الثاني ، ليصبح مماثلاً للملف الأول .

 

الرموز تعني : a  إضافة added ¡ و c تغييرchange  ¡ و d حذف delete. ونجد رقمَ السطر (

السجل) المتسلسل المعني بالتغيير بعد هذه الأحرف ، ثم نجد السجل من الملف الأول مسبوقاً برمز

> ، والسجل من الملف الثاني مسبوقاً برمز < ، وفي المثال الأعلى (الشكل 38) : تظهر من الملف

 new  أرقام السجلات التي يجب تغييرها 2،3c2 ، وبعد ذلك يظهرالسجل الخامس 5a5 من adr 

لإضافته إلى ما بعد السجل الخامس من  new  ، وكذلك التاسع بعد العاشر 9a10 ...إلخ.

        واذا استعملنا إدخال الملفات بعكس ماذكرنا في الأعلى يكون adr  هو الأول ،  وnew 

هو الثاني:

 

$ diff  adr  new

2c2¡3

< Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

...

> Harry:Meier:Dorfstr. 12:Reutlingen:2:10:56

> Sven:Baumann:Eschenfeld 4:Bremen:16:2:65

5d5

< Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

10d9

> Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

الشكل 39

 

        هنا يُعلمنا البرنامج  diff نتيجة المقارنة ، وهي أن السجل الثاني من adr  يجب

تبديله بالسجل الثاني والثالث من new  ¡ و يُحذَفُ السجلان الخامس والعاشر من adr  (d) .

 

        وبرنامج  diff  لايصلح لمقارنة الملفات البينرية binary-files التي تحتوي على لغة

الآلة ، وفي هذه الحالة يكون من الأفضل استعمال البرنامج cmp .

 

2.8  تجزئة الملفات

 

        في بعض الأحيان يكون من الضروري تقسيم الملفات الكبيرة إلى ملفات صغيرة ، وبواسطة

البرنامج split نستطيع إنجاز ذلك .

 

        يجزئ البرنامج split  ملفاً ما بتقسيمه إلى عدة ملفات ، ويخزن كل كمية في ملف جديد

يحمل الاسم الأصلي بالإضافة إلى الأحرف الأبجدية بالتسلسل (  aa¡ab¡ac¡ad .........zz) ¡ وذلك

حسب الإدراج الكمبيوتري لعدد الملفات التي تُنشأ بواسطة  split . وإذا أردنا تجزئة الملف

adr (انظر في الأعلى) إلى أجزاء ، كل منها 4 سطور ، يتجزأ الملفadr  إلى عدة ملفات كالتالي

(adraa adrab adrac ......) .

 

        وفي المثال التالي نقوم بتسمية الملفات اسماً آخر :

 

$ split -4 adr teil

$ ls

adr   teilaa  teilab  teilac

$ cat teilaa

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

$ cat teilab

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

David:Goldstein:Florastr. 7:Essen:8:11:38

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

$ cat teilac

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

الشكل 40

 

        وبما أن الملف adr يحتوي على عشرِ سجلات ، فقد أَنشَأَ البرنامج  split  3 ملفات جديدة

، وأصبح محتوى الملف الأخير سجلين ، لأنه لم يبق هناك سجلات. وبرنامج split  لا يُستعمل لتقسيم

الملفات البينرية (الملفات التي تحتوي على أحرف لغة الآلة) .

 

3.8  تصنيف الملفات

 

        يكون ضرورياً في بعض الأحيان ، أو بالأحرى في أغلبها ،  تصنيف المعلومات الواردة في

السجلات لتبسيط العثور على محتوياتها ، وعمليات التصنيف والترتيب هذه يقوم بها البرنامج

sort  .

 

        لنفترض أننا الآن بحاجة إلى تصنيف الملف adr الذي يحتوي على سجلات أشخاصٍ (أسماء

وعناوين ومكان وتاريخ الميلاد) ، ونريد ترتيباً حرفياً لكل من الاسم الأول واسم العائلة أو

العكس ، فإننا نقوم بما يلي :

 

نجعل sort يُخرج التصنيف إلى ملف جديد ، نضع به الترتيبات الجديدة ، ويرسل   sort التصنيف

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

الرمز <  واسم الملف الذي نريد أن نُخرج إليه التصنيف ( أو نستعمل الإضافة  -o واسم الملف )

.

 

         وإدخال كيفية التصنيف تكون كالتالي:

 

+field1.character1   -field2.character2

مجال1+ . حرف التصنيف1   .مجال2-  حرف التصنيف2

 

        وهذا يعني: بداية التصنيف + ، والنهاية - ، من كل مجال ،  ويمكن إدخال الحروف

التي يجب تصنيفها character . فمثلاً  +1 -2 يعني أنه يجب بداية التصنيف في المجال الثاني ،

وينتهي التصنيف لدى الوصول إلى بداية المجال الثالث . ومن الممكن تحديد التصنيف بوضع

الحرف من محتوى المجال ، ووضعِ نهاية التصنيف بذات المجال مثل) 1.5-  +1.3 ) ، و يعني ذلك

أن بداية التصنيف تبدأ بثالث حرف من المجال ، وتنتهي بالحرف الخامس من ذات المجال .

وبرنامج sort   يَفهمُ في العادة أن المجالات منفصلة بفراغ أو بفراغ موسع (Tab) ، ولذلك يجب

إعلام البرنامج عن نوعية انفصال المجالات (في النقطة المزدوجة : مثلاً) . وباستعمال الإضافة 

-t وبالرمز المتفق عليه (:) نستطيع إعلام sort بذلك . والبرنامج sort يُصنِّف حسب ترتيب ال 

ASCII-Code  . ومن المستطاع عدم التفريق ما بين الحروف الصغيرة والكبيرة بواسطة استعمال

الإضافة-f  ، فإذا أردنا ترتيب الأرقام فيجب استعمال الإضافة -n   ، لأنه بخلاف ذلك يكون

التصنيف خاطئاً.  وإذا أردنا أن نبدأ التصنيف بالحرف الأخير من الأبجدية فإننا نستعمل الإضافة

-r   التي تقلب التصنيف لتجعله عكسياً ، أي Z في الأول ، و A في الأخير.

 

        ونقدم الآن بعض أمثلة التصنيف باستعمال الملف adr :

 

$ sort adr

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

David:Goldstein:Florastr. 7:Essen:8:11:38

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

الشكل 41

        هنا لم نُدخلِ المجالَ ، ولذلك صُنف الملف بإعتبار الحرف الأول من السجل .

 

$ sort -t: +3 -4  adr

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

David:Goldstein:Florastr. 7:Essen:8:11:38

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

الشكل 42

 

        هنا أخبرنا sort أن المجالاتِ منفصلةٌ بواسطة النقاط (:) وأنَّ التصنيف يجب أن يبدأ في

المجال الرابع (3+) (أي المدينة) ،   وينتهي به (لغاية 4-)، واسمُ الملف  adr.

 

$ sort -t: +3 -4  +1 -2  adr

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

David:Goldstein:Florastr. 7:Essen:8:11:38

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

الشكل 43

        في الشكل 43 يكون الأسلوب كالتصنيف السابق ، ولكن هنا أعْـلمْنا  sort  أنه في حال

تعدد اسم التصنيف ( المدينة ) فيجب متابعة التصنيف في مجال ثانٍ (1+) ، وهو الاسم الثاني

للشخص (العائلة) .

 

$ sort -t: +4  -5  adr

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

David:Goldstein:Florastr. 7:Essen:8:11:38

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

الشكل 44

طلبنا ترتيب يوم الميلاد دون الإضافة -n

 

$ sort -t: -n +4  -5  adr

Susanne:Krieger:Fischerweg 8:Jena:1:5:67

Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56

Thomas:Meier:Forstweg 1:Stuttgart:7:10:81

David:Goldstein:Florastr. 7:Essen:8:11:38

Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71

Otto:Schneider:Taubenweg 2:Berlin:10:5:47

Anneliese:Zimmermann:Bachstr. 24:Berlin:13:4:34

Jens:Hofmeister:Am Markt 43:Zittau:19:2:73

Hannelore:Becker:Bismarckstr. 173:Hamburg:21:9:50

Michael:Kolbe:Uferstr. 24:Rostock:23:11:70

الشكل 45

        لم نستعمل في الحالة الأولى  -n (الشكل 44)  لترتيب الأرقام ،  بل استعملناها في

المثال الثاني (الشكل 45) لترتيب أيام الميلاد للاشخاص ، دون الأشهر والسنين.

 

4.8 اقتطاع المعلومات

 

        وهنا نتحدث عن البرنامج cut  الذي يقتطع معلومات معينة من الملف ، ويظهرها على

الشاشة ، أو يخزنها في ملف آخر. و  cut  يفهم الإضافات :  -f    وتعني المجالات (field) ¡ و

-d  للإشارة إلى رمز الانفصال ، و -c  للإشارة إلى الحروف في السجل أو المجال . وهنا مثال

على ذلك :

 

$ cut -d: -f1-2¡4 adr

Susanne:Krieger:Jena

Udo:Meier:Reutlingen

Otto:Schneider:Berlin

Kristina:Weber:Zittau

Michael:Kolbe:Rostock

David:Goldstein:Essen

Hannelore:Becker:Hamburg

Jens:Hofmeister:Zittau

Anneliese:Zimmermann:Berlin

Thomas:Meier:Stuttgart

الشكل 46

        وهنا - في الأعلى - أدخلنا الإضافة -d:  مع رمز الانفصال (:) ، وتظهر المجالات من

الأول إلى الثاني زائد الرابع -f1-2¡4 ¡ والملف المشار إليه وهو  adr.

 

$ cut -d: -c1-20 adr

Susanne:Krieger:Fisc

Udo:Meier:Dorfstr. 1

Otto:Schneider:Taube

Kristina:Weber:Alten

Michael:Kolbe:Uferst

David:Goldstein:Flor

Hannelore:Becker:Bis

Jens:Hofmeister:Am M

Anneliese:Zimmermann

Thomas:Meier:Forstw

الشكل 47

        واستعملنا هنا ( حرفc = character  ) -c1-20  لتحديد أول 20 حرفاً من السجل (من c1

إلى c20) من الملف adr  .

 

5.8  تبديل الأحرف داخل الملف

 

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

يقوم  بهذه المهمة.

 

        وهنا نُغير الفاصلة (:) إلى الفاصلة (.) في الملف adr  بواسطة رمز الإدخال >:

 

$ tr   : .  < adr

Susanne.Krieger.Fischerweg 8.Jena.1.5.67

Udo.Meier.Dorfstr. 12.Reutlingen.2.10.56

Otto.Schneider..Taubenweg 2.Berlin.10.5.47

Kristina.Weber.Altenberger Chaussee 2.Zittau.9.8.71

Michael.Kolbe.Uferstr. 24.Rostock.23.11.70

David.Goldstein.Florastr. 7.Essen.8.11.38

Hannelore.Becker.Bismarckstr. 173.Hamburg.21.9.50

Jens.Hofmeister.Am Markt 43.Zittau.19.2.73

Anneliese.Zimmermann.Bachstr. 24.Berlin.13.4.34

Thomas.Meier.Forstweg 1.Stuttgart.7.10.81

الشكل 48

 

        ولم نُرسل التغيير إلى ملف آخر ، وقد ظهر فقط على الشاشة ، وبقي محتوى الملف  adr 

كما كان ولم يتغير . وفي حال تغيير رموز مثل * أو ; فيجب وضعها مابين فواصل مرفوعة هكذا:

‘*‘ أو "*" ، وفي حال وضعها دون فواصل حماية فإنَّ النظام يفهمها خطأ .  هذا ويمكن حمايتها

بواسطة \ أيضاً.

 

        ونستطيع تغييرَ عدة أحرف بأخرى أو تغييرَ جميع الحروف الصغيرة بحروف كبيرة ...إلخ ،

باستعمال التحديد (a-z) أو (A-Z) . ومن الممكن تغيير حروف معينة باعادة التكرار .

 

مثال : إذا أردنا أن نُغيرَ حرف a  4 مرات ندخلها هكذا (a*4) . ويجب هنا الانتباه إلى أن

system V ، و BSD ، والأنظمةَ الأُخرى تختلف في طريقة الإدخال syntax ، ولذلك يجب الرجوع إلى

ال manual  لمعرفة الصحيح.

 

        وإليك بيانَ الاختلاف في إدخال الأمر tr في  system V و BSD  :

 

        system V:

 

$ tr   '[A-Z]'  '[a-z]'  < adr

susanne:krieger:fischerweg 8:jena:1:5:67

udo:meier:dorfstr: 12:reutlingen:2:10:56

otto:schneider:taubenweg 2:berlin:10:5:47

kristina:weber:altenberger chaussee 2:zittau:9:8:71

michael:kolbe:uferstr.24:rostock:23:11:70

david:goldstein:florastr. 7:essen:8:11:38

hannelore:becker:bismarckstr. 173:hamburg:21:9:50

jens:hofmeister:am markt 43:zittau:19:2:73

anneliese:zimmermann:bachstr. 24:berlin:13:4:34

thomas:meier:forstweg 1:stuttgart:7:10:81

الشكل 49

 

        ونستطيع إدخال الأمر tr هكذا في   BSD-Unix:

$ tr   A-Z    a-z     <adr

        ونحصل على ذات المحتوى أو الإظهار كما في الشكل 49 .

 

        وهنا نغير جميع الأرقام ونضع (?) بدلاً منها (system V) :

$ tr   '[0-9]'  '[?*]'  < adr

Susanne:Krieger:Fischerweg ?:Jena:?:?:??

Udo:Meier:Dorfstr. ??:Reutlingen:?:??:??

Otto:Schneider:Taubenweg ?:Berlin:??:?:??

Kristina:Weber:Altenberger Chaussee ?:Zittau:?:?:??

Michael:Kolbe:Uferstr: ??:Rostock:??:??:??

David:Goldstein:Florastr. ?:Essen:?:??:??

Hannelore:Becker:Bismarckstr. ???:Hamburg:??:?:??

Jens:Hofmeister:Am Markt ??:Zittau:??:?:??

Anneliese:Zimmermann:Bachstr. ??:Berlin:??:?:??

Thomas:Meier:Forstweg ?:Stuttgart:?:??:??

 الشكل 50

BSD-Unix :

$ tr   0-9   '?'     <adr

 

        ونستطيع حذف أحد الأحرف أو الرموز (مثل :) من الملف بواسطة الإضافة -d:

 

$ tr  -d  :  < adr

SusanneKriegerFischerweg 8Jena1567

UdoMeierDorfstr 12Reutlingen21056

OttoSchneiderTaubenweg 2Berlin10547

KristinaWeberAltenberger Chaussee 2Zittau9871

MichaelKolbeUferstr 24Rostock231170

DavidGoldsteinFlorastr 7Essen81138

HanneloreBeckerBismarckstr 173Hamburg21950

JensHofmeisterAm Markt 43Zittau19273

AnnelieseZimmermannBachstr 24Berlin13434

ThomasMeierForstweg 1Stuttgart71081

الشكل 51

 

6.8  تركيب الأوامر

 

لدى تشغيل عدة برامج في إيعاز واحد ، نستعمل البرنامج  xargs  للإخراج المشترك :

 

$ ls *.c | xargs echo Hier is all C-Programs:

Hier is all C-Programars: Prog1.C Prog2.C Prog.3C.......

 

        هنا يسرد البرنامج  LS  جميع الملفات التي تنتهي بحرف  .c   وبواسطة الأنبوب (|)

يُرسَـل الإخراج إلى xargs ¡الذي يقوم بدوره بتشغيل الأمر echo ¡ الذي يرسل العبارة  (Hier is

all Programs:) ، وبعد ذلك يخرج ماتوصل إليه البرنامج LS إلى الشاشة . وفي حالة أخرى يمكن

استعمال الإضافة  -n  لجعل xargs  يعيد الوظيفة حتى ينتهيَ الإنجاز .

 

وإليك مثالاً على ذلك:

 

$ ls *.dat | xargs -n1 cmp compare.dat

compare.dat a.dat differ: char 21¡line 3

compare.dat b.dat differ: char 32¡line 7

compare.dat c.dat differ: char 43¡line 12

 

         نرى هنا الملف compare.dat يُقارَن مع الملفات التي وجدها البرنامج  ls  . والإضافة

 -n1 تجعل البرنامج xargs   يفرض على البرنامج cmp أن يأخذ ملفاً واحداً ، ويقارنه ، ثم

يأخذَ التالي ...إلخ .  حتى تنتهيَ مقارنة جميع الملفات التي تنتهي أسماؤها ب (.dat) .

 

        وهاك مثالاً آخرَ للبرنامج xargs أكثر تعقيداً من المثال السابق:

 

$ ls *.c | cut -d. -f1 | xargs -ip mv p.c p.old

 

        وهنا يبحث البرنامج ( ls ) عن الملفات التي تنتهي بحرفc  (*.c) . والإضافةُ  -d 

تُستعمل للإفصاح عن نوعية فصل المجالات بعضها عن بعض بواسطة رمز ( هو في مثالنا هذا النقطة

في *.c) . وفي المثال الأعلى لدينا مجالان : بديلة الاسم (*) وحرف (c) تفصلهما نقطة (*.c) ¡

ونختار المجال الأول (الاسم دونc  ممثلاً ب *) بواسطة الإضافة -f1 التابعة للأمر cut ، ليُخرِجَ

لنا اسم الملف فقط دون النقطة ودون حرف c . وبعد ذلك يَستَعمل xargs  الإضافة  -ip  لوضع اسم

الملف بها ، ويجعل mv يُغير الاسم الأول من الملفات التي تنتهي ب   .c إلى ذات الاسم + عبارة

(.old ) .

 

        ويمكن أن تُستَبدلَ هذه العملية باستعمال الأمر mv  مكرراً بعدد الملفات الموجودة على

هذا النمط وبتحويلها على النحو التالي:

 

$ mv  hollo.c hollo.old

$ mv  backup.c      backup.old

$ mv  display.c      display.old

        واستعمال البرنامج xargs يوفر علينا وقتاً طويلاً من العمل ، ويكون مساعداً في بعض

الأحيان.

 

7.8  البحث عن معلومات معينة

 

        البرنامج  grep  هو من أكثر البرامج استعمالاً ، لقدرته على البحث عن المعلومات

المطلوبة داخل الملفات . وهناك ثلاثة برامج مطابقة: grep ¡ egrep ¡ fgrep  وهي برامجُ تمتاز

بقدرات متساوية . وفي هذا الكتاب نشرح عمل البرنامج grep :

 

$ grep Berlin adr

Otto:Schneider: Taubenweg 2:Berlin:10:5:47

Anneliese:Zimmerman:Bachstr.24:Berlin:13:4:34

$ grep ' ^Jens ' adr

Jens:Hofmrister:Am Markt 43:Z:Hau:19:2:73

$ grep ' 7.$ '  adr

Kristina:Weber:Altenberger Chaussee2:Z:Hau:9:8:71

          بحثنا أولاً عن  Berlin في الملف adr ¡ وتَظهَرُ السطور التي تحتوي هذه الكلمة . وفي

المثال الثاني بحثنا عن الاسم في بداية السجل بواسطة (^)  ، وفي المثال الثالث استعملنا $

(أي قبل الاخير من السجل يكون الرقم 7) ، وهذا يعني أن سنة الميلاد تكون في السبعينات .

ويمكن استعمال * للبحث المتكرر عن حرف ما . واذا استعملنا الإضافة-c  فيُظهر لنا  grep عدد

السجلات التي تحتوي كلمةً أو حرفاً ما :

 

$ grep -c o adr

5

 

        ومعنى ذلك أن grep وجد حرف o في خمسة أسطر . وعكس ذلك نستعمل الإضافة  -v  لإظهار

السطور التي لاتحتوي مفهوماً معيناً .

 

$ grep -v '7.$' adr

Susanne: Krieger 8:Jena:1:5:67

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

 

        وهذه السجلات لاتحتوي (الرقم قبل الأخير) 7 .

 

8.8  ملفات الأرشيف

 

        بواسطة البرنامج  tar يمكن عمل ملف واحد لاحتواء عدد من الملفات وضمها إليه ،

استعداداً للتخزين المُكَثَّف . ويُحَـبَّـذ استعمال هذا البرنامج لدى إرسال المعلومات والبيانات

عبر الشبكة العالمية ، والتكثيف يقلل تكلفة هذه المهمة . وبدل إرسال 100 ملف ، توضع هذه

الملفات في ملف واحد (أرشيف) ، وبعد ذلك تُكثف بواسطة البرنامج compress الذي يقلل حجم

الملف .

        وهنا نشرح كيفية عمل الأرشيف أولاً:

 

 

$ tar cvf script.tar script    دليل ما script هنا

a script/sendx 1 blocks

a script/sonds 1 blocks

a script/vws     2 blocks

a script/ast      1 blocks

 

        قام tar بتخزين جميع الملفات الموجودة في الدليل script في ملف واحد

أسميناهscript.tar  .

 

        إضافات tar :

 

 = c creat            أنشىء ملفاً جديداً

 = r   write          اكتب في ملف موجود (إضافة)

 = v   verbose       أفصح عمّا فعلته ، وبدون v لاتظهر الملفات المؤرشفة.

 = f   file            أرسلْ كل الملفات إلى filename (ودونها يرسل tar                  

        الأرشيف إلى وحدة أشرطة التخزين)

 = x                  إعادة الملفات إلى حالتها الأصلية من ملف الأرشيف

 = t                   إظهار مابداخل ملف الأرشيف من ملفات.

 

        وهنا بعض الأمثلة :

 

$ tar rvf script.tar udat

 

a udat 3 blocks

 

        أضفنا الملف udar إلى ملف الأرشيف script.tar بواسطة r .

 

 

$ tar xvf script.tar

x script/sendx¡ 38 Bytes¡ 1 tape blocks

x script/send2¡ 49 Bytes¡ 1 tape blocks

x script/rws¡      541 Bytes¡ 2 tape blocks

x script/ast¡      28   Bytes¡ 1 tape blocks

x udat¡ 1038 Bytes¡ 3 tape blocks

 

        وهنا حَوّلنا الأرشيف  script.tar  إلى ملفات ، وأعدناها إلى وضعها الأصلي بواسطة x .

 

$ tar  tvf  script.tar

rwxr-x---  13014/100   39    0      Aug   24   22.22  1993 script/

rwxr-x---  13014/100   39    38     Aug   24   21.14  1993 script/sendx

rwxr-x---  13014/13     46            Aug   24   12.15  1993 script/sendz

rwxr-x---  13014/13    54             Aug   24   23.12  1993 script/rws

rwxr-x--x 13014/13      28    Aug   24   12.18  1993 script/ast

rw-rw----  13014/13   1038    Aug   24   20.13  1993 udat

الشكل 52

 

        وهنا تظهر الملفات المخزنة في ملف الأرشيف من اليسار إلى اليمين : الحقوق و UID  ¡

وعدد ال Bytes ¡ والشهر ، واليوم ، والساعة ، والعام ، والاسم مع الدليل .

9.8  تكثيف الملفات

 

        تكثيف الملفات من أهم الأعمال التي يقوم بها مدير النظام أو المسؤول عن تخزين

المعلومات ، وكذلك إرسالها عبر الشبكات المحلية والدولية، لأن التكثيف يوفر من سعة

أسطوانات و أشرطة التخزين ، ويوفر رسوم إرسال المعلومات عبر الشبكات. وفي أغلب الأحيان

تُخزن ملفات تحتوي على معلومات حروف مثل البيانات ، و الرسائل ، والعقود التجارية ، إلخ...

 

         ويتواجد في هذه الملفات كثيرٌ من الكلمات والعبارات التي يتكرر ذكرها ، وبرنامج 

compress يجمع هذه المعلومات - التي يعاد ذكرها - في رموز معينة يفهمها البرنامج . وفي

أغلب الأحيان يُقلّص عدد ال  Bytes  في حجم الملف إلى النصف أو الربع بواسطة compress .

ولايصلح استعمال الملفات المكثفة إلا بعد فك تكثيفها ، وإعادتها إلى حالتها الأصلية .

 

        وهاك مثالاً على ذلك:

 

$ ls -al text*

-rw-r--r--     1      ziad    233353        May 10     10:26 text.Z

$ compress   text.Z

$ ls -al text*

-rw-r--r--     1      ziad    52895       May   10     10:26 text.Z

 

        هنا نرى أن الملف text.Z كان حجمه233353 (Bytes)  حرفاً ، وأصبح بعد التكثيف 52895

حرفاً ، أي صار أقلَّ من ربع حجمه الأصلي ، وهذا يوفر- طبعا- توفيراً  ملموساً في جميع المجالات.

 

هذا ، ونستطيع إعادة الملف text إلى وضعه الأصلي بواسطة :

 

$ compress -d text                   (decompress) -d لاتنسَ الإضافة

 

        وهناك برامج أُخرى شبيهة القدرة ، وظيفتها تكثيف الملفات مثل :  zip¡ lharc ¡ zoo¡

freeze .

 

10.8  برامج أُخرى مساعدة

 

        البرنامج sed محرر ضعيف القدرات ، نغير بواسطته بعض الكلمات في ملف ما ، كمكان

الميلاد في الملف   adr  من  Berlin  إلى Dortmund  .

 

مثلاً:

$ sed s/Berlin/Dortmmund/ adr

 

        يَظهَرُ لنا الملف كالسابق ولكن مع  Dortmund بدل Berlin ¡ ويجب استعمال < إذا أردنا

وضع الإخراج في ملف آخر.