نظام التشغيل يونيكس
الطبعة الأولى
تأليف د. زياد ديب يوسف
written by
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
1 this is my 2. file
2
3 this is a File whithout No.
4
$ cat -b file
1 this is my 2. file
2 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 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 -igncr 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/b>
نلاحظ أن البرنامج 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
3 ls
4 cp letter1 ~ahmad
5 cd ~ahmad
6 ls
7 pwd
8 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 ¡ ويجب استعمال < إذا أردنا
وضع الإخراج في ملف آخر.
ويمكن تحديد التغيير في السطور من 1 إلى 4 :
$ sed 1¡4s/Berlin/Dortmund/ adr
.
ويمكن استعمال الإضافةq وd :
$sed 5q adr
يظهر أول 5 أسطر .
$ sed 4¡6d adr
إظهار السطور جميعها ماعدا 4 إلى 6 .
والبرنامج awkيقرأ السطور من ملف معين ، ويستعمل الإضافات كأوامر ، ويمكن
استعماله لبرمجة بسيطة ، مثل استعمال اللغات الدارجة C أو BASIC وغيرها . وإذا
استعملناه لقراءة الملفات فقط ، يكون شبيهاً إلى حد بعيد بالبرنامج grep ¡ ولكنَّ الإخراج
يكون أدقَّ وأوضحَ :
$ awk /Berlin/ adr
تظهر لك السطور التي تحتوي Berlin فقط .
$ awk -F: '{ $7 > 60 }' adr
وهنا التوضيح (-F:) أن (:) هي الفاصل مابين المجالات . وأن (7$) هي المجال السابع
الذي يجب أن يكون أكثرمن 60 (60<) . وهكذا يظهر لنا كل الاشخاص المولودين بعد عام 60 .
وهنا طريقة أخرى (الشكل 53):
$ awk -F: '{ print "Name: " ¡ $1¡ $2 }' adr
Name: Susanne Krieger
Name: Udo Meier
Name: Otto Schneider
Name: Kristina Weber
Name: Michael Kolbe
Name: David Goldstein
Name: Hannelore Becker
Name: Jens Hofmeister
Name: Anneliese Zimmermann
Name: Thomas Meier
الشكل 53
في هذه الحالة يجب وضع الأوامر الإضافية مابين أقواس الزوايا [ ] مثل print
وتوابعها ، ووضع الإظهار الإضافي مثل "Name" مابين مرفوعات مزدوجة . وجميعُ الأوامر الإضافية
وتوابعها تُحتَضَن بين مرفوعات ' ' عادية.
وللتوضيح (الشكل 53) : كما ذكرنا أن الإضافة (-F:) تفصح علامة الفصل (:) ، و print
"Name :" هي أظهر Name : ¡ و بعدها أظهر المجالين 2$ 1$ وهما الاسم الأول ، واسم العائلة
من الملف adr .
وإذا وضعنا /Berlin/ قبل print :
$ awk -F: '/Berlin/ { print "Name:"¡$1¡$2' adr
فإنه تظهر لنا فقط السطور التي تحتوي Berlin في الوضع السابق .
وهنا مثال أكثر تعقيداً للإشارة إلى قدرة الحساب :
$ awk ' { n=nt$7} END { print "Sum:"¡n}' adr
وهذا يحسب الأعوام ، ويظهر لنا المجموع (n).
الفصل التاسع
البريد الإلكتروني
1.9 الاتصال المباشر
2.9 البريد الإلكتروني electronic mail
الفصل التاسع
البريد الإلكتروني
بما أن يونيكس نظام متعدد المستخدِمين (multiuser-system) فإنَّ من السهل إجراءَ
عملية اتصال مابين مستخدِميه ، يستطيعون بواسطتها إرسال الأخبار والأسئلة والردَّ عليها . ومن
الممكن إيضاً إرسال واستقبال ملفات بأحجام مختلفة ، تحتوي على المعلومات المختلفة ،
كالرسائل ، والإخبار من نظام إلى آخر. وهناك نوعان من هذه الاتصالات : النوع الأول هو الاتصال
المباشر ، والثاني هو البريد الإلكتروني وهو الاتصال غير المباشر .
1.9 الاتصال المباشر
هناك عدة طرق للاتصال المباشر نبين بعضها فيما يلي:
بواسطة البرنامج write ، واسم المستخدِم المعني (شرط أن يكون مرتبطاً بالشبكة أو
النظام) ، نستطيع إرسال الأخبار إليه في حال تواجده بموقعه، أي أن يكون مطرافه عاملاً. ويَكتِبُ
البرنامج write الأخبار على شاشة المُرسَـل إليه مباشرة دون العبث بموجوداتها ، ويستطيع
مستقبل الخبر إعادة بناء شاشته باستعمال Ctrl -L بعد قراءة ما أُرسل إليه. وعندما ينتهي
المُرسِـل من الكتابة ينهي العملَ في البرنامج write بواسطة Ctrl -D .
وفي حال الإرسال والاستقبال للطرفين (أي أن يعمل اثنان بواسطة برنامجwrite ) ¡
يستطيع هؤلاء المحادثة كأنما يتحدثون هاتفياً ولكن بالكتابة .
في بعض الحالات يكون لدى أحد المستخدِمين مطراف متعدد النوافذ ، وهذه النوافذ
يُعطيها النظام أسماء مثل ttyp1 ...إلخ. وفي حال وجود عدة نوافذ في مطراف واحد يجب إعلام
write إلى أي مطراف ( نافذة) نريد إرسال الأخبار .
وقبل البدء في المراسلات يجب التأكد - أولاً - من وجود المستخدِمين العاملين حالياً في
النظام :
$ who
ziad ttyp0 May 7 09:40.
max ttyp1 May 7 10:15
mazen ttyp2 May 7 11:20
root console Feb 7 08:14
الشكل 54
هؤلاء المستخدِمون يعملون حالياً على الجهاز. وبعد التأكد نباشر الإرسال :
$ write max
You are connected to "max at jordsys ttyp1".
Hay Max !
I need a cup of coffee. هنا تكتب الخبر
Ziad. من
Ctrl-D write نهاية البرنامج
ونستعمل الأمر هكذا في حال تعدد النوافذ :
$ write max ttyp1
ويُرسَـل الخبر للمستخدِم max إلى النافذة (المطراف)ttyp1 مباشرة.
يفضل استعمال who قبل كل عملية إرسال مباشِرة ، للتأكد من وجود العاملين في
النظام. وإذا أراد أحد المستخدِمين الحيلولةَ دون "إزعاجه" ، فيستطيع أن يحجب ذلك بواسطة
الأمر mesg n ¡ ويعيد السماح بالوصول إليه بواسطة mesg y ¡ وذلك في حال حصول المستخدِم
على الصلاحية بأن يغير مواصفات مطرافه بواسطة mesg .
ونستطيع رؤية صلاحية التغيير هكذا:
$ LS -al /dev/ttyp1
crwx-w---- 1 max tty 20 6 May 7 13:05 /dev/ttyp1
نرى هناأنَّ في المجموعة الثانية من الحقوق يوجد w ¡ وهذا يعني أن المطراف ليس
محجوباً. وفي حالة حجبه نجد (لا حقوق -) بدل (حقوق w) .
والبرنامجان phone و talk يُستخدمان أيضاً للاتصال المباشر ، ولديهما ميزات أكثر .
ومن ميزات البرنامج talkأنه يقسم الشاشة إلى قسمين: قسم إرسال وقسم استقبال ، ويرى
المستقبِلُ المعلومات القادمة حرفاً حرفاً . ويُستَعمَل هذان البرنامجان للاتصال عبر الشبكات
الخارجية ، وسنذكر مزيداً عن الشبكات لاحقاً .
$ talk max
في هذه الحالة تنقسم الشاشة إلى نصفين ، ويخبرنا النظام بأنه ينتظر الطرف الآخر (
الذي نريد التكلم معه ) مثلاً max ، ، ويظهرعلى شاشتنا [waiting for your party respond]
. وكذلك الحال من خلال البرنامج talk أيضاً . وعلى شاشة max يظهر مايلي :
Message from Talk-Daemon@jordsys at 10:15
talk: connection requested by ziad@jordsys
talk: respond with: talk ziad@jordsys
ويجب على max الآن أن يعمل بواسطة البرنامج talk لتنقسم شاشته إلى قسمين أيضاً .
في القسم الأعلى نكتب مانريد إرساله ، وفي ذات اللحظة يُكتب ذلك في شاشة الآخر في القسم
الأسفل . ولدى الاتصال الأول بين الطرفين يظهر في أعلى الشاشة[connection established ] ،
أي أن الاتصال قد تم . وبعد انتهاء العمل يستطيع أحد الاثنين أن ينهيَ العمل بواسطة Ctrl-C
اوDel .انقسام الشاشة :
_
الشكل 55
2.9 البريد الإلكتروني electronic mail
نظام البريد الإلكتروني يعمل كالبريد المتعارف عليه ، والمعلومات التي تُرسَـل
بواسطته تكون متنوعة ، مثل ملفات البيانات والصور والموسيقى ...إلخ . وعملية الإرسال تُطبَّق
بشكل ملف يوضع باسم المستخدِم في الدليل /usr/spool/mail ، ويكون اسم الملف مطابقاً لاسم
المستخدِم (user) . والإرسالُ البريدي لايظهر على الشاشة مباشرة كالإرسال بواسطة write و
talk ، ولكنه يُخزن في ملف البريد . وليس من الضروري أن يكون المرسَـل إليه موجوداً في
النظام في وقت وصول البريد الإلكتروني إليه ، لأنه سيجد بريده لاحقاً في ملف صندوق البريد .
بواسطة البرنامج mail نستطيع إرسال وقراءة البريد . وفي بعض الأحيان يكون اسم
البرنامج mailx . وهناك أيضاً البرنامج elm (electronic mail) وهذا الأخير لايحتويه النظام
يونيكس في العادة ، ويمكن الحصول عليه وإدخاله إلى النظام دون صعوبة أو تكاليف . وهناك
برامجُ مساعدةٌ لإرسال واستقبال البريد مثل sendmail أو smil ، وهي برامج إضافية لإرسال
المعلومات عبر الشبكة الدولية أو المحلية (WAN & LAN) . وهناك نوعان من برنامج mail :
Systen V و BSD. وطريقة عمل هذه البرامج تكون إلى حد بعيد مطابقة لبعضها.
طريقة إرسال البريد:
إن طريقة إرسال البريد تشبه طريقة إرسال الأخبار المباشرة بواسطة write . وإرسالُ
البريد بواسطة mail يتمّ بإدخال الأمر mail واسم المستخدِم، وبعد ذلك تُكتب الرسائل التي
تُوجه إليه :
$ mail max
Subject: catalogue of your range عنوان الرسالة
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
showed me same gamples of your new lines.
I should be grateful if you would send me a catalogue
of your range of christmas toys...............................
Yours faithfully ¡ Ziad Yousef
Ctrl-D هنا ننهي العمل
Cc: mazen
بعد Cc:يُكتب اسم مستخدِم آخر لإرسال صورة إليه عن الرسالة ، ويمكن إضافة أسماء
عدد من المستخدِمين بفصلهم بواسطة الفاصلة (mazen¡ahmad¡...........) .
أثناء كتابة الرسالة يكون من المحتمل أن نوقف العمل بواسطة Ctrl-C أو Del مرتين
، وبعد ذلك يُخزِّن النظام محتوى هذه الرسالة في ملف يسمى (الرسالة الميتة) dead.letter في
دليل المستخدِم الخاص :
$ mail max
Subject: catalogue of your range
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
Ctrl -C
(Interrupt ... one more to kill letter)
Ctrl-C
(Last Interrupt ... letter saved in dead.letter)
$ cat dead.letter
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
الشكل 56
و نظراً لعدم استطاعتنا تصحيحَ ماكُتب خطأً ، فإنَّ من المستحسن استعمالَ المحرر لكتابة
الرسائل ، وإدخالَها بعد ذلك لإرسالها بواسطة mail .
ولنفترض أننا كتبنا رسالة بواسطة المحرر vi باسم letter فإننا - في هذه الحالة -
نُدخلها هكذا :
$ mail max <letter
ولايكون هناك عنوان للموضوع (subject) ، ويُرسَـل البريد إلىmax ، ويُؤخذ المحتوى من
الملف letter .
أثناء العمل في برنامج mail التابع لنظام BSD نستطيع الدخول إلى vi مباشرةً ،
وتحريرَ الرسالة ثم إرسالَها ، وذلك أثناء عملية الإرسال :
$ mail max
subject: ORDER!
Dear Max
~r filename vi ندخل إلى البرنامج
[هنا نكتب ما نريد إرساله ]
.
[ vi إنهاء الكتابة في ]
Ctrl-D
Cc:
وهنا طريقة لإرسال الملفات البينرية ( البرامج المجمَّعة ) بأن نحولَها أولاً إلى أحرف
بواسطة أحد برامج التحليل ، ونرسلَها بواسطة الأنبوب (|) إلى البرنامج mail .
لنفترض أنَّ لدينا ملفاً بينرياً يسمى data ¡ ونريد إرساله إلى المستخدِم max :
$ uuencode data data.code|mail max
والملف data يرسَـلُ مع التحليل في الملف data.code ¡ ويحصل max على الملف مع
معلومات إضافية في أول وآخر الملف .
ويجب على max أن يعيد الملف إلى حالته الطبيعية بواسطة uudecode ¡ بعد إزالة
المعلومات المتعلقة بالبريد الإلكتروني:
$ uudecode data data.code
$ uuencode data data.code هكذا نُظهر المحتوى
الاطلاع على البريد القادم والمخزن :
عندما يدخل المستخدِم إلى النظام بواسطة login ويكون له بريد في ملفه ، تظهر
المعلومات You have new mail أو You have mail ¡ وذلك قبل ظهور المحث وإشارة الغلاف $ أو
% . وإذا أردنا في هذه الحالة قراءة البريد فما علينا إلا استعمال الأمر mail دون إضافات ،
ويظهر البريد على شكل لائحة بيانات للبريد الوارد ، مع اسم المُرسِل ، وتاريخ الإرسال ، وحجم
وموضوع الرسائل .
Login: ziad
Password: XXXXXXXXX
You have new mail.
Mail version 5.2+L. Type ? for help.
"/usr/spool/mail/ziad": 2 messages 2 new
>N 1 max Thu May 28 11:50 18/492 "catalogue"
N 1 ziad Wed May 29 10:54 16/136 "coffee"
&
الشكل 57
وهنا نرى لائحة البريد ، ويُظهر لنا البرنامج mail الرسائل - واحدةً، واحدةً - في
حال ضغط المفتاح Returm :
& <Return>
Message 1 (of 2)
From mazen Thu May 28 11:50 1993
Date: Thu May 28 92 11:50 MES
From: mazen (Mazen Yousef)
To: max
Subject: catalogue of your range
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
showed me same gamples of your new lines.
I should be grateful if you would send me a catalogue
of your range of christmas toys...............................
Yours faithfully ¡ Ziad Yousef
(EOF)
& <Return>
Message 1 (of 2)
From mazen Wed May 29 10:54 1993
Date: Thu May 29 92 10:54 MES
From: ziad (Ziad Yousef)
To: max
Subject: coffee
Hay Max !
I need a cup of coffee.
Ziad.
(EOF)
&
الشكل 58
ونستطيع إظهار الرسائل السابقة بإدخال رقم الرسالة (message) بعد الإشارة & ،
ليعود البرنامج إلى إظهار الرسالة ( الرسالة رقم 1 مثلا ) . ولإنهاء العمل نُدخل q أو x بعد
الإشارة & . وإذا خرجنا بواسطة q يُحذف البريدُ من وحدة التخزين ، وبواسطة x يبقى البريد
مخزناً ، ونستطيع قراءته مرةً أُخرى بواسطة mail . وفي حال إدخال q تُحذف الرسالةُ من صندوق
البريد ، وتتواجد بعد ذلك في الملف mbox في دليل المستخدِم .
& q
Held 1 message in /usr/spool/mail/ziad
Saved 1 message in mbox
هنا وضع البرنامج mail رسالةً في الملف mbox ¡ وحذفَ رسالة من صندوق البريد ziad .
ومن المستطاع حذفُ إحدى الرسائل بواسطة الإضافة d ورقم الرسالة (& d1) . وإذا خرجنا بعد
ذلك بواسطة q تحذفُ الرسالة نهائياً.
وإذا أردنا رؤية لائحة الرسائل مرة أُخرى نُدخل h :
& h
1 Max Thu Mag 15 12:10....................
>2...................
&
وباستخدام حرف m بعد & مع إضافة اسم أحد المستخدِمين ، نستطيع إرسال بريد جديد :
& m max
بعد ذلك يظهر لنا مكان الموضوع (subject) ¡ وبعدها نكتب الرسالة كالمعتاد ...إلخ
، وننهي العمل
ب Ctrl
-D
ومن الممكن الرد على الرسالة التي قرأناها أخيراً باستعمال (reply=r) & r :
& r
To: max
Subject : Re : Order
.
.
.Ctrl-D
Cc:
&
ويستعمل mail الموضوع ذاته بكتابةSubject : Re : بدل الموضوع . وجميع إمكانات
البرنامج mail نستطيع رؤيتها باستعمال ? & (أو & h في بعض الأحيان وحسب نوعية برنامج
mail) .
البرنامج elm:
وهناك أيضاً البرنامج elm (إذا كان موجوداً بالنظام) ، وهو إلى حد بعيد يشبه mail
في الإمكانات ، ولكنه أفضل للاستعمال ، ونحن ننصح باستعماله بديلاً عنه .
لدى استعمالنا البرنامج elm أول مرة ، يسألنا البرنامج عن إنشاء دليلين جديدين (
mail & elm ) في دليل المستخدِم الخاص (Homedirectry) ، لأن elm بحاجة إلى هذين الدليلين
. ولذلك يجب الإجابة على سؤال elm بعمل الدليلين ب y . ودليلُ elm يحتوي قوائمَ وقياساتٍ
يحتاجها البرنامج elm ، وبه تُخزن الرسائل القادمة .
بعد عمل الأدلة تظهر لك نافذة elm :
_
الشكل 59
تحرك العارضة باستعمال موجه المحث _SYMBOL 175 \f "Symbol"__SYMBOL 173 \f
"Symbol"_ للأسفل والأعلى ، ولقراءة البريد Return . وفي أسفل النافذة الرئيسة نجد الأحرف
التي تُستعمل لوظائف مختلفة :
d = delite احذف
u = undelete ارفع الحذف
m = mail a message أرسل رسالة
r = reply إجابة على الرسالة
f = forward إرسال نسخة إلى أحد المستخدِمين
q = quit نهاية العمل بالبرنامج
z = help معلومات مساعدة
s = save تخزين في الملف
_
الشكل 60
في أسفل هذه النافذة نجد " i " ¡ وبواسطتها نعود إلى النافذة الرئيسة .
_
الشكل 61
ولإرسال الرسائل وللإجابة عليها مباشرة ، يُشغِّل البرنامج elm المحررَ vi تلقائياً :
_
الشكل 62
هنا نجيب على الرسالة بكتابة كل جواب في أسفل السؤال . والأسئلة تظهر بعلامة < على
الشاشة ، ونحن في هذه الحالة نضيف الجواب إليها . وفي النهاية نُدخل حرف (send) s لإرسال
الرسالة أو عدم الإرسال (forget) f . إنهاء العمل ب elm يكون بمثل إنهاء العمل في البرنامج
mail كما ذكرنا في السابق : الحرف (quit) q يحذف البريد الذي قُرئ ، وحرف x لا يَحذف البريد
، على أي حال يسألنا elm إذا أردنا ذلك ، والإجابة تكون بواسطة y أو n . وحذف البريد
بواسطة d يتم كما ذكرنا في شرحنا برنامجَ mail .
الفصل العاشر
شبكات الاتصال
1.10 معلومات عامة
2.10 مكوَّنات الارتباط الإلكتروني ISO/OSI
3.10 مقدمة العنوان الإلكتروني Network Protocol
4.10 العنوان الإلكتروني
5.10 برامج الاتصال الإلكتروني
6.10 برامج أخرى للاتصال البعيد
7.10 برامج متطورة للعمل من خلال الشبكات
8.10 الشبكة العالمية إنترنت Internet
الفصل العاشر
شبكات الاتصال
_
_
_
الشكل 63
1.10 معلومات عامة
في السنوات الأخيرة ازدادت أهمية شبكات الاتصال network المستخدِمة لربط أنظمة
الحاسوب ، لكونها أداة جيدة للاستفادة من ارتباط الحواسب المتواجدة لدى الأشخاص والشركات
والمؤسسات ، وللاستفادة أيضاً من المعلومات الموزعة لديهم ، وللاستعمال التجاري والصناعي
لربط الفروع العديدة للشركات الكبيرة ، ولتكون المعلومات المركزية دائماً في متناول اليد .
وهناك عدة أنواع من وصلات الارتباط adapter ، نذكر منها: Ethernet و Arcnet و Token-Ring-
Adapter.
وهناك نوعان من الشبكات LAN و WAN :
LAN = local area network الشبكة المحلية ، وهي شبكة ارتباط محلي، أي أن الأجهزة
المرتبطة تتواجد في مكان واحد (في عمارة أو مكتب ...إلخ) . ومن أكثرها انتشاراً الشبكة
الدائرية Token Ring ، أو المستقيمة Ethernet ، أو المتشعبة Arcnet . وإذا رُبِطَت إحدى
هذه الشبكات بشبكات بعيدة المكان بواسطة خط الهاتف أوخطوط أُخرى خاصة بهذا المجال ، فإنها
تصبح شبكاتٍ بعيدةَ المدى ، تربط المدن والبلاد والقارات وتسمى :
wide erea network= WAN
_
الشبكة بعيدة المدى WAN
من ميزات الشبكات : استعمال الطابعة من قبل عدد من المستخدِمين الموجودين في مواقع
مختلفة ، وإرسال البريد الإلكتروني في ثوان ¡ وإصلاح العطل في أحد البرامج دون الذهاب إلى
موقع الحاسوب ، واستخدام المعلومات الجماعية ، وتبادل المعلومات من قِبل الجامعات ،
والمؤسسات العلمية، والصحفية ، والصناعية ، والإدارية ، والعسكرية ...إلخ .
وبواسطة الاشتراك في الشبكة العالمية internet ¡ نستطيع الحصول على المعلومات من
بنوك المعلومات الموجودة في جميع أنحاء العالم خلال لحظات ، بدل إرسالها أواستعادتها
بواسطة البريد العادي ، الذي يستغرق أياماً أو أسابيعَ .
وإرسال المعلومات بواسطة الشبكة يتم غالباً بالطرد (رزمة) . وتُنقل الطرود عبر
الشبكات بواسطة العنوان الإلكتروني (adress) ¡ الذي يحتوي عناوين المُرسِل والمُرسَل إليه .
وتعتمد سرعة نقل الطرود على نوعية الشبكة وسرعة نقلها للمعلومات .
2.10 مكونات الارتباط الإلكتروني ISO/OSI
هناك معايير متفق عليها عالمياً لنقل المعلومات عبر الشبكات ، وضعتها المؤسسة
العالمية للمعايير والمقاييس = ISO Internatioal Standards Organisation ، واسم هذا
المعيار OSI = Open System Interconnection . والمقصود من ذلك هو الإشارة إلى مستويات أو
طبقات متعارف عليها لنقل المعلومات عبر الشبكات .
وهذه المستويات لها وظائف مختلفة ، وسنذكرالمستويات (الطبقات) هنا من الأسفل إلى
الأعلى :
المستوى الطبيعي physical layer ويشار به إلى نوعية الأسلاك
والخطوط وحجم الطرد وفحص الأغلاط أثناء
نقل المعلومات Hardware=
المستوى الشبكي network layer ويهتم بنقل الطرود من المُرسِل إلى
المُرسَـل إليه ، واختيار الطريق المناسب للوصول
إلى الهدف = Software
مستوى العمليات processing layer تحليل وإظهار المعلومات
Software=
كانت هذه لمحةً عن مستويات نقل المعلومات فقط . أما شرحها شرحاً وافياً ، فيحتاج
كتاباً كاملاً ، لذلك نكتفي بهذاالقدر .
3.10 مقدمة العنوان الإلكتروني Network Protocol
لقداعتمد نظام يونيكس على العنوان الإلكتروني الذي يحتوي على المقدمة TCP/IP
protocol في نقل المعلومات بين المطراف والحاسوب . ونستطيع تشبيه المقدمة TCP/IP بغلاف
رسالة البريد العادية ، المتعارف عليه من قِبل مؤسسات البريد في العالم ، بأن يكون مربعاً
أو مستطيلاً تلصق عليه الطوابع ، و يوضع العنوانُ ، وعنوان المُرسِل في مكان معين ...إلخ .
وهنا توضيح للأحرف TCP/IP:
TCP = Transmission Control Protocol
IP = Internet Protocol
وأنظمة يونيكس تحتوي البرامج الخاصة بنقل المعلومات بواسطة هذه المقدمة TCP/IP .
ويوجد أيضاً عدد من المقدمات لنقل المعلومات عبر الشبكات ، ومنها :
IPX/SPX Novell Network Protocol
SNA Systems Network Architecture from IBM
LAT Local Aerea Transport
SNMP Simple Management Network Protocol
CSMA/CD Carrier sense multiple cess/collision
detection
for Ethernet Adapter
TPP Token Passing Protocol (for Arcnet and Token-Ring)
SLIP Serial Line Internet Protocol
UUCP Unix - to - Unix - Copy
ملاحظة : UUCP نظام قديم لنقل المعلومات مابين الأجهزة في نظام يونيكس ، وهو لايزال
مستعملاً في بعض الشبكات الخاصة . وتستعمل الأَخرى في الشبكات مختلفة التصنيع والاستعمال .
4.10 العنوان الإلكتروني
عناوين الأنظمة المتعارف عليها:
لكل حاسوب عنوان إلكتروني متعارف عليه مكون من Byte 4 ، ويكون على هذا الشكل:
180.70.40.16 ، وكل Byte يكون مفصولاً بنقطة . وهذه العناوين قابلةٌ للتغيير ، بعكس
الوصيلة (Adapter) التي تُستعمل لربط الأجهزة المختلفة مع الحاسوب والتي لا يُغير عنوانها .
وللعمل عبر الشبكة العالمية Internet نحتاج إلى عنوان متعارف عليه من قِبل إدارة
هذه الشبكة في الولايات المتحدة . ونحصل عليه من هناك بواسطة طلب يُقدم لهذه المؤسسة ...
العنوان أو رقم الشبكة في نظام الشبكة العالمية Internet :
جميع الأرقام الموزعة على المشتركين تتكَون من Byte 4 ثابتة المعنى ، ويختلف
الترقيم حسب الجهة الحاصلة عليها. ومن أهم هذه الأرقام ال Byte الأول . وتتوزع كالتالي :
من 1 إلى 126 (001.00.00.00) إلى (126.00.00.00) توضح الجهة المعنية ، مثل NASA
وكالة الفضاء الأمريكية ، أو وزارة الدفاع ، أو أي مؤسسة في الولايات المتحدة ...إلخ .
والأرقام الثلاثة التابعة 00.00.00 تكون حرةَ الترقيم من قِبل تلك المؤسسة .
الأرقام من 128.01.00.00 إلى 191.99.00.00 موزعة على الشركات ، والمؤسسات الأخرى
الكبرى ، كالجامعات . والشركات الصناعية الكبرى ، مثل (General Motors) GM ...إلخ . وهذا
العنوان مكون من (128.15.??.?? ) Byte 2 ¡ والأرقامُ التابعة Byte 2 الأخرى (??.??) تكون
حرة الترقيم من قِبل تلك الجهة .
الرقم من 192.01.01.00 إلى 999.99.99.00 مخصص للشركات الصغيرة والأشخاص ، ويتكون
من Byte 3¡ والرقم (Byte) الأخير ?? (192.12.4.??) يكون حُرَّ الترقيم من قِبل تلك الجهة .
أما الرقم 127.0.0.1 0 - وهو رقم غير موزع - فمعناه الحاسوب المتواجد ، أي الذي
نعمل به في حال عدم الاشتراك في الشبكة العالمية ... ولدى العمل بواسطة شبكة (LAN) داخليةٍ
، يكون هذا الرقم هو عنوانَ النظام . وفي حال عدم الاشتراك في الشبكة العالمية ، نستطيع أن
نُكَون الأرقام كما نريد ، دون الانتباه إلى الترقيم المُنظم .
في الملف /etc/hosts نستطيع وضع الأرقام الشبكية adress ¡ وأسماء الحواسب
systemname التابعة لتسهيل العمل . وباستطاعتنا - بعد تنظيم ذلك ، وفي حال الاتصال بهذه
الحواسب البعيدة - إدخالُ الأسماء فقط ، ويجب أولا أن ننظم محتويات هذا الملف . ومحتوى
/est/hosts يكون على النحو التالي (مثال) :
180.70.40.01 gnom master
180.70.40.02 snoopy
180.70.40.16 kaktus
180.70.074.4 daphne
192.12.04.02 abakus
112.11.15.44 nasausa
5.10 برامج الاتصال الإلكتروني
والاتصال بالحواسب البعيدة يكون بواسطة البرنامج telnet أو ftp على النحو التالي :
أولاً telnet :
$ telnet abakus
Trying 192.12 4.2. . . محاولة الاتصال
Connected to 192.12.4.2 الاتصال حصل الآن
Escape Character is '^'['. (Ctrl-T) - Ctrl>-[ علامة الانقطاع
SunOs UNIX (abakus) نظام التشغيل واسم الحاسوب
login:ziad الدخول
password كلمة المرور
Last login: Thu Mar 15 12:20 from 180.70.40.2 معلومات
. . . (Bourne-Shell) يشغل الغلاف هناك
abakus$
«192.12.4.2 رقم abakusهنا نكون قد وصلنا إلى الحاسوب»
ونستطيع الآن العمل "هناك" في ذلك الحاسوب كأنما نعمل على حاسوبنا "هنا" ، حتى لو
كان الحاسوب موجوداً في الولايات المتحدة ، أو أوروبا ، أو أي مكان في العالم .
ونخرج من الارتباط هكذا :
$ logout
connection closed by foreign host.
ونحن لا نستطيع نقل المعلومات من حاسوب الى آخر بواسطة telnet ¡ لذلك نستعمل
البرنامج ftp لنقل الملفات عبر الشبكة . ولدى العمل بواسطة ftp لا نستعمل أحد الأغلفة
(Shell) هناك ، لأن ftp يقوم بالعمل على الحاسوب المُتصَل به كغلاف ، ويظهر المحث بشكل ftp>
بدلا من $ .
الدخول إلى الحاسوب البعيد :
$ ftp abakus
Connected to abakus.
220 abakus FTP server ready.
Name Cabakus:ziad):ziad ziad هنا ندخل الاسم
33 password required required for ziad
password: هنا ندخل كلمة المرور
230 User ziad logged in
ftp> هنا يظهر المحث .
الخروج من الحاسوب البعيد :
ftp> quit quit الخروج بواسطة
221 Goodbye
$_ محث غلاف حاسوبنا
سرد الملفات والأدلة بواسطة ftp :
بعد الدخول بواسطة ftp إلى الحاسوب البعيد (كما ذكرنا في الأعلى) ، نستطيع استعمال
أوامر النظام وكأننا نعمل هناك .
ftp> pwd
257 "/usr/meikel" is current directory.
ftp> dir
200 PORT command successfu1.
150 Opening ASCII mode data connection for /bin/ls.
total 8
-rwx------ 1 meikel user 126 Mar 31 07:59 .cshrc
-rw------- 1 meikel user 405 Mar 31 07:59 .login
drwxr-xr-x 2 meikel user 384 Mar 31 08:14 c
drwx------ 2 meikel user 384 Mar 31 07:59 Mail
226 Transfer complete.
304 bytes received in 0.68 seconds (o.44 kbytes/s)
ftp> ls
200 PORT commandsuccessful.
150 Opening ASCII mode data connection for file list
.cshrc
.login
c
226 Transfer complete.
25 bytes received in 0.02 seconds (1.22 kbytes/s)
ftp> cd c
250 CWD command successful.
ftp> dir *.c
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
-rw-r--r-- 1 meikel user 10602 Mar 31 08:01 adr.c
226 Transfer comlete.
remote: *.c
60 bytes received in 0.12 seconds ( 0.49 kbytes/s )
ftp>
الشكل 64
بعد إدخال أي أمر يُجيب البرنامج ، ويعلمنا عن كل تقدم في عملية الإرسال والاستقبال
.
نقل الملفات بين الحواسب بواسطة ftp :
بواسطة الأوامر get (اجلب) و put (أرسل أو انسخ) نستطيع جلب وإرسال الملفات من
وإلى الحواسب بواسطة الشبكات . وإذا أردنا جلب أو إرسال عدة ملفات نستعمل الأوامر mget و
mput ، وبواسطتها نستطيع استعمال النجمة * وعلامة الاستفهام ? كبدائل لأسماء الملفات كما
ذكرنا في السابق . ولدى إرسال أو جلب الملفات يحث البرنامج لتأكيد النقل . ونستطيع تجاهل
الحث بواسطة الأمر prompt off ، وإعادته الى عمله بواسطة prompt on . وحالة حث الإثبات هذه
تنفع في تجنب نسخ أحد الملفات التي تحمل الاسم نفسه .
نوعية نقل الملفات :
يتم النقل بالحروف (ASCII) ¡ وهي الحالة الطبيعية للنقل ، وفيها ينتهي كل سطر من الملف
بالإشارة (ASCII 10) Linefeed (انظر ASCII-Code) ¡ وللمطابقة يُحَوِّل يونيكس كل (Linefeed
Carriae Return) إلى Linefeed فقط ، وبهذه تكون المطابقة تامة لجميع الملفات المنقولة .
وهذا يختلف عن حالة السطور في نظام MS-DOS ، الذي ينهي السطور بالإشارة ASCII 13 ، وهي
Linfeed Carriag Return .
في حال نقل الملفات غير ASCII ، أي نقل الملفات البينرية (Binaryfiles) (برامج أو
ملفات مكثفة أو صور محولة إلى رموز) ، يجب ضبط وتأكيد هذه الحالة بواسطة إدخال الأمرbinary
أو bin ، وبعد ذلك يكون برنامج النقل ftp في حالة نقل بينري . ونستطيع تغيير هذه الحالة
إلى حالة نقل الحروف ASCII بواسطة الأمر ascii . ويجب الانتباه إلى التغيير مابين الحالتين
binary و ascii قبل القيام بعملية النقل .
ونحن ننصح بالأخذ بحالة binary للعمل في برنامج ftp ¡ وباستعمال حالة ascii لنقل
الرسائل والنصوص فقط .
أثناء نقل الطرود (packet) نستطيع استعمال الرمز (#) لرؤية نهاية نقل كل طرد من
الطرود الإلكترونية . ونُدخل هذه الحالة بواسطة hash on ، ونحذفها بواسطة hash off ، وهذه
العملية تسمى hash marks .
وهنا نقدم بعض الأمثلة لنقل الملفات والطرود :
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /binls.
total 76
-rwr-xr-x 1 meikel user 55642 Mar 31 08:10 adr
-rw--r-- 1 meikel user 10602 Mar 31 08:01 adr.c
-rw-r--r-- 1 meikel user 887 Mar 31 08:14 adr.dat
226 Transfer complete.
190 bytes received in 0.44 seconds ( 0.42 kbytes/s )
ftp> bin
200 Type set to I.
ftp> get adr.c
200 PORT command successful.
150 Opening BINARY mode data connection for adr.c ( 10602 bytes ).
226 Transfer complete.
local: adr.c remote: adr.c
10602 bytees received in 0.04 seconds ( 265.05 kbytes/s )
ftp>
الشكل 65
وهنا استعملنا الأمر get من خلال حاسوب بعيد ، ونقلنا الملف adr.c بعد أن حولنا
حالة النقل إلى حالة binary ¡ بواسطة bin .
ftp> mget *
mget adr? y
200 PORT command successful.
150 Opening BINARY mode data connection for adr ( 55642 bytes )
226 Transfer complete.
local: adr
55642 bytes received in 0.14 seconds ( 388.13 kbytes/s )
mget adr.c? n
mget adr.dat? y
200 PORT command successful.
150 Opening BINARY mode data connection for adr.dat ( 887 Bytes ).
226 Transfer complete.
local: adr. dat remote: adr.dat
887 bytes received in 0.04 seconds ( 21.66 kbytes/s )
ftp>_
الشكل 66
وهنا ننقل جميع ملفات الدليل بواسطة * mget . والبرنامج يسألنا إذا أردنا النقل
أم لا، ونستطيع الإجابة : y (yes) أو n (no) ¡ لأننا لم نستعمل prompt off لإيقاف التأكيد ،
ونُدخل n إذا لم نرد نقل الملف adr.c ، وغير ذلك ندخل y نعم .
ftp> propt off
Interactive mode off.
ftp> mget *
200 PORT command successful.
150 Opening BINARY mode data connection for adr ( 55642 bytes ).
226 Transfer complete.
local: adr remote: adr
55642 bytes receeived in 0.26 secnds ( 208.99 kbytes/s )
200 PORT command successful.
150 Opening BINARY mode data connection for adr.c ( 10602 bytes/s ).
226 Transfer complete.
local: adr.c remote: adr.c
10602 bytes received in 0.02 seconds ( 517.68 kbytes/s )
200 PORT command successful.
150 Opening BINARY mode data connetion for adr.dat ( 887 bytes ).
226 Transfer complete.
local: adr.dat remote: adr.dat
887 bytes received in 0.08 seconds ( 10.83 kbytes/s )
ftp>
الشكل 67
وهنا الحالة مع استعمال prompt off دون تأكيد النقل ب (نعم أو لا) . وتُنقل الملفات
دون تأكيد .
ftp< hash on
Hash mark printing on ( 4096 bytes/hash mark ).
ftp> get adr
200 PORT command successful.
150 Opening BINARY mode data connection for adr ( 55642 bytes ).
#######
226 Transfer complete.
local: adr remote: adr
55642 bytes received in 0.24 seconds ( 226.41 kbytes/s )
ftp>
الشكل 68
وهنا (في الأعلى) حالة النقل باستعمال hash on لإدخال # بعد كل طرد ، وبذلك نعرف
عدد الطرود المرسلة .
في الحالات السابقة استعملنا get و mgetلإحضار الطرود من الحاسوب البعيد .
ونستطيع إرسال الطرود بواسطة put و mput ¡ وهذه تعمل مثل get و mget ¡ ولكن بالعكس ، أي
نُرسل من حاسوبنا إلى الحاسوب البعيد ...إلخ .
ملاحظة: أثناء استعمالنا لبرنامج ftp يجب التأكد من حقوق العمل في الملفات (قراءة
وكتابة و استعمال) قبل نقلها.
بواسطة البرنامج ftp لانستطيع إظهار محتويات الملفات البعيدة على شاشتنا، ولكنَّ
هناك طريقةً استثنائيةً عبر الأنبوب (pipeline) لإظهار المحتويات ، وذلك بواسطة الأوامر more
وwc و cat ¡ أو أي أمر آخر نستعمله بعد إشارة الأنبوب (|) مباشرة .
وهنا مثل لاستعمال wc :
ftp> get adr.c |wc
200 PORT command successfil.
150 Opening ASCII mode data connection for adr.c ( 10602 bytes ).
533 865 10602
226 Transfer complete.
local: |wc remote: adr.c
11135 bytes received in 0.90 seconds ( 12.08 kbytes/s )
ftp>_
الشكل 69
هنا أدخلنا البرنامج wc بعد إشارة الأنبوب مباشرةً لتعداد السطور والكلمات والأحرف ،
ولإظهارها على شاشتنا من الملف adr.c الموجود بعيداً...
وأثناء عملنا في البرنامج ftp نستطيع حذف أحد الملفات الموجودة في الحاسوب البعيد
بواسطة الأمر delte ¡ وذلك فقط في حالة حصولنا على حقوق حذف أحد الملفات هناك .
ftp> delete adr.dat
250 DELE command successful.
ftp>
ولتغيير الأدلة نستعمل lcd بدل cd .
ftp> lcd tmp
Local directory now /home/ziad/tmp
ftp>
ونستطيع استعمال أوامر الغلاف بإدخال ! قبل الأمر :
ftp>!date
ftp>!ls -al
ftp>!more filename
ونستطيع إنهاء عمل ftp بإدخال quit ¡ وبهذا ننهي أيضاً الاتصال بالحاسوب البعيد .
وإدخالُ close ينهي الاتصال فقط ، وبواسطة open واسم الحاسوب البعيد نعيد الاتصال ثانيةً .
في حال نقل كميات كبيرة من المعلومات والملفات والتي تستغرق ساعات كثيرة نستعمل
ftp خلفياً ، أي دون ظهور العملية على الشاشة أثناء العمل ، وهنا يجب الانتباه إلى أن
الدخول إلى الحاسوب البعيد يحتاج إلى اسم المستخدِم وكلمة المرور أيضاً ، وذلك في حالة
Login هناك . ويجب إدخال الإضافات nو i للحد من الأسئلة أثناء نقل المعلومات (prompt off
= i ) ¡ وللحيلولة دون الدخول الطبيعي login بواسطة (no login = n) . وفي حالة النقل
الخلفي نحتاج إلى الأوامر بالإضافة إلى أسماء الملفات ...إلخ . ونسجل هذه الأوامر والإيعازات
في ملف خاص ، ونُدخِل هذا الملف بواسطة > إلى الأمر ftp ، أي أنَّ الأوامرَ تأتي من هذا الملف .
ويجب الحرص على أن نكتب في آخر سطر من هذا الملف الأمر quit ، لإنهاء العمل الخلفي ل ftp
بعد إنجاز الأعمال ، وخلاف ذلك يظل ftp عاملاً إلى الأبد كعملية خلفية ، أو أن يُحذف بواسطة
kill لاحقاً .
وإليك طريقة إدخال هذا الأمر للعمل في الخفاء :
$ ftp -in jordsys < inputfile & «الملف الذي يحتوي الأوامر inputfile»
[1] 4635
$
ومحتوى inputfile يكون مثلاً هكذا :
user ziad password
bin hash off
mget *
quit
ويعمل البرنامج ftp في الخفاء ، وينفذ هذه الأوامر.
في حال استخدام internet نستعمل اسم المستخدِم الوهمي ftp (anonymous) ¡ لنسخ
وإحضار الملفات من الحواسب البعيدة . وهذه الملفات تكون - عادة - مجردة من القيود ، أي أنَّ
بالإمكان نسخَها وإحضارَها للاستعمال العام ، مثل البريد ، أو برامج Shareware ، أو Public
Domain Software المجانية ، والتي نحصل عليها دون رسوم استعمال . ولذلك يجب استخدام أول
سطر من inputfile ، باستعمال اسم ذلك المستخدِم الوهمي ، ككلمة مرور هناك :
user ftp ftp
bin
get adr.c
quit
واسم المستخدِم هناك يكون ftp ¡ وهذا متعارف عليه للاستعمال العام .
6.10 برامج أخرى للاتصال البعيد
بواسطة البرامج mail¡ elm¡ talk نستطيع الاتصال بالعاملين على الحواسب البعيدة ،
بإدخال اسم المستخدِم ¡ والحرف @، واسم الحاسوب بعد الأمر ، وهذا معناه ziad at jordsys
(ziad@jordsys) ¡ أي المستخدِم ziad الموجود لدى الحاسوب jordsys .
$ elm ziad@jordsys
أو
$ mail ziad@jordsys
$ mail ziad@jordsys
Subject: catalogue of your range
Dear Ziad
Your representative¡Mr smith¡ visited me recently¡ and
showed me same gamples of your new lines.
I should be grateful if you would send me a catalogue
of your range of christmas toys...............................
Yours faithfully ¡ Mazen Yousef
Ctrl-D
Cc: mazen
ونحن لاننصح باستعمال talk ¡ لأننا نلاقي كثيراً من المتاعب أثناء العمل بواسطته .
بواسطة البرامج finger نستطيع إظهار المستخدِمين الذين يعملون على حاسوبنا ،
والذين قد دخلوا إليه بواسطة الشبكة .
$ finger
Login Name TTY Idle When Where
ziad Ziad Yousef co Thu 10:18
karl Karl Schmidt p3 Thu 11:33 gnom
duffy Sven Meier p2 0:05 Thu 12:36 abakus
$
الشكل 70
وهنا يظهر الاسم الإلكتروني لكل مستخدِم ، واسمه الطبيعي الموجود في الملف
/etc/passwd ¡ واسم المطراف ، والوقت (when) الذي لم يعمل به ، واسم الحاسوب ، ومن أين هو
قادم . وفي حالة عدم وجود اسم الحاسوب ، يكون المستخدِم موجوداً في هذا الحاسوب الذي خرجت
منه المعلومات .
وإذا أردنا الحصول على معلومات مفصلة عن أحد المستخدِمين ندخِل اسمه بعد الأمر :
$ finger karl
Login mame: karl
Directory: /u/karl
On since Fed 20 11:33:12 on ttyp3 at snoopy from gnom
No plan.
الشكل 71
ويظهر هنا الاسم login-name ¡ والدليل الذي يعمل به ، وآخر دخول إلى النظام ، ومتى
قُرئ البريد ، ومحتوى الملف plan الذي يحتوي على معلومات مفصلة عن المستخدِم المذكور ، وهذا
الملف يكون موجوداً في دليل المستخدِم الخاص ، أو يظهر no plan في حالة عدم وجوده .
ونستطيع الحصول على معلومات خاصة عن مستخدِمي الحواسب البعيدة بواسطة finger ¡
بإدخال الاسم واسم الحاسوب البعيد .
$ finger lutz@kaktus
[180.70.40.16]
Login name: lutz In real life: Lutz Muller
Directory: /u/lutz Shell: /bin/csh
Last login: Feb 19 11:02:12 on ttyp2 from abakus
N0 plan.
الشكل 72
ويستخدم اسم الحاسوب فقط لإظهار العاملين هناك :
$ finger @kaktus
Login Name TTY Idle Whrn Where
conny Corinna kaiser co Thi 10:38
af Ansrim Freitag p3 0:12 Thu 11:05 snoopy
الشكل 73
ومن المتوقع أن يحصل الاتصال ، ويُظهِرُ الإنذار أنَّ الاتصال قد رُفض connection refused
¡ لأن مدير النظام هناك قد مَنَعَ الدخول .
7.10 برامج متطورة للعمل من خلال الشبكات
توجد برامج فائقة القدرة للعمل من خلال الشبكات ، أنتجتها Berkeley University¡
California جامعة بركلي في كاليفورنيا في الولايات المتحدة ، وهي تغني (في العمل من خلال
الشبكات ) عن البرنامجين ftp و telnet .
البرنامج rlogin بديل لبرنامج telnet ، وهو يعمل مابين أنظمة يونيكس فقط . وإذا
اضطررنا للعمل بواسطة نظام التشغيل MS-DOS ، أو أي نظامٍ آخرَ ، من خلال التحويل
emulation ، فيستحسن استعمال telnet .
ولكي ندخل إلى الحواسب البعيدة بواسطة rlogin ¡ نُدخل اسم أو رقم الحاسوب البعيد
(أنظر في قسم telnet كيفية الدخول) ، ويأخذ برنامج rlogin اسم وكلمة مرور الشخص الداخل
إلى الحاسوب البعيد من الملف passwd من حاسوب المستخدِم هناك . ولسنا بحاجة إلى إدخال الاسم
، أوكلمة المرور في حال تطابق الاسم وكلمة المرور الموجودة هنا وهناك . وإذا عملنا باسم
آخر إضافيٍّ في الحاسوب البعيد فيجب إدخاله بواسطة الإضافة -L ، ويتبعها الاسم الآخر ، ورقمُ
الحاسوب البعيد في الشبكة :
$ rlogin -L ziad 180.70.40.16
ونستطيع إلغاء السؤال عن كلمة المرور بأن ندخل أسماء الحواسب البعيدة ، وأسماءَ الأشخاص
القادمين منها في الملف .rlhosts الذي يجب وجوده في الدليل الخاص لكل مستخدِم
(Homedirectory) .
ومحتوى هذا الملف يكون مثلاً هكذا :
abakus ziad
abakus mazen
jordsys ziad
kaktus mazen
ومحتوى الملف يُفسَّر هكذا :
إذا كان ziad هو القادم من الحاسوب abakus ¡ فإنه يحق له الدخول باسم مالك الملف
، وإذا كان القادم من الحاسوب abakus اسمه mazen ¡ فإنه يحق له الدخول باسم مالك الملف
أيضاً . وإذا كان القادم من الحاسوب jordsys اسمه ziad ¡ فإنه يحق له الدخول باسم مالك
الملف . وإذا كان القادم من الحاسوب kaktus اسمه mazen ، فإنه يحق له الدخول باسم مالك
الملف . وهنا يجب الحرص على سرية الأسماء ، لأنَّ من الممكن دخولَ غرباء إلى النظام في حال
معرفة أحد هذه الأسماء ، لذا يجب الحذر قبل عمل الملفات .rhosts و /etc/hosts.equiv .
وهنا مثال للدخول بالطريقة التي ذكرناها في الأعلى :
$ rlogin abakus abakusإلى jordsys ندخل من
Password:
Last login: Thu Fed 20 13:18:16 from 180.70.40.2
abakus$ abakusنحن الآن في الحاسوب
.......... نقوم بالعمل المعتاد
abakus$ logout abakus خرجنا من الحاسوب
Closed connection.
$ jordsys نحن الآن في الحاسوب
الشكل 74
وعلامة الخروج من الاتصال أوالانقطاع escape تكون في هذا البرنامج اشارة ~ تلحقها
نقطه ~. .
البرنامجان rsh أو rcmd:
البرنامج rsh يُستخدم لإدخال أمر واحد فقط إلى الحاسوب البعيد ، كما ذكرنا في
الأعلى ¡ ولكن بشرط الدخول بواسطة محتويات الملف rhosts وبدون كلمة مرور .
والقيام يإدخال الأمر للحاسوب البعيد يتم هكذا :
$ rsh abakus date
ونطلب هنا التاريخ date من الحاسوب البعيد abakus ¡ ونستطيع تحويل الإخراج إلى ملف
للاحتفاظ به .
إخراج المعلومات إلى الملف filename في حاسوبنا :
$ rsh abakus date >filename
إخراج المعلومات إلى الملف filename هناك
$ rsh abakus date " >" filename
وهكذا نستطيع استعمال جميع أوامر النظام الأخرى التي عرفناها بواسطة rsh .
والبرنامج rcmd له ذات المفعول .
وهناك أيضاً البرنامج rcp الذي يعمل كالبرنامج ftp ¡ ولكنه يحتاج للدخول
بالمواصفات نفسها كما هو الحال في البرنامج rsh (أنظر في الأعلى) . ومن ميزات هذا البرنامج
نسخ الملفات مثل cp (copy) من خلال الشبكة . من وإلى الحاسوب البعيد :
$ rcp text abakus:tmp/text
اطبع أو انسخ الملف text من حاسوبنا إلى الملف text ¡ في الدليل /tmp¡ في الحاسوب
abakus البعيد.
البرنامجان rwho و ruptime :
وبواسطتهما نستطيع الحصول على المعلومات المتعلقة بالمستخدِمين في الشبكات
المرتبطة ببعضها .
$ rwho
ziad jordsys:ttyp0 Feb 21 19:14
karl jordsys:console Feb 21 19:05
conny snoopy:ttyp2 Feb 21 17:12
af kaktus:ttyp0 Feb 21 18:50
bertram gnom:ttyp0 Feb 21 18:43
الشكل 75
البرنامج ruptime يُظهر لنا الحواسبَ المرتبطةَ في الشبكة، وعددَ المستخدِمين ،
والأوقاتَ ، وكثافةَ العمل التي تظهر برقم (أقل من 1.00 عمل قليل، أكثر من 1.00 عمل كثير):
$ ruptime
snoopy up 34+03:42¡ 2 user¡ load 2.16¡ 2.03¡ 2.00
kaktus up 9+02:12¡ 2 user load 2.50¡ 2.28¡ 2.17
gnom up 11+08:22¡ 1 user¡ load 0.80¡ 0.90¡ 0.92
zarkasys down غير عامل حالياً ولكن مسجل
الشكل 76
8.10 الشبكة العالمية إنترنت Internet
إن الشبكة internet هي اتحاد عدة شبكات داخلية وخارجية في العالم (العالم
الصناعي) ، وتعمل بواسطة البروتوكول TCP/IP الذي شرحنا عنه سابقاً .
وقد كانت هذه الشبكة مشروعاً للبحوث والاتصالات تابعاً للإدارة العسكرية في الولايات
المتحدة باسم Defence Advanced Research Projects Agency (DARPA) ، أُسست في عام 1969
للتوصل إلى طريقة لنقل المعلومات بالطرد للدوائر العسكرية وللمؤسسات العلمية في الولايات
المتحدة ، وكانت النتيجة الشبكة ARPANET التي ربطت عدداً من الحواسب ، وكانت تعمل بواسطة
بروتكول تطور منه TCP/IP. ومنذ عام 1980 بدأ العمل بواسطة TCP/IP ومازال مستخدَماً إلى
يومنا هذا . وفي عام 1984 فُصل القسم العسكري عن ARPANET ، وسمي MILNET. وما تبقى من
ارتباط سُميَ internet ، وبعد ذلك تم وصل شبكات من دول أخرى إلى هذه الرابطة .
وبواسطة الوصيلة (adapter) ¡ وبرامج الارتباط emulation ¡ تُربط الحواسب مختلفة
نظام التشغيل (مثل MS-DOS و APPEL) والمرتبطة بإحدى شبكات الحواسب (Ethernet أو Token-
Ring) .
وأكثر الدول المستعملة لشبكة internet هي الولايات المتحدة ، وكندا ، وأوروبا (
ألمانيا ، وبريطانيا ، وهولندا ، وفرنسا ، وإيطاليا ، وإسبانيا ، والدول الاسكندنافية ...
إلخ) ، وهناك دول أخرى في آسيا وأميركا الجنوبية و أستراليا ربطت بالشبكة internet .
والمؤسسات المرتبطة تكون في أغلب الأحيان جامعاتٍ ومؤسساتِ بحوثٍ وشركاتٍ كبرى ،
وبخاصةٍ شركاتِ الكومبيوتر، ووكالة الفضاء NASA ، وبعض المشتركين الصغار . ومن المتوقع
ازدياد عدد المشتركين في هذه الشبكة إلى أن يكونَ هناك لكل شركة متوسطة الحجم اشتراك برقم
خاص ، وذلك مشابه لشبكة الهاتف العالمية ، والتي تضم في رقمها ، رقم الدولة و رقم المنطقة
، و الرقم الخاص (رقم الشبكةالاردنية للهاتف دولياً= 00962 عمان=6 ورقم الهاتف 600000 ،
وتطلب من الدول الأخرى هكذا 009626660000 للاتصال بمشترك الهاتف) . وأرقامُ شبكة الحاسوب
internet تكون على هذا الشكل 180.70.40.16 أي 180 رقم الدولة ، أو الجهة ، و 70 الرقم
الداخلي الأول لهذه الجهة ، و 40 الرقم الداخلي الثاني ، و 16 الرقم الداخلي الثالث .
وهناك أيضاً الأسماء الرمزية لهذه الجهات ، مثل: gnom.physik.tu-berlin.de ، حيث الاسم الأول
هو اسم الحاسوب gnom ، ثم اسم القسم departement of physic ¡ ثم اسم الجهة Technical
University Berlin ¡ والأحرف الأخيرة تدل على الدولة (de) ¡ وتعني deutschland : ألمانيا -
باللغة الالمانية - وإليك فهرساً بهذه الأسماء :
at Austeria it Italy
au Australia jp Japan
be Belgium kr Suthkorea
br Brasili mx Mexico
ca Kanada na Namibia
ch Swizerland nl Nitherland
cs Tchecoslow. nz Newseeland
de Germany no Norway
dk Danemark pl Poland
es Spain pt Portugal
fi Finnland pr Puerto Rico
fr France se Sweden
gr Greece sg Singapur
hk Hongkong tn Tunesia
hu Hungaria tr Turkia
ie Irland tw Taiwan
il Israel uk united kingdom
in India us USA (limeted)
is Island za Suthernafrika
com USA (commerce)
edu USA (university¡education departements)
gev USA (US-departements)
mil USA (Military)
الشكل 77
والفهرس هذا موجود أو يجب عمله في الملف /etc/hosts مع الأرقام للخطوط ، كعنوان للحواسب
المحبذ الاتصال بها .
البريد الإلكتروني بواسطة internet :
من أهم دواعي الاشتراك في internet هو الاتصال الإلكتروني ، أو البريد الإلكتروني
للشبكات العالمية والداخلية المترابطة ، مثل شبكتيْ BITNET ¡ Fidonet ، وشبكاتٍ أُخرى منتشرةٍ
في جميع أنحاء العالم .
فهرس طرق الدخول وأسماء الشبكات :
BITNET <user>@<systemname>.BITNET
<User>%<Systemname>[email protected]
CSNET <User>@<Systemname>
<User>%<Systemname>@relay.cs.net
JANET <User>@<Systemname>
<User>%<Systemname>@nfsnet-relay.ac.uk
UUCP <User>@<Systemname>.UUCP
<User>%<Systemname>@<Gatewy>
<Gatewy>!<Systemname>!<User>
Fidonet <firstname>.<lastname>@p<Point>.f<node>.n<Net>.z<Zone>.fidonet.org
Maus <firstname>-<lastname>@<Mailbox>.maus.de
Zerberua <User>@<Mailbox>.zer.de
الشكل 78
ولإرسال الأخبار إلى المشتركين في internet ¡ لدينا البرنامجان : mail أو elm ¡
وبواسطتهما نُدخِلُ عنوان المشترك المراد الاتصال به على الشكل التالي :
Username@systemname المسجلة في الشبكة internet
وفي حالة إرسال المعلومات إلى مشترك عن طريق الموزع المركزي Gateway الذي يشكل
في الوقت نفسه حاسوباً لتوزيع الطرود المعلوماتية datagrams الواردة من شبكة internet ¡
ندخل الأمر كالتالي :
$ mail Username%Systemname@Gatway
ويعرف حاسوب التوزيع Gateway ¡ الذي يعمل كساعي البريد العنوانَ الواردَ ، ويرسل
الطرودَ إليه .
لدى الاشتراك في internet يحصل المشترك على لائحة العناوين ، وهي تشبه فهرس الهاتف
، لتبسيط الاتصال ، وإدخال العنوان الصحيح .
والاشتراكُ في internet له محاسن كثيرة ، مثل الحصول على البرامج المجانية Public
Domain Software ¡ التي تُعرض لالتقاطها ، من خلال اسم مستخدِم عامٍّ ذي اسم وهمي anonymous ¡
وتكون هذه البرامج في أغلب الأحيان موجودة بكتابتها الأصلية source-code في لغة سي . وهناك
أيضاً معلومات أخرى لا تعد ولاتحصى يمكن الحصول عليها ، مثل البحوث العلمية ، وصور الفضاء من
مؤسسة NASA ، والمعلومات ، والاكتشافات العلمية من الجامعات المنتشرة في جميع أنحاء العالم
. وهناك أيضاً الأخبار العالمية التي تُرسَـل إلى مؤسسات الصحافة .
ولا غنى للاختصاصيين في مجال الحاسوب عن الاشتراك في internet كمرجع ، للحصول على
أخبار تطورات الحاسوب ، والاختراعات الجديدة ، وحلِّ مشكلاته الواردة . ونحصل على هذه الأخبار
بواسطة برامج News System وهي rn ¡ nn ¡ trn .
إنَّ كتابة تفاصيل استخدام internet تحتاج إلى كتاب خاص ، أما كتابنا هذا فيطرح
الفكرة فقط ، ويَتركُ للعامل الجديد الحصول على معلوماته في هذا المجال بواسطة البحث
المتواصل .
الفصل الحادي عشر
النوافذ
الفصل الحادي عشر
النوافذ
منذ زمن غير بعيد ¡ بدأ العمل بواسطة شاشات لديها القدرة على إظهار الرسوم
والأشكال والصور ، وتُستخدَم هذه الشاشات للعمل بالنوافذ كمطاريفَ واردةٍ على الشاشة . وهي
تحتاج إلى حواسبَ ذاتِ قدرة عالية ، بسبب حجم المعلومات المُرسَلة والمُستقبَلَةِ للمعالجة ، ولا
يصلح الارتباط بواسطة خط الهاتف لربط هذه الشاشات في الحاسوب . هذا ونحتاج إلى برنامج لعمل
وإدارة هذه الشاشات . وقد أُنتج اخيراً البرنامج X-windos ، وهو الآن البرنامج الدارج في
هذا المجال ، ويمكن الحصول عليه مجاناً بحالته الاصلية (source-code) في لغة سي ، لكي يُترجَمَ
إلى لغة الآلة ، ونستطيع الحصول عليه مُتَرجَماً وقابلاً للعمل فوراً، مقابل رسوم تدفع لشركات
الحواسب .
ونظام X-windows نظام متعدد المهام ، يضع كل مهمة (مجال عمل) في نافذة .
والبرنامج xterm يجهز النافذة كمطراف مستقل من نوع vt100 Terminal ¡ له غلافه الخاص ، ومن
خلال كل نافذة ـ على حدة ـ نستطيع تشغيل البرامج التي تعمل مستقلة .
ونظام X-windows يُشغل بطريقتين :
1- حالة الدخول login العادية ، ووجود الدليل /usr/bin/x11 أو /usr/x11/bin ¡
نُدخل الأمر xinit .
2- أما في حالة البرنامج xdm ¡ فإنه يعمل تلقائياً من خلال login ، وهي الحالة
المُتبعة في العادة .
والبرنامج (X-windows Display Manager) xdm - الطريقة الثانية أعلاه - ، يُظهر لنا
نافذة دون إطار ، وبعد ذلك نُدخل الأمر twm أو mwm للعمل في الخلف، لكي يكون مستطاعاً عملُ
نوافذَ أُخرى بواسطة نافذة xterm.
_EMBED MSDraw \* mergeformat___
ويمكن عمل كل ذلك في البداية ، كما يُمكنُ إدخال هذه الأوامر في الملف (.xinitrc)
الموجود في دليل المستخدِم (user) . ويجب تغيير الملف (xsession.) لأن البرنامج xdm يقرؤه
وينفذ موجوداته ، ويكون شكل هذا الملف كالتالي :
export DISPLAY; DISPLAY='hostname':0
mwm &
xsetroot -bitmap /usr/x11/bitmaps/hlines2/b>
xclock -geometry +0+ &
xman -geometry +850+0>&
xbiff -geometry +1030+5&
xload -geometry 300x120+40+635 &
xterm -n 'hostname' -title 'hostname' -fn 99x15 -geometry 80x25+0+180&
xterm -n 'hostname' -title 'hostname' -geommetry -92-12 &
emacs -fn "*courier-bold-r*14*" -geoometry 81x42+542+120 &
xhost +
rsh kaktus -n /usr/x11/bin/xterm -display snopy:0.0 -n polyxena -title polyxena -
iconic &
rsh kaktus -n /usr/x11/bin/xbiff -geometry +1090+5 -display snopy:0.0 &
xterm -geometry 80x10+200+0 -fn 7x13 -title console@'hostname' -C
الشكل 79
شرح :
أولاُ : يُشغَّلُ الباحثُ mwm & ¡ ثم الأمرُ xsetroot الذي يعمل خلفية النافذة ، ثم تُشغل
الساعة (xclock) ، والمرجعُ (xman) ، وصندوقُ البريد (xbiff) ، وتُشغَّل شدة عمل الحاسوب
(xload) ، ثم تُجهَز نافذتا xterm ، ويُشغَّلُ المحرر emacs ، وبواسطة geometry يُسجَّل حجمُ
النافذة ، ومكانُ وضعها في النافذة الأساسية . ومن خلال الأمر rsh نفتح نافذة للعمل في xbiff
، و xterm في الحاسوب kaktus . وبواسطة -display snopy نشير إلى عمل النوافذ في الحاسوب
snopy . وفي آخر الملف تُفتح النافذة بالمقاييس الموضوعة (-geometry 80x10+200+0) ، وننهي
السطر ب -c أي أنَّ هذه النافذة تابعة إلى المطراف الرئيسي console.
ولكل برنامجِ إدارةِ نوافذٍ (Window Manager) ملف عمل خاص :
twmrc = twm.
mwmrc = mwm.
والمعلومات للنوافذ تكتب في الملف xresources. أو xdefaults.
وهنا مواصفات البرنامج mwm :
Mwm*keyboardFocusPolicy: pointer
Mwm*focusBlackWite: false
XTerm*scrollbar: on
XTerm*saveLines: 600
الشكل 80
وللخروج من X-windows نَخرج أولاً من النوافذ بواسطة exit ¡ أو logout ¡ أو نستعمل
الفأر (mause) للخروج بواسطة وضع السهم إلى أعلى اليسار من النافذة ، وضغطِ المفتاح الأيسر
للفأر مرتين متتاليتين .
_
نافذة برنامج عديد اللغات
_
نافذة برنامج لتغيير مفاتيح الأحرف
_EMBED PBrush \s \* mergeformat___
شاشة المطراف الرئيسي وتحتوي عديد النوافذ
ملاحظة : العاملون بواسطة النظام MS-Windows على الحاسوب
الشخصي لايجدون صعوبة في العمل على نظام X-windows .
فهرس المراجع
وللتعمق في نظام يونيكس أنصح بمراجعة الكتب التالية :
1. UNIX System V Stephen & Bourne
ISBN 3-925118-23-3
2. The Disign and Implementation of the 4.3
BSD-Unix Operatig System ISBN 0-201-06196-1
3. The Design of the Unix Operating System¡
M. J. Bach¡ ISBN 0-13-201757-1
4. SCO-UNIX Heinrich Welter ISBN 3-89319-394-4
5. BSD-UNIX Samuel J. Leffler et al
ISBN 3-89319-239-5
6. The C Programing Language¡ Secund Edition¡
ISBN 0-13-110362-8
7. Unix System Programing¡ Kith Haviland
ISBN 0-201-12919-1
8. Advanced Unix Programing¡ Marc J. Rochkind¡
ISBN 0-13-011818-4
9. UNIX V.4 Systemverwaltung Hauke Richter
ISBN 3-89319-617-x
10. Advanced Programing in the Unix Eviroment¡ W.
Richard Stevens ISBN 0-201-56317-7
ملاحظة أخيرة:
إن أنظمة التشغيل العاملة حالياً لاتستحق المدح ، والنظام "يونيكس" ليس حلاً مثالياً لنظام
تشغيل عصري ، يغطي جميع الجوانب المنشودة ، ولكنه يعتبر من أفضل "السيئات" .
لننظر مثلاً إلى مجال معالجة الكلمات ، نجد أنَّ البرامج الفائقة في هذا المجال مثل
WORD ، التي تعمل بواسطة نظام التشغيل MS-DOS و WINDOWS تسد الحاجة وتتفوق . ولكنَّ نظام
التشغيل يونيكس يفتقد إلى يومنا هذا البرامجَ ذات الأداء المريح ، كما هو الحال في نظام
الحواسب الشخصية PC's. والحل الواقعي الحالي لهذه المشكلة يكون باستعمال النظام يونيكس
في الجهاز المنفذ server ، ليقوم بالأعمال المركزية لكثير من الحواسب الشخصية في حال ربطها
به . ومن المعروف بان DOS و WINDOWS لامنافس لهما حالياً في سوق ال PC's . ومعروف أيضاً أنَّ
يونيكس لم يُبَع ، ولن يباعَ في الأسواق العامة ، كما هو الحال بالنسبة إلى DOS و WINDOWS .
ولكنَّ هناك فرصةً لا بأس بها يتمتع بها النظام Unix-Ware المنتج من شركة Novell بمقدرته على
ربط أنظمة ال PC's بواسطة الشبكة .
وظهر حديثاً برنامجُ معالجةِ كلماتٍ جديدٌ اسمه Magic Hit ¡ وهو صالح أيضاً في مجال
البرمجة object oriented programing ، ويعمل بواسطة الأنظمة solaris و Onsite-Unix وUnix-
Ware و HP-UX و Sinix و SCO-Unix.
نرجو من الله عز وجل أن نكون قد قدمنا لمحةً مفيدةً عن نظام التشغيل يونيكس. . .
د. زياد ديب يوسف 1994.7.28
فهرس الأوامر Reference
الأوامر التي شرحنا عنها في الكتاب وطريقة إدخالها وميزاتها تجدها حسب الترتيب
الأبجدي اللاتيني ، لكل أمر صفحة او عدة صفحات مع شرح مفصل .
وفي نهاية الكتاب نقدم شرحاً مختصراً لأوامرالنظام System V .
at
الإيعاز بالعمل في زمن معين:
بواسطة الأمر 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 = رقم العملية
awk
إظهار السطور بشروط من ملف معين:
البرنامج awkيقرأ السطور من ملف معين ، ويستعمل الإضافات كأوامر ، ويمكن استعماله
لبرمجة بسيطة ، مثل استعمال اللغات الدارجة C أو BASIC وغيرها . وإذا استعملناه
لقراءة الملفات فقط ، يكون شبيهاً إلى حد بعيد بالبرنامج grep ، ولكنَّ الإخراج يكون أدقَّ
وأوضحَ.
$ awk /Berlin/ adr
تظهر لك السطور التي تحتوي Berlin فقط .
$ awk -F: '{ $7 > 60 }' adr
وهنا التوضيح (-F:) أن (:) هي الفاصل مابين المجالات . وأن (7$) هي المجال السابع
الذي يجب أن يكون أكثرمن 60 (60<) . وهكذا يظهر لنا كل الاشخاص المولودين بعد عام 60 .
وهنا طريقة أخرى لاستعمال هذا البرنامج :
$ awk -F: '{ print "Name: " ¡ $1¡ $2 }' adr
Name: Susanne Krieger
Name: Udo Meier
.........................
Name: Anneliese Zimmermann
Name: Thomas Meier
في هذه الحالة يجب وضع الأوامر الإضافية مابين أقواس الزوايا [] مثل print
وتوابعها ، ووضع الإظهار الإضافي مثل "Name" مابين مرفوعات مزدوجة . وجميعُ الأوامر الإضافية
وتوابعها تُحتَضَن بين مرفوعات ' ' عادية.
وللتوضيح (الشكل 53) : كما ذكرنا أن الإضافة (-F:) تفصح علامة الفصل (:) ، و print
"Name :" هي أظهر Name : ¡ و بعدها أظهر المجالين 2$ 1$ وهما الاسم الأول ، واسم العائلة
من الملف adr .
وإذا وضعنا /Berlin/ قبل print :
$ awk -F: '/Berlin/ { print "Name:"¡$1¡$2' adr
فإنه تظهر لنا فقط السطور التي تحتوي Berlin في الوضع السابق .
وهنا مثال أكثر تعقيداً للإشارة إلى قدرة الحساب :
$ awk ' { n=nt$7} END { print "Sum:"¡n}' adr
وهذا يحسب الأعوام ، ويظهر لنا المجموع (n).
bc
برنامج الحساب:
برنامج bc يحسب لك الأرقام كالآلة الحاسبة (وننهي كل سطر ب Return ) كما هو في المثال
التالي:
$ bc
128+54
182
24^4
331776
quitt
$_
وينتهي العمل في هذا البرنامج بإدخال Quit.
وإذا أردت أن تحسب مع استخدام الفاصل التعدادي فيجب أن تدخل الإضافة-lmath بعد
الأمر bc :
$ bc -lmath
2.2-1.1
1.1
Quit
$_
ويمكن استخدام جميع العمليات الرياضية (مثل سينوسS() Sinus ) ولاتنسَ أن تضع مفتاح
الفراغ ما بين الأمر والإضافات .
bg
تحويل العمليات الموقفة إلى عمليات خلفية عاملة:
إذا كانت هناك عملية ظاهرة أمامية وأوقفناها باستعمال Ctrl-Z ¡ فإننا نستطيع جعلها تتابع
العمل مباشرة بعد ايقافها باستعمال الأمر bg لإرسالها إلى الخلف للمتابعة هناك.
% find \ -name sort -print > result
(Ctrl -Z)
% bg
[1] Running sleep 1000
[2] - Suspended vi tetx
[3] +Suspended find \ -name sort -print
cancel (System V)
إيقاف الطباعة:
$ cancel matrix-75
request "matrix-75" cancelled
وهنا أدخلنا الأمر cancel واسم ورقم العملية ، لإيقافها في حال وجودها في صف
الانتظار (queue).
cat
كتابة و إظهار محتوى الملفات:
نعمل ملفاً جديداً بواسطة استعمال الأمر cat:
$ cat > file هنا نضع الاسم file الملف
this is my 1. file in UNIX هذا نكتبه كما نشاء
(Ctrl -D) اضغط هذه المفاتيح لإنهاء العمل
وذلك يعني أنك عندما تدخل الأمر (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) بدون إضافات، يُظهِر ما نكتبه على الشاشة فقط دون
تخزين.
cd
التنقل بين الأدلة:
بواسطة الأمر cd (change directory) يتاح لنا التنقل بين الأدلة:
$ pwd
usr/ziad
$ cd /etc
$ pwd
/etc
وهنا يَظهَرُ موقعنا بواسطةpwd ¡ وهو الدليلusr/ziad ¡ ونغير الموقع بواسطة cd ¡
ويصبح /etc .
وفي هذا الشكل نعود إلى موقعنا الأصلي:
$ cd /usr/ziad
$ pwd
/usr/ziad
chgrp
تغيير اسم المجموعة مالكة الملف:
chgrp Grupname Filename
$ chgrp support personal
$ ls -al personal
-rwxr-x---1 mazen support 35750 13 fos 12.13 personal
chmod
تغيير و إلغاء الحقوق:
إن لكل مستخدِم و لكل مجموعة مستخدِمين حقوقاً معينة للقراءة و الكتابة والاستعمال. وهذه
الحقوق يمكننا تغييرها أو حذفها في حال حيازتنا ملكيةَ الملف. والمدير العام للنظام له
الحق في التغيير وحذف الحقوق. وهذا التغيير يتم بواسطة البرنامج 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) مديرِ النظام فقط .
chown
تغيير ملكية الملفات:
ويتم تغيير الملكية بواسطة البرنامج (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
$_
chsh
تغيير غلاف الدخول.
تغيير غلاف الدخول يتم بواسطة الأمر(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 :
clear
حذف محتوى الشاشة :
$_
$ clear <Return>
cmp
مقارنة الملفات:
يوجد برنامجان للمقارنة بين الملفات : أولاهما cmp (compare) وهو يقارن ملفين ،
ويُفصح عن حالة الاختلاف إذا ما وُجد بينهما ، و الثاني هو البرنامج diff الذي يُظهر الاختلاف
بالتفصيل.
ولتوضيح عمل هذه البرامج ننشىء أولا ملف بيانات ، ونسميه adr ¡ ونضع داخله عدة
أسماء لأشخاص : ونقوم بكتابة الاسم الأول ، واسم العائلة ، والعنوان ، وتاريخِ ومكانِ الميلاد ،
ونفصل المجالات بواسطة النقاط العمودية (:) ، كما هو في الشكل التالي:
محتوى الملف 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
الملف adr يحتوي الآن على سجلات ومجالات ، ويسمى هذا الملف في لغة الحاسوب قاعدة
مُعطيات (بيانات)(database) ، والسجل يسمى (record) والمجال (field) . ومحتوى ملف adr
يتكون من عدة سجلات ، وكل سجل يتكون من عدة مجالات يُفصَـلُ ما بينها بواسطة (:).
وننشىءُ الآن ملفاً آخرَ (نسخة عن adr) بمواصفات مماثلة، باسم 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
والآن نقارن الملفين بواسطة cmp كالتالي:
$ cmp new adr
new adr differ: char 42¡ line 2
وهذا يعني أن الملفين مختلفان اختلافاً يبدأ في السطر الثاني ، ومجموع الاختلاف 42
حرفاً ، وبرنامج cmp لايهمه نوع الاختلاف الموجود ، ولكنه يُفصح عن تعداد ال Byte's ¡
ويخبرنا عن حالة الاختلاف تعدادياً.
compress
تكثيف الملفات:
تكثيف الملفات من أهم الأعمال التي يقوم بها مدير النظام أو المسؤول عن تخزين
المعلومات ، وكذلك إرسالها عبر الشبكات المحلية والدولية، لأن التكثيف يوفر من سعة
أسطوانات و أشرطة التخزين ¡ ويوفر رسوم إرسال المعلومات عبر الشبكات. وفي أغلب الأحيان
تُخزن ملفات تحتوي على معلومات حروف مثل البيانات ، و الرسائل ، والعقود التجارية ، إلخ...
ويتواجد في هذه الملفات كثيرٌ من الكلمات والعبارات التي يتكرر ذكرها ، وبرنامج
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 .
cp
نسخ وازدواجية الملفات:
بواسطة البرنامج (copy) cp يمكن عمل نُسخة إضافية للملف باسم آخر:
$ cp mustafa Ahmad
$ ls -F
ahmad mustafa kamal text/
كما يمكنك أن تنسخ الملف في دليل آخر بالاسم ذاته:
$ cp ahmad text
$ ls -F text
ahmad muhdi
cut
الإظهار باقتطاع المعلومات:
وهنا نتحدث عن البرنامج 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 .
date
ادخال وتغيير التاريخ:
$ date مثال
Wed Feb. 19 10:46:15 1993
$_
برنامج إظهارالتاريخ date
باستعمال الأمر (date) يظهر في المثال أعلاه، اليوم والشهر والساعة والدقيقة
والثانية والعام.
diff
مقارنة الملفات:
برنامج 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 .
elm
البريد الإلكتلروني بواسطة elm:
وهناك أيضاً البرنامج elm (إذا كان موجوداً بالنظام) ، وهو إلى حد بعيد يشبه mail
في الإمكانات ، ولكنه أفضل للاستعمال ، ونحن ننصح باستعماله بديلاً عنه .
لدى استعمالنا البرنامج elm أول مرة ، يسألنا البرنامج عن إنشاء دليلين جديدين (
mail & elm ) في دليل المستخدِم الخاص (Homedirectry) ¡ لأن elm بحاجة إلى هذين الدليلين
. ولذلك يجب الإجابة على سؤال elm بعمل الدليلين ب y . ودليلُ elm يحتوي قوائمَ وقياساتٍ
يحتاجها البرنامج elm ، وبه تُخزن الرسائل القادمة . بعد عمل الأدلة تظهر لك نافذة
elm :
_
تحرك العارضة باستعمال موجه المحث _SYMBOL 175 \f "Symbol"__SYMBOL 173 \f
"Symbol"_ للأسفل والأعلى ، ولقراءة البريد Return . وفي أسفل النافذة الرئيسة نجد الأحرف
التي تُستعمل لوظائف مختلفة :
d = delite احذف
u = undelete ارفع الحذف
m = mail a message أرسل رسالة
r = reply إجابة على الرسالة
f = forward إرسال نسخة إلى أحد المستخدِمين
q = quit نهاية العمل بالبرنامج
z = help معلومات مساعدة
s = save تخزين في الملف
_
في أسفل هذه النافذة نجد "i" ¡ وبواسطتها نعود إلى النافذة الرئيسة .
env
إظهار محتويات البدائل:
بواسطة البرنامج env نستطيع إظهار محتويات البدائل :
$ 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
وبدائل النظام أو الغلاف تتواجد هنا بالأحرف الكبيرة ، ويمكن إضافةُ بدائل أخرى
خاصةٍ إليها. ولكل مستخدِم تكون هناك معلومات خاصة بعمله ، ومن خلالها يعرف النظامُ التفاصيل
: ما هي أدلته ومطرافه ، واسم النظام الذي يعمل به ، ونوعيته ، والأدلة المفتوحة له،
والغلاف الذي يعمل به حالياً.
وهذه الأسماءُ المكتوبةُ بالأحرف الكبيرة هي أسماءّ ثابتة ، وتتغير توابعها حسب حاجة
المستخدِم لهذه التوابع.
fg
تحويل العمليات الموقفة إلى عمليات أمامية عاملة:
إذا كانت هناك عملية ظاهرة أمامية وأوقفناها باستعمال Ctrl-Z ¡ نستطيع جعلها تتابع العمل
مباشرة بعد ايقافها باستعمال الأمر fg لمواصلة العمل.
file
إظهار نوعية الملف:
ويتم ذلك بواسطة البرنامج file لإظهار نوعية الملف :
$ file \bin\cat
\bin\cat: sparc pure dinamicaly linked executable
$ file \etc\passwd
\etc\passwd: ascii text
ومن المستحسن إظهار النوعية بواسطة file قبل إظهار محتويات الملفات ، التي تتم
بواسطة البرنامجين cat أو od أو غيرهما للتأكد من النوعية.
find
البحث عن الملفات:
هنا نشرح قدرات البرنامج 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 ¡ والتي لم تتغير منذ الأيام السبعةالأخيرة
، واحذفها من وحدة التخزين دون موافقة.
finger
إظهار المستخدِمين:
بواسطة البرامج finger نستطيع إظهار المستخدِمين الذين يعملون على حاسوبنا ،
والذين قد دخلوا إليه بواسطة الشبكة .
$ finger
Login Name TTY Idle When Where
ziad Ziad Yousef co Thu 10:18
karl Karl Schmidt p3 Thu 11:33 gnom
duffy Sven Meier p2 0:05 Thu 12:36 abakus
$
الشكل 70
وهنا يظهر الاسم الإلكتروني لكل مستخدِم ، واسمه الطبيعي الموجود في الملف
/etc/passwd ، واسم المطراف ، والوقت (when) الذي لم يعمل به ، واسم الحاسوب ، ومن أين هو
قادم . وفي حالة عدم وجود اسم الحاسوب ، يكون المستخدِم موجوداً في هذا الحاسوب الذي خرجت
منه المعلومات .
وإذا أردنا الحصول على معلومات مفصلة عن أحد المستخدِمين ندخِل اسمه بعد الأمر :
$ finger karl
Login mame: karl
Directory: /u/karl
On since Fed 20 11:33:12 on ttyp3 at snoopy from gnom
No plan.
ويظهر هنا الاسم login-name ¡ والدليل الذي يعمل به ، وآخر دخول إلى النظام ، ومتى
قُرئ البريد ، ومحتوى الملف plan الذي يحتوي على معلومات مفصلة عن المستخدِم المذكور ، وهذا
الملف يكون موجوداً في دليل المستخدِم الخاص ، أو يظهر no plan في حالة عدم وجوده .
ونستطيع الحصول على معلومات خاصة عن مستخدِمي الحواسب البعيدة بواسطة finger ،
بإدخال الاسم واسم الحاسوب البعيد .
$ finger lutz@kaktus
[180.70.40.16]
Login name: lutz In real life: Lutz Schneider
Directory: /u/lutz Shell: /bin/csh
Last login: Feb 19 11:02:12 on ttyp2 from abakus
N0 plan.
ويستخدم اسم الحاسوب فقط لإظهار المستخدِمين هناك :
$ finger @kaktus
Login Name TTY Idle Whrn Where
conny Corinna kaiser co Thi 10:38
af Ansrim Freitag p3 0:12 Thu 11:05 snoopy
ومن المتوقع أن يحصل الاتصال ، ويُظهِرُ الإنذار أنَّ الاتصال قد رُفض connection refused
¡ لأن مدير النظام هناك قد مَنَعَ الدخول .
ftp
نقل الملفات عبر الشبكة:
نستعمل البرنامج ftp لنقل الملفات عبر الشبكة . ولدى العمل بواسطة ftp لا نستعمل
أحد الأغلفة (Shell) هناك ، لأن ftp يقوم بالعمل على الحاسوب المُتصَل به كغلاف ، ويظهر المحث
بشكل ftp> بدلا من $ .
الدخول إلى الحاسوب البعيد :
$ ftp abakus
Connected to abakus.
220 abakus FTP server ready.
Name Cabakus:ziad):ziad ziad هنا ندخل الاسم
33 password required required for ziad
password: هنا ندخل كلمة المرور
230 User ziad logged in
ftp> هنا يظهر المحث .
. . .
الخروج من الحاسوب البعيد :
ftp> quit quit الخروج بواسطة
221 Goodbye
$_ محث غلاف حاسوبنا
سرد الملفات والأدلة بواسطة ftp :
بعد الدخول بواسطة ftp إلى الحاسوب البعيد (كما ذكرنا في الأعلى) ، نستطيع استعمال
أوامر النظام وكأننا نعمل هناك .
ftp> pwd
257 "/usr/meikel" is current directory.
ftp> dir
200 PORT command successfu1.
150 Opening ASCII mode data connection for /bin/ls.
total 8
-rwx------ 1 meikel user 126 Mar 31 07:59 .cshrc
-rw------- 1 meikel user 405 Mar 31 07:59 .login
drwxr-xr-x 2 meikel user 384 Mar 31 08:14 c
drwx------ 2 meikel user 384 Mar 31 07:59 Mail
226 Transfer complete.
304 bytes received in 0.68 seconds (o.44 kbytes/s)
ftp> ls
200 PORT commandsuccessful.
150 Opening ASCII mode data connection for file list
.cshrc
.login
c
226 Transfer complete.
25 bytes received in 0.02 seconds (1.22 kbytes/s)
ftp> cd c
250 CWD command successful.
ftp> dir *.c
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
-rw-r--r-- 1 meikel user 10602 Mar 31 08:01 adr.c
226 Transfer comlete.
remote: *.c
60 bytes received in 0.12 seconds ( 0.49 kbytes/s )
ftp>
بعد إدخال أي أمر يُجيب البرنامج ، ويعلمنا عن كل تقدم في عملية الإرسال والاستقبال
.
نقل الملفات بين الحواسب بواسطة ftp :
بواسطة الأوامر get (اجلب) و put (أرسل أو انسخ) نستطيع جلب وإرسال الملفات من
وإلى الحواسب بواسطة الشبكات . وإذا أردنا جلب أو إرسال عدة ملفات نستعمل الأوامر mget و
mput ¡ وبواسطتها نستطيع استعمال النجمة * وعلامة الاستفهام ? كبدائل لأسماء الملفات كما
ذكرنا في السابق . ولدى إرسال أو جلب الملفات يحث البرنامج لتأكيد النقل . ونستطيع تجاهل
الحث بواسطة الأمر prompt off ¡ وإعادته الى عمله بواسطة prompt on . وحالة حث الإثبات هذه
تنفع في تجنب نسخ أحد الملفات التي تحمل الاسم نفسه .
نوعية نقل الملفات :
يتم النقل بالحروف (ASCII) ¡ وهي الحالة الطبيعية للنقل ، وفيها ينتهي كل سطر من الملف
بالإشارة (ASCII 10) Linefeed (انظر ASCII-Code) ¡ وللمطابقة يُحَوِّل يونيكس كل (Linefeed
Carriae Return) إلى Linefeed فقط ، وبهذه تكون المطابقة تامة لجميع الملفات المنقولة .
وهذا يختلف عن حالة السطور في نظام MS-DOS ، الذي ينهي السطور بالإشارة ASCII 13 ، وهي
Linfeed Carriag Return .
في حال نقل الملفات غير ASCII ¡ أي نقل الملفات البينرية (Binaryfiles) (برامج أو
ملفات مكثفة أو صور محولة إلى رموز) ، يجب ضبط وتأكيد هذه الحالة بواسطة إدخال الأمرbinary
أو bin ¡ وبعد ذلك يكون برنامج النقل ftp في حالة نقل بينري . ونستطيع تغيير هذه الحالة
إلى حالة نقل الحروف ASCII بواسطة الأمر ascii . ويجب الانتباه إلى التغيير مابين الحالتين
binary و ascii قبل القيام بعملية النقل . ونحن ننصح بالأخذ بحالة binary للعمل في برنامج
ftp ¡ وباستعمال حالة ascii لنقل الرسائل والنصوص فقط .
أثناء نقل الطرود (packet) نستطيع استعمال الرمز (#) لرؤية نهاية نقل كل طرد من
الطرود الإلكترونية . ونُدخل هذه الحالة بواسطة hash on ¡ ونحذفها بواسطة hash off ¡ وهذه
العملية تسمى hash marks .
وهنا نقدم بعض الأمثلة لنقل الملفات والطرود :
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /binls.
total 76
-rwr-xr-x 1 meikel user 55642 Mar 31 08:10 adr
-rw--r-- 1 meikel user 10602 Mar 31 08:01 adr.c
-rw-r--r-- 1 meikel user 887 Mar 31 08:14 adr.dat
226 Transfer complete.
190 bytes received in 0.44 seconds ( 0.42 kbytes/s )
ftp> bin
200 Type set to I.
ftp> get adr.c
200 PORT command successful.
150 Opening BINARY mode data connection for adr.c ( 10602 bytes ).
226 Transfer complete.
local: adr.c remote: adr.c
10602 bytees received in 0.04 seconds ( 265.05 kbytes/s )
ftp>
وهنا استعملنا الأمر get من خلال حاسوب بعيد ، ونقلنا الملف adr.c بعد أن حولنا
حالة النقل إلى حالة binary ¡ بواسطة bin .
ftp> mget *
mget adr? y
200 PORT command successful.
150 Opening BINARY mode data connection for adr ( 55642 bytes )
226 Transfer complete.
local: adr
55642 bytes received in 0.14 seconds ( 388.13 kbytes/s )
mget adr.c? n
mget adr.dat? y
200 PORT command successful.
150 Opening BINARY mode data connection for adr.dat ( 887 Bytes ).
226 Transfer complete.
local: adr. dat remote: adr.dat
887 bytes received in 0.04 seconds ( 21.66 kbytes/s )
ftp>
وهنا ننقل جميع ملفات الدليل بواسطة * mget . والبرنامج يسألنا إذا أردنا النقل
أم لا، ونستطيع الإجابة : y (yes) أو n (no) ¡ لأننا لم نستعمل prompt off لإيقاف التأكيد ،
ونُدخل n إذا لم نرد نقل الملف adr.c ¡ وغير ذلك ندخل y نعم .
ftp> propt off
Interactive mode off.
ftp> mget *
200 PORT command successful.
150 Opening BINARY mode data connection for adr ( 55642 bytes ).
226 Transfer complete.
local: adr remote: adr
55642 bytes receeived in 0.26 secnds ( 208.99 kbytes/s )
200 PORT command successful.
150 Opening BINARY mode data connection for adr.c ( 10602 bytes/s ).
226 Transfer complete.
local: adr.c remote: adr.c
10602 bytes received in 0.02 seconds ( 517.68 kbytes/s )
200 PORT command successful.
150 Opening BINARY mode data connetion for adr.dat ( 887 bytes ).
226 Transfer complete.
local: adr.dat remote: adr.dat
887 bytes received in 0.08 seconds ( 10.83 kbytes/s )
ftp>
وهنا الحالة مع استعمال prompt off دون تأكيد النقل ب (نعم أو لا) . وتُنقل الملفات
دون تأكيد .
ftp< hash on
Hash mark printing on ( 4096 bytes/hash mark ).
ftp> get adr
200 PORT command successful.
150 Opening BINARY mode data connection for adr ( 55642 bytes ).
#######
226 Transfer complete.
local: adr remote: adr
55642 bytes received in 0.24 seconds ( 226.41 kbytes/s )
ftp>
وهنا (في الأعلى) حالة النقل باستعمال hash on لإدخال # بعد كل طرد ، وبذلك نعرف
عدد الطرود المرسلة .
في الحالات السابقة استعملنا get و mgetلإحضار الطرود من الحاسوب البعيد .
ونستطيع إرسال الطرود بواسطة put و mput ¡ وهذه تعمل مثل get و mget ¡ ولكن بالعكس ، أي
نُرسل من حاسوبنا إلى الحاسوب البعيد ...إلخ .
ملاحظة: أثناء استعمالنا لبرنامج ftp يجب التأكد من حقوق العمل في الملفات
(قراءة وكتابة و استعمال) قبل نقلها.
بواسطة البرنامج ftp لانستطيع إظهار محتويات الملفات البعيدة على شاشتنا، ولكنَّ
هناك طريقةً استثنائيةً عبر الأنبوب (pipeline) لإظهار المحتويات ، وذلك بواسطة الأوامر more
وwc و cat ، أو أي أمر آخر نستعمله بعد إشارة الأنبوب (|) مباشرة .
وهنا مثل لاستعمال wc :
ftp> get adr.c |wc
200 PORT command successfil.
150 Opening ASCII mode data connection for adr.c ( 10602 bytes ).
533 865 10602
226 Transfer complete.
local: |wc remote: adr.c
11135 bytes received in 0.90 seconds ( 12.08 kbytes/s )
ftp>
هنا أدخلنا البرنامج wc بعد إشارة الأنبوب مباشرةً لتعداد السطور والكلمات والأحرف ،
ولإظهارها على شاشتنا من الملف adr.c الموجود بعيداً..
وأثناء عملنا في البرنامج ftp نستطيع حذف أحد الملفات الموجودة في الحاسوب البعيد
بواسطة الأمر delte ¡ وذلك فقط في حالة حصولنا على حقوق حذف أحد الملفات هناك .
ftp> delete adr.dat
250 DELE command successful.
ftp>
ولتغيير الأدلة نستعمل lcd بدل cd .
ftp> lcd tmp
Local directory now /home/ziad/tmp
ftp>
ونستطيع استعمال أوامر الغلاف بإدخال ! قبل الأمر :
ftp>!date
ftp>!ls -al
ftp>!more filename
ونستطيع إنهاء عمل ftp بإدخال quit ¡ وبهذا ننهي أيضاً الاتصال بالحاسوب البعيد .
وإدخالُ close ينهي الاتصال فقط ، وبواسطة open واسم الحاسوب البعيد نعيد الاتصال ثانيةً .
في حال نقل كميات كبيرة من المعلومات والملفات والتي تستغرق ساعات كثيرة نستعمل
ftp خلفياً ، أي دون ظهور العملية على الشاشة أثناء العمل ، وهنا يجب الانتباه إلى أن
الدخول إلى الحاسوب البعيد يحتاج إلى اسم المستخدِم وكلمة المرور أيضاً ، وذلك في حالة
Login هناك . ويجب إدخال الإضافات nو i للحد من الأسئلة أثناء نقل المعلومات (prompt off
= i ) ¡ وللحيلولة دون الدخول الطبيعي login بواسطة (no login = n) . وفي حالة النقل
الخلفي نحتاج إلى الأوامر بالإضافة إلى أسماء الملفات ...إلخ . ونسجل هذه الأوامر والإيعازات
في ملف خاص ، ونُدخِل هذا الملف بواسطة > إلى الأمر ftp ¡ أي أنَّ الأوامرَ تأتي من هذا الملف .
ويجب الحرص على أن نكتب في آخر سطر من هذا الملف الأمر quit ، لإنهاء العمل الخلفي ل ftp
بعد إنجاز الأعمال ، وخلاف ذلك يظل ftp عاملاً إلى الأبد كعملية خلفية ، أو أن يُحذف بواسطة
kill لاحقاً .
وإليك طريقة إدخال هذا الأمر للعمل في الخفاء :
$ ftp -in jordsys < inputfile & «الملف الذي يحتوي الأوامر inputfile»
[1] 4635
$
ومحتوى inputfile يكون مثلاً هكذا :
user ziad password
bin hash off
mget *
quit
ويعمل البرنامج ftp في الخفاء ، وينفذ هذه الأوامر.
في حال استخدام internet نستعمل اسم المستخدِم الوهمي ftp (anonymous) ، لنسخ
وإحضار الملفات من الحواسب البعيدة . وهذه الملفات تكون - عادة - مجردة من القيود ، أي أنَّ
بالإمكان نسخَها وإحضارَها للاستعمال العام ، مثل البريد ، أو برامج Shareware ، أو Public
Domain Software المجانية ، والتي نحصل عليها دون رسوم استعمال . ولذلك يجب استخدام أول
سطر من inputfile ، باستعمال اسم ذلك المستخدِم الوهمي ، ككلمة مرور هناك :
user ftp ftp
bin
get adr.c
quit
واسم المستخدِم هناك يكون ftp ¡ وهذا متعارف عليه للاستعمال العام .
grep grep ¡ egrep ¡ fgrep
البحث عن معلومات معينة:
البرنامج 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 .
head
إظهار بداية الملف:
برنامج head يُستخدم لإظهار أول الملف، والبرنامج tail لإظهار آخر الملف. والبرنامج head
يمكن الاستغناء عنه ، لأن البرنامجين more و sed يقومان بعمله.. انظر المثال التالي:
$ head -20 file
أو
$ sed 20q file
jobs
إظهار الأرقام الوظيفية:
% sleep 1000 &
[ 1 ] 120903
% vi text
ندخل إلى برنامج الكتابة vi... ثم نوقف العمل به
(Ctrl -Z)
% jobs
[1] - Running sleep 1000
[2] + Suspended vi tetx
kill
إزالة العمليات:
في بعض الحالات يكون من الضروري إزالة إحدى العمليات المعلقة. وفي هذه الحالة
نستطيع استعمال الأمر 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
$
في الشكل أعلاه أدخلنا عملية للعمل الخلفي بواسطة & ورقمها 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
$
وجدير بالذكر أن العمليات غير قابلة للإزالة إلاّ من قبل مالكها ، ولكنَّ مدير النظام
root (superuser) يستطيع إزالة وإيقاف العمليات جميعها .
ln
ربط الملفات:
البرنامج 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 ¡ ومعنى ذلك أنه الملف ذاته ، والصلة
تكون الارتباط فقط.
lp (System V)
إرسال الملفات إلى الطباعة الوسيطة:
بواسطة البرنامج 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 System V
إظهار الطابعات:
قبل الشروع في طباعة أحد الملفات نتأكد من وجود الطابعات في النظام بواسطة الأمر
lpstat :
$ 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
$ lpstat
matrix-75 ziad prioity 0 Mar 13 13:20 on matrix
filename 3210
وهذا يعلمنا بأن filename يُطبع الآن بطابعة الماتركس ، و حجمه 3210 أحرف .
ls
سرد الملفات:
يُظهر برنامج 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
$
فهرس الإضافات:
-a جميع الملفات
-c تاريخ آخر تغير ال Inode
-d فقط أسماء الأدلة
-i رقم Inode
-l جميع المعلومات
-r اقلب التصنيف التدريجي
-t إظهر حسب الوقت
-u تاريخ آخر قراءة للملف
-F اظهر علامة النوعية
-R إظهار محتويات الأدلة وما يليها من أدلة
نظام البريد الإلكتروني:
نظام البريد الإلكتروني يعمل كالبريد المتعارف عليه ، والمعلومات التي تُرسَـل
بواسطته تكون متنوعة ، مثل ملفات البيانات والصور والموسيقى ...إلخ . وعملية الإرسال تُطبَّق
بشكل ملف يوضع باسم المستخدِم في الدليل /usr/spool/mail ، ويكون اسم الملف مطابقاً لاسم
المستخدِم (user) . والإرسالُ البريدي لايظهر على الشاشة مباشرة كالإرسال بواسطة write و
talk ، ولكنه يُخزن في ملف البريد . وليس من الضروري أن يكون المرسَـل إليه موجوداً في
النظام في وقت وصول البريد الإلكتروني إليه ، لأنه سيجد بريده لاحقاً في ملف صندوق البريد .
بواسطة البرنامج mail نستطيع إرسال وقراءة البريد . وفي بعض الأحيان يكون اسم
البرنامج mailx . وهناك أيضاً البرنامج elm (electronic mail) وهذا الأخير لايحتويه النظام
يونيكس في العادة ، ويمكن الحصول عليه وإدخاله إلى النظام دون صعوبة أو تكاليف . وهناك
برامجُ مساعدةٌ لإرسال واستقبال البريد مثل sendmail أو smil ، وهي برامج إضافية لإرسال
المعلومات عبر الشبكة الدولية أو المحلية (WAN & LAN) . وهناك نوعان من برنامج mail :
Systen V و BSD. وطريقة عمل هذه البرامج تكون إلى حد بعيد مطابقة لبعضها.
طريقة إرسال البريد:
إن طريقة إرسال البريد تشبه طريقة إرسال الأخبار المباشرة بواسطة write . وإرسالُ
البريد بواسطة mail يتمّ بإدخال الأمر mail واسم المستخدِم ، وبعد ذلك تُكتب الرسائل التي
تُوجه إليه :
$ mail max
Subject: catalogue of your range عنوان الرسالة
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
showed me same gamples of your new lines.
I should be grateful if you would send me a catalogue
of your range of christmas toys...............................
Yours faithfully ¡ Ziad Yousef
Ctrl-D هنا ننهي العمل
Cc: mazen
بعد Cc:يُكتب اسم مستخدِم آخر لإرسال صورة إليه عن الرسالة ، ويمكن إضافة أسماء
عدد من المستخدِمين بفصلهم بواسطة الفاصلة (mazen¡ahmad،...........) .
أثناء كتابة الرسالة يكون من المحتمل أن نوقف العمل بواسطة Ctrl-C أو Del مرتين
، وبعد ذلك يُخزِّن النظام محتوى هذه الرسالة في ملف يسمى (الرسالة الميتة) dead.letter في
دليل المستخدِم الخاص :
$ mail max
Subject: catalogue of your range
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
Ctrl -C
(Interrupt ... one more to kill letter)
Ctrl-C
(Last Interrupt ... letter saved in dead.letter)
$ cat dead.letter
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
الشكل 56
و نظراً لعدم استطاعتنا تصحيحَ ماكُتب خطأً ، فإنَّ من المستحسن استعمالَ المحرر لكتابة
الرسائل ، وإدخالَها بعد ذلك لإرسالها بواسطة mail .
ولنفترض أننا كتبنا رسالة بواسطة المحرر vi باسم letter فإننا - في هذه الحالة -
نُدخلها هكذا :
$ mail max <letter
ولايكون هناك عنوان للموضوع (subject) ¡ ويُرسَـل البريد إلىmax ¡ ويُؤخذ المحتوى من
الملف letter .
أثناء العمل في برنامج mail التابع لنظام BSD نستطيع الدخول إلى vi مباشرةً ،
وتحريرَ الرسالة ثم إرسالَها ، وذلك أثناء عملية الإرسال :
$ mail max
subject: ORDER!
Dear Max
~r filename vi ندخل إلى البرنامج
[هنا نكتب ما نريد إرساله ]
.
[ vi إنهاء الكتابة في ]
Ctrl-D
Cc:
وهنا طريقة لإرسال الملفات البينرية ( البرامج المجمَّعة ) بأن نحولَها أولاً إلى أحرف
بواسطة أحد برامج التحليل ، ونرسلَها بواسطة الأنبوب (|) إلى البرنامج mail .
لنفترض أنَّ لدينا ملفاً بينرياً يسمى data ، ونريد إرساله إلى المستخدِم max :
$ uuencode data data.code|mail max
والملف data يرسَـلُ مع التحليل في الملف data.code ¡ ويحصل max على الملف مع
معلومات إضافية في أول وآخر الملف .
ويجب على max أن يعيد الملف إلى حالته الطبيعية بواسطة uudecode ، بعد إزالة
المعلومات المتعلقة بالبريد الإلكتروني:
$ uudecode data data.code
$ uuencode data data.code هكذا نُظهر المحتوى
الاطلاع على البريد القادم والمخزن :
عندما يدخل المستخدِم إلى النظام بواسطة login ويكون له بريد في ملفه ، تظهر
المعلومات You have new mail أو You have mail ، وذلك قبل ظهور المحث وإشارة الغلاف $ أو
% . وإذا أردنا في هذه الحالة قراءة البريد فما علينا إلا استعمال الأمر mail دون إضافات ،
ويظهر البريد على شكل لائحة بيانات للبريد الوارد ، مع اسم المُرسِل ، وتاريخ الإرسال ، وحجم
وموضوع الرسائل .
Login: ziad
Password: XXXXXXXXX
You have new mail.
Mail version 5.2+L. Type ? for help.
"/usr/spool/mail/ziad": 2 messages 2 new
>N 1 max Thu May 28 11:50 18/492 "catalogue"
N 1 ziad Wed May 29 10:54 16/136 "coffee"
&
الشكل 57
وهنا نرى لائحة البريد ، ويُظهر لنا البرنامج mail الرسائل - واحدةً، واحدةً - في
حال ضغط المفتاح Returm :
& <Return>
Message 1 (of 2)
From mazen Thu May 28 11:50 1993
Date: Thu May 28 92 11:50 MES
From: mazen (Mazen Yousef)
To: max
Subject: catalogue of your range
Dear Max!
Your representative¡Mr smith¡ visited me recently¡ and
showed me same gamples of your new lines.
I should be grateful if you would send me a catalogue
of your range of christmas toys...............................
Yours faithfully ¡ Ziad Yousef
(EOF)
& <Return>
Message 1 (of 2)
From mazen Wed May 29 10:54 1993
Date: Thu May 29 92 10:54 MES
From: ziad (Ziad Yousef)
To: max
Subject: coffee
Hay Max !
I need a cup of coffee.
Ziad.
(EOF)
&
الشكل 58
ونستطيع إظهار الرسائل السابقة بإدخال رقم الرسالة (message) بعد الإشارة & ،
ليعود البرنامج إلى إظهار الرسالة ( الرسالة رقم 1 مثلا ) . ولإنهاء العمل نُدخل q أو x بعد
الإشارة & . وإذا خرجنا بواسطة q يُحذف البريدُ من وحدة التخزين ، وبواسطة x يبقى البريد
مخزناً ، ونستطيع قراءته مرةً أُخرى بواسطة mail . وفي حال إدخال q تُحذف الرسالةُ من صندوق
البريد ، وتتواجد بعد ذلك في الملف mbox في دليل المستخدِم .
& q
Held 1 message in /usr/spool/mail/ziad
Saved 1 message in mbox
هنا وضع البرنامج mail رسالةً في الملف mbox ¡ وحذفَ رسالة من صندوق البريد ziad .
ومن المستطاع حذفُ إحدى الرسائل بواسطة الإضافة d ورقم الرسالة (& d1) . وإذا خرجنا بعد
ذلك بواسطة q تحذفُ الرسالة نهائياً.
وإذا أردنا رؤية لائحة الرسائل مرة أُخرى نُدخل h :
& h
1 Max Thu Mag 15 12:10....................
>2...................
&
وباستخدام حرف m بعد & مع إضافة اسم أحد المستخدِمين ، نستطيع إرسال بريد جديد :
& m max
بعد ذلك يظهر لنا مكان الموضوع (subject) ، وبعدها نكتب الرسالة كالمعتاد ...إلخ
، وننهي العمل
ب Ctrl
-D
ومن الممكن الرد على الرسالة التي قرأناها أخيراً باستعمال (reply=r) & r :
& r
To: max
Subject : Re : Order
.
.
.Ctrl-D
Cc:
&
ويستعمل mail الموضوع ذاته بكتابةSubject : Re : بدل الموضوع . وجميع إمكانات
البرنامج mail نستطيع رؤيتها باستعمال ? & (أو & h في بعض الأحيان وحسب نوعية برنامج
mail) .
man Manual
المعلومات المفصلة عن الأوامر:
$ man <command> <command> ضع الأمر بدل
صورة عامة عن الأوامر
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
Zou can log out by typing control -d (if zour prompt is $)
or by typing logout (if your prompt is %)
mkdir
عمل دليل جديد:
بواسطة الأمر (make directory) mkdir نستطيع عملَ دليل جديد:
$ pwd
/usr/ziad
$ mkdir text2
$ cd text2
$ pwd
/usr/ziad/text2
$_
الشكل 8
بذلك عملنا دليلاً جديداً منسوباً إلى الدليل/ziad . ونظام يونيكس يسمح بوضع دليل
جديد شريطة حيازة الصلاحيات بذلك ، وشريطة أن لا يكونَ في الموقع نفسه دليل بهذا الاسم.
more
الاظهار التدريجي بالصفحة:
$ 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يعيد لنا بناء الشاشة
mv
تغيير اسم الملف :
يُغير الاسم بواسطة البرنامج(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 ، ونستطيع نقل ملفات كثيرة باستعمال ( * و
? ) ، وقد ذكرنا سابقاً كيفية استعمال هذه الرموز.
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 بدل (-) قبل مرتبة
الأولوية.
od
الإظهار البينري:
وإذا أردت أن تُظهر أحد الملفات التي تحتوي على أحرف غير الأحرف ما بين 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 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.
passwd
كلمة المرور:
كلمة المرور هي "مفتاح الخزنة" ، وعندما تكون معروفةً من قبل المستخدِم يكون من
المستطاع الدخول إلى النظام . لذلك يجب اختيار هذه الكلمة بحذر، لأنها تعني ملكية
المعلومات الخاصة والمهمة. ويكون الاختيار الأفضل لكلمة المرور بأن تتكونَ من عدة أحرف
وأرقام ورموز يتعين خلطها كبيرةً وصغيرةً ، ولا تضع أسماء معروفة أو كلمات من القاموس أو أي
مرجع معروف ، واستعمل الرموز مثل !@#^&*)(.. وكما تلاحظ (الشكل 4 تالياَ) ، فإنه يمكن
تغيير كلمة المرور في أي وقت باستعمال أمرpasswd .
$ passwd
Changing password for ziad
Old password:
New password:
Re-enter new password:
$
الشكل 4
إن برنامج passwd يطلب أولاً كلمة المرور الحالية old password¡ ثم الكلمةَ
الجديدةnew passwod ¡ ويعاد كتابتها للتأكد Re-enter password ¡ وبعد ذلك تكون الكلمة
الجديدة هي المعتمدة في حالة دخولٍ جديدٍ إلى النظام .
pg
هنا نقدم شرحاً عن برنامج pg ¡ وهو يشبه more إلى حد ما. ونستطيع إدخال (pg file
) لكي يَظهرَ لنا الملفُ صفحةً صفحةً على الشاشة .
وبواسطة الحرف h يظهر لنا المرجع كما يلي:
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 .
ps System V ps BSD
مراقبة العمليات :
بواسطة البرنامج 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
نرى - هنا - عملية استعمال الغلاف 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
.......
9417 p7 S 0:02 sh
9419 p7 S 0:05 ps -a
ونرى - هنا - عملية تابعة إلى (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
.......
9417 p7 S 0:02 sh
9419 p7 R 0:00 ps -a
$_
نرى جميع العمليات في النظام ، بالإضافة إلى عمليات النواة مثل 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
$
وهنا نرى المستخدِم 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
نرى - هنا - بجانب 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 يظهر المطراف باسمه الكامل ، ولا تظهر الحالة (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
39 ? 0:15 syslogd
185 ? 1:45 cron
.......
1469 ttyq4 0:01 telnetd
.......
1480 ttyq4 0:02 sh
1484 ttyq4 0:00 ps
في الشكل 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 تظهر معلومات مالك العملية 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 نرى حالة العملية S ¡ وهذه حالةُ انتظار ، وO العملية في حالة عمل ،
وR انتظار مؤقت ، و T العملية موقفة. وبدل اسم المستخدِم UID تجد الرقم والمرتبة أسفلPRI
، والرقمُ الأصغرُ يكون هنا أيضاً ذا مرتبة أعلى.
pwd
أدلة العمل الحالية :
إذا أدخلنا الأمر pwd بعد المحث ، يبلغنا النظام اسمَ الدليل المعمول به حالياً. و
pwd تعنيprint workings directory ¡ أي أن اسم الدليل الذي نتواجد به يظهر على الشاشة
على النحو التالي:
$ pwd
/usr/ziad
$
الشكل 7
وهذا يعني أنَّ دليل العمل الحالي هو /ziad ¡ وهو دليل فرعي من دليل /usr .
وهنا لا بد من الإشارة إلى أنَّ كلَّ مستخدِم في نظام يونيكس له دليلُ عمل خاصٌ يسمى home
directory ¡ وعندما يسجل مدير النظام مستخدِماً جديداً، فإنه يسجل له دليلَه الخاصَّ والذي
يكون دليلاً فرعياً من دليل /usr أو /home ، و يحمل اسم المستخدِم الجديد.
rcp
نسخ الملفات من خلال الشبكة:
البرنامج rcp الذي يعمل كالبرنامج ftp ¡ ولكنه يحتاج للدخول بالمواصفات نفسها كما هو
الحال في البرنامج rsh (انظر في الأعلى) . ومن ميزات هذا البرنامج نسخ الملفات مثل cp
(copy) من خلال الشبكة . من وإلى الحاسوب البعيد :
$ rcp text abakus:tmp/text
اطبع أو انسخ الملف text من حاسوبنا إلى الملف text ¡ في الدليل /tmp ¡ في
الحاسوب abakus البعيد.
rlogin
الدخول إلى الحاسوب البعيد:
البرنامج rlogin بديل لبرنامج telnet ¡ وهو يعمل مابين أنظمة يونيكس فقط . وإذا
اضطررنا للعمل بواسطة نظام التشغيل MS-DOS ¡ أو أي نظامٍ آخرَ ، من خلال التحويل
emulation ¡ فيستحسن استعمال telnet .
ولكي ندخل إلى الحواسب البعيدة بواسطة rlogin ، نُدخل اسم أو رقم الحاسوب البعيد
(أنظر في قسم telnet كيفية الدخول) ، ويأخذ برنامج rlogin اسم وكلمة مرور الشخص الداخل
إلى الحاسوب البعيد من الملف passwd من حاسوب المستخدِم هناك . ولسنا بحاجة إلى إدخال الاسم
، أوكلمة المرور في حال تطابق الاسم وكلمة المرور الموجودة هنا وهناك . وإذا عملنا باسم
آخر إضافيٍّ في الحاسوب البعيد فيجب إدخاله بواسطة الإضافة -L ، ويتبعها الاسم الآخر ، ورقمُ
الحاسوب البعيد في الشبكة :
$ rlogin -L ziad 180.70.40.16
ونستطيع إلغاء السؤال عن كلمة المرور بأن ندخل أسماء الحواسب البعيدة ، وأسماءَ الأشخاص
القادمين منها في الملف .rlhosts الذي يجب وجوده في الدليل الخاص لكل مستخدِم
(Homedirectory) . ومحتوى هذا الملف يكون مثلاً هكذا :
abakus ziad
abakus mazen
jordsys ziad
kaktus mazen
ومحتوى الملف يُفسَّر هكذا :
إذا كان ziad هو القادم من الحاسوب abakus ¡ فإنه يحق له الدخول باسم مالك الملف
، وإذا كان القادم من الحاسوب abakus اسمه mazen ¡ فإنه يحق له الدخول باسم مالك الملف
أيضاً . وإذا كان القادم من الحاسوب jordsys اسمه ziad ¡ فإنه يحق له الدخول باسم مالك
الملف . وإذا كان القادم من الحاسوب kaktus اسمه mazen ، فإنه يحق له الدخول باسم مالك
الملف . وهنا يجب الحرص على سرية الأسماء ، لأنَّ من الممكن دخولَ غرباء إلى النظام في حال
معرفة أحد هذه الأسماء ، لذا يجب الحذر قبل عمل الملفات .rhosts و /etc/hosts.equiv .
وهنا مثال للدخول بالطريقة التي ذكرناها في الأعلى :
$ rlogin abakus abakusإلى jordsys ندخل من
Password:
Last login: Thu Fed 20 13:18:16 from 180.70.40.2
abakus$ abakusنحن الآن في الحاسوب
.......... نقوم بالعمل المعتاد
abakus$ logout abakus خرجنا من الحاسوب
Closed connection.
$ jordsys نحن الآن في الحاسوب
الشكل 74
وعلامة الخروج من الاتصال أوالانقطاع escape تكون في هذا البرنامج اشارة ~ تلحقها
نقطة ~. .
rm
إزالة وحذ ف الملفات :
يتم ذلك بواسطة الأمر (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)
rmdir
إزالة وحذ ف الأدلة:
الأدلة تحتوي ملفات مختلفة النوعية، وإذا أردنا إزالة أحد هذه الأدلة ، فيجب إفراغها من
الملفات أولاً بحذف جميع الملفات والأدلة الفرعية الموجودة داخلها ، ويتم ذلك بواسطة الأمر
(remove directory) rmdir ، أو مع الإضافة -r التي تزيل الدليل ومحتوياته. وهذا خطر جداً
ويجب الحذر قبل استعماله. ولا أنصح بذلك قبل التأكد من محتويات الدليل.
$ ls -F
kamal kamal2 mustafa text/
$ rmdir text
rmdir: text not empty لا يُحذف الدليل لاحتوائه ملفات
$ rm 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 / ¡ لحُذفت جميع
الأدلة عن بكرة أبيها من النظام ، وهذا يعني أن النظام قد دُمِّر نهائياً.
rsh / rcmd
إدخال أمر إلى الحاسوب البعيد:
البرنامج rsh يُستخدم لإدخال أمر واحد فقط إلى الحاسوب البعيد ، كما ذكرنا في
الأعلى ، ولكن بشرط الدخول بواسطة محتويات الملف rhosts وبدون كلمة مرور .
والقيام يإدخال الأمر للحاسوب البعيد يتم هكذا :
$ rsh abakus date
ونطلب هنا التاريخ date من الحاسوب البعيد abakus ¡ ونستطيع تحويل الإخراج إلى ملف
للاحتفاظ به .
إخراج المعلومات إلى الملف filename في حاسوبنا :
$ rsh abakus date >filename
إخراج المعلومات إلى الملف filename هناك
$ rsh abakus date " >" filename
وهكذا نستطيع استعمال جميع أوامر النظام الأخرى التي عرفناها بواسطة rsh .
والبرنامج rcmd له ذات المفعول .
ruptime
إظهار الحواسب المرتبطة في الشبكة:
البرنامج ruptime يُظهر لنا الحواسبَ المرتبطةَ في الشبكة، وعددَ المستخدِمين ،
والأوقاتَ ، وكثافةَ العمل التي تظهر برقم (أقل من 1.00 عمل قليل، أكثر من 1.00 عمل كثير):
$ ruptime
snoopy up 34+03:42¡ 2 user¡ load 2.16¡ 2.03¡ 2.00
kaktus up 9+02:12¡ 2 user load 2.50¡ 2.28¡ 2.17
gnom up 11+08:22¡ 1 user¡ load 0.80¡ 0.90¡ 0.92
zarkasys down غير عامل حالياً ولكن مسجل
rwho
المعلومات المتعلقة بالعاملين في الشبكات:
وبواسطة rwho نستطيع الحصول على المعلومات المتعلقة بالمستخدِمين في الشبكات
المرتبطة ببعضها .
$ rwho
ziad jordsys:ttyp0 Feb 21 19:14
karl jordsys:console Feb 21 19:05
conny snoopy:ttyp2 Feb 21 17:12
af kaktus:ttyp0 Feb 21 18:50
bertram gnom:ttyp0 Feb 21 18:43
sed
محرر لتغيير بعض الكلمات في أحد الملفات:
البرنامج sed محرر ضعيف القدرات ، نغير بواسطته بعض الكلمات في ملف ما ، كمكان
الميلاد في الملف adr من Berlin إلى Dortmund .
مثلاً:
$ sed s/Berlin/Dortmmund/ adr
يَظهَرُ لنا الملف كالسابق ولكن مع Dortmund بدل Berlin ¡ ويجب استعمال < إذا أردنا
وضع الإخراج في ملف آخر.
ويمكن تحديد التغيير في السطور من 1 إلى 4 :
$ sed 1¡4s/Berlin/Dortmund/ adr
.
ويمكن استعمال الإضافةq وd :
$sed 5q adr
يظهر أول 5 أسطر .
$ sed 4¡6d adr
إظهار السطور جميعها ماعدا 4 إلى 6 .
sort
تصنيف الملفات:
يكون ضرورياً في بعض الأحيان ، أو بالأحرى في أغلبها ، تصنيف المعلومات الواردة في
السجلات لتبسيط العثور على محتوياتها ، وعمليات التصنيف والترتيب هذه يقوم بها البرنامج
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
....
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
هنا لم نُدخلِ المجالَ ، ولذلك صُنف الملف بإعتبار الحرف الأول من السجل .
$ 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
....
Jens:Hofmeister:Am Markt 43:Zittau:19:2:73
Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71
هنا أخبرنا 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
......
Jens:Hofmeister:Am Markt 43:Zittau:19:2:73
Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71
هنا يكون الأسلوب كالتصنيف السابق ، ولكن هنا أعْـلمْنا sort أنه في حال تعدد اسم
التصنيف ( المدينة ) فيجب متابعة التصنيف في مجال ثانٍ (1+) ¡ وهو الاسم الثاني للشخص (
العائلة) .
$ sort -t: +4 -5 adr
Susanne:Krieger:Fischerweg 8:Jena:1:5:67
....
David:Goldstein:Florastr. 7:Essen:8:11:38
Kristina:Weber:Altenberger Chaussee 2:Zittau:9:8:71
طلبنا ترتيب يوم الميلاد دون الإضافة -n .
$ sort -t: -n +4 -5 adr
Susanne:Krieger:Fischerweg 8:Jena:1:5:67
Udo:Meier:Dorfstr. 12:Reutlingen:2:10:56
....
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
نرى - هنا - أننا لم نستعمل في الحالة الأولى-n لترتيب الأرقام ، بل استعملناها في
المثال الثاني لترتيب أيام الميلاد للاشخاص ، دون الأشهر والسنين.
stty
إدخال المواصفات للمطاريف:
ويتم ذلك بواسطة البرنامج 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 -igncr 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
شكل هذا الإظهار غيرُ مرتب لكنه سهل الفهم . وإليك استعمال الحالات في الأعلى موضحةً بالتدريج:
فتح وإغلاق هذه الحالات تُنجز بواسطة البرنامج stty ¡ بالإضافة إلى إشارة الطرح (
إغلاق) ، أو دون إشارة الطرح (فتح):
$ stty ignbrk ignor Break (لا توقف عمل البرامج)
$ stty -ignbrk إلغاء الحالة
فهرس المواصفات:
تعتبر الإشارة [-] حالة نفي للمقاييس ، كما هو مبين في الجدول التالي:
[-]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 وضع التغييرات العادية تلقائياً أو أوتوماتيكياً
tail / head
إظهار بداية ونهاية الملف :
مما نود ذكره أن برنامج 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 في نظامك.
talk / phone
المراسلة بواسطة الحاسوب:
والبرنامجان phone و talk يُستخدمان أيضاً للاتصال المباشر ، ولديهما ميزات أكثر .
ومن ميزات البرنامج talkأنه يقسم الشاشة إلى قسمين: قسم إرسال وقسم استقبال ، ويرى
المستقبِلُ المعلومات القادمة حرفاً حرفاً . ويُستَعمَل هذان البرنامجان للاتصال عبر الشبكات
الخارجية ، وسنذكر مزيداً عن الشبكات لاحقاً .
$ talk max
في هذه الحالة تنقسم الشاشة إلى نصفين ، ويخبرنا النظام بأنه ينتظر الطرف الآخر (
الذي نريد التكلم معه ) مثلاً max ¡ ¡ ويظهرعلى شاشتنا [waiting for your party respond]
. وكذلك الحال من خلال البرنامج talk أيضاً . وعلى شاشة max يظهر مايلي :
Message from Talk-Daemon@jordsys at 10:15
talk: connection requested by ziad@jordsys
talk: respond with: talk ziad@jordsys
ويجب على max الآن أن يعمل بواسطة البرنامج talk لتنقسم شاشته إلى قسمين أيضاً .
في القسم الأعلى نكتب مانريد إرساله ، وفي ذات اللحظة يُكتب ذلك في شاشة الآخر في القسم
الأسفل . ولدى الاتصال الأول بين الطرفين يظهر في أعلى الشاشة[connection established ] ،
أي أن الاتصال قد تم . وبعد انتهاء العمل يستطيع أحد الاثنين أن ينهيَ العمل بواسطة Ctrl-C
اوDel .
انقسام الشاشة :
_
tar
ملفات الأرشيف:
بواسطة البرنامج 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 ¡ والشهر ، واليوم ، والساعة ، والعام ، والاسم مع الدليل .
touch
تغيير تاريخ الملكية:
بواسطة البرنامج 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
tr
تبديل الأحرف داخل الملف:
في حال الرغبة بتبديل أحد الأحرف من محتوى أحد الملفات نستعمل البرنامج tr الذي
يقوم بهذه المهمة.
وهنا نُغير الفاصلة (:) إلى الفاصلة (.) في الملف adr بواسطة رمز الإدخال >:
$ tr : . < adr
Susanne.Krieger.Fischerweg 8.Jena.1.5.67
Udo.Meier.Dorfstr. 12.Reutlingen.2.10.56
....
Anneliese.Zimmermann.Bachstr. 24.Berlin.13.4.34
Thomas.Meier.Forstweg 1.Stuttgart.7.10.81
ولم نُرسل التغيير إلى ملف آخر ، وقد ظهر فقط على الشاشة ، وبقي محتوى الملف 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
....
thomas:meier:forstweg 1:stuttgart:7:10:81
ونستطيع إدخال الأمر tr هكذا في BSD-Unix:
$ tr A-Z a-z <adr
ونحصل على ذات المحتوى أو الإظهار كما في الشكل 49.
وهنا نغير جميع الأرقام ونضع (?) بدلاً منها (system V) :
$ tr '[0-9]' '[?*]' < adr
Susanne:Krieger:Fischerweg ?:Jena:?:?:??
Udo:Meier:Dorfstr. ??:Reutlingen:?:??:??
....
Anneliese:Zimmermann:Bachstr. ??:Berlin:??:?:??
Thomas:Meier:Forstweg ?:Stuttgart:?:??:??
BSD:
$ 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
uuencode / uudecode
تحليل الملفات البينرية ( البرامج المجمعة ):
وهنا طريقة لإرسال الملفات البينرية ( البرامج المجمَّعة ) بأن نحولَها أولاً إلى أحرف
بواسطة أحد برامج التحليل ، ونرسلَها بواسطة الأنبوب (|) إلى البرنامج mail .
لنفترض أنَّ لدينا ملفاً بينرياً يسمى data ¡ ونريد إرساله إلى المستخدِم max :
$ uuencode data data.code|mail max
والملف data يرسَـلُ مع التحليل في الملف data.code ¡ ويحصل max على الملف مع
معلومات إضافية في أول وآخر الملف .
ويجب على max أن يعيد الملف إلى حالته الطبيعية بواسطة uudecode ¡ بعد إزالة
المعلومات المتعلقة بالبريد الإلكتروني:
$ uudecode data data.code
$ uuencode data data.code هكذا نُظهر المحتوى
vi
محرر النصوص vi :
قبل البدء بالعمل بواسطة vi يجب التأكد من صلاحية عمل المطراف بالنسبة للبرنامج ،
وذلك بالتأكد من وجود البديلة TERM في شكلها الصحيح (أنظر جزء المطراف) قبل البداية
بالعمل:
قبل البدء بالعمل يجب التأكد من قابلية عمل المطراف مع vi ¡ وذلك بالتأكد من وجود
البديلة TERM في شكلها الصحيح (أنظر جزء المطراف) قبل البداية بالعمل:
نستطيع العمل المباشر بإدخال الأمر vi ملحقاً باسم الملف الذي نريد كتابته ، أو
الملفِ المراد تغييره.
$ vi filename
vi filename يفتح filename عند النهاية أو يعمل ملفاً جديداً
vi /text filename يفتح filename عند السطرحيث توجد (كلمة) text
vi n filename يفتح filename عند رقم السطر كذا (n)
وإذا كان الملف موجوداً فيظهر vi هكذا :
_
وتظهر هنا السطور غيرُ المكتوبة مسبوقةً بعلامة ~ للإشارة إلى أنها غير مستخدَمة. وفي
أسفل الشاشة يظهر اسم الملف. وفي حالة عدم وجود الملف ، يعمل vi ملفاً جديداً وتظهر العبارة
[New file]
برنامج vi لديه حالتان للعمل: حالة إدخال الأوامر ، وحالة إدخال المعلومات ، وهذه
الأخيرة هي الحالة التي نحصل عليها بعد ظهور شاشة البرنامج vi مباشرة . وللخروج من حالة
إدخال المعلومات نضغط المفتاح Esc فنصبح في حالة إدخال الأوامر . وهناك طرائق كثيرة للخروج
من حالة إدخال الأوامر:
طرق الخروج الدارجة من حالة إدخال الأوامر هي إدخال الأحرف a¡i¡o وحرفِ O الكبير.
a = append إضافة
i = insert إضافة للأحرف
o = سطر جديد
وعمل هذه الأحرف في البرنامج 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 يضع الأسطر المنزوعة أو المحذوفة والموجودة بالسلة
a بعد الوامض
"aP يضع الأسطر المنزوعة أو المحذوفةَ والموجودة في السلةa قبل
الوامض
ayy ينزع سطراً ويضعه في السلة a
dd يحذف سطراً كاملاً
D يحذف بقية السطر الحالي
dw يحذف كلمة word = w
J يصل ما بين سطرين قصيرين في سطر واحد طويل
ma يعلم a للنزع أو الحذف
p يضع النص المنزوع أو المحذوف بعد الوامض
P يضع النص المنزوع أو المحذوف قبل الوامض
u يبطل مفعول أمر لتغيير النص
U يبطل مفعول جميع التغييرات على السطرالحالي
x يحذف محرفاً
yw ينزع كلمة (ينسخها إلى المخزن الانتقالي)
yy ينزع سطراً
.(نقطة) يكرر الأمر السابق
"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) filename
:e ينقح الملف السابق
:n ينقل الوامض إلى رقم السطر رقم n
:x¡ y m z ينقل الأسطر ما بين الرقم x والرقم y إلى الرقم z
:x¡ y co z ينسخ الأسطر ما بين x و y إلى z
:x¡ y d يحذف الأسطر من x إلى y
:x¡ y w filename يكتب الأسطر ما بين x و y في filename
:x¡ y w >> filename يضيف الأسطر ما بين x و y بالملف filename
:g ? يجعل حالات التواجد نصاً جديداً newtext
q!: يَخرُجُ من vi ويلغي جميع التغييرات التي أُجريت
علىالملف دون تخزين
w: يخزن التغييراتِ الأخيرة
:% S/oldtext / newtext/g يبحث عن النص القديم oldtext ويستبدل به
نصاً جديداً newtext
wc
تعداد الأسطر والكلمات والأحرف في الملف:
البرنامج wc يقرأُ ويعمل بتعداد الأسطر والكلمات والأحرف الموجودة في الملف letter1
الداخل إليه بواسطة <:
$ wc < letter1
17 460 2085
(الأسطر 17 والكلمات 460 والأحرف 2085 )
ويمكن عمل الإدخال والإخراج في آن واحد:
$ wc <letter1 >ichraj ichraj وأرسل إلى letter1 اقرأ من
$ cat ichraj
17 460 2085
who
إظهار أسماء العاملين:
إذا أردنا معرفة أسماء العاملين على النظام في الوقت الحاضر، نُدخل الأمر 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
كما ترى أعلاه، يعمل هؤلاء المستخدِمون حالياً في النظام من اليسار إلى اليمين، وتظهر
جلياً الأسماء والمطاريف والتاريخ والوقت.
والأمر who am i يعطيك اسمَ الذي يعمل على هذا المطراف :
$ who am i
ziad ttyp0 Feb 6 9:41
ويستطيع مدير النظام (superuser) أن يستعمل سجل المجموعات لإعطاء الصلاحيات
والحقوق، أي أن يسجل الأشخاص في مجموعات مختلفة، لكي يعطيَ لكل مجموعة حقوقاً وصلاحيات خاصة
بها. فلو وجد على سبيل المثال ثلاثة عاملين في قسم المحاسبة ، فإنه يحق لهم استخدام
معلومات معينة، مثل معلومات الميزانية أو الأجور، ويمكن جمعهم في مجموعة واحدة لها حقوق
معينة.
write
الاتصال المباشر:
بواسطة البرنامج write ¡ واسم المستخدِم المعني (شرط أن يكون مرتبطاً بالشبكة أو
النظام) ، نستطيع إرسال الأخبار إليه في حال تواجده بموقعه، أي أن يكون مطرافه عاملاً. ويَكتِبُ
البرنامج write الأخبار على شاشة المُرسَـل إليه مباشرة دون العبث بموجوداتها ، ويستطيع
مستقبل الخبر إعادة بناء شاشته باستعمال Ctrl -L بعد قراءة ما أُرسل إليه. وعندما ينتهي
المُرسِـل من الكتابة ينهي العملَ في البرنامج write بواسطة Ctrl -D .
وفي حال الإرسال والاستقبال للطرفين (أي أن يعمل اثنان بواسطة برنامجwrite ) ،
يستطيع هؤلاء المحادثة كأنما يتحدثون هاتفياً ولكن بالكتابة .
في بعض الحالات يكون لدى أحد المستخدِمين مطراف متعدد النوافذ ، وهذه النوافذ
يُعطيها النظام أسماء مثل ttyp1 ...إلخ. وفي حال وجود عدة نوافذ في مطراف واحد يجب إعلام
write إلى أي مطراف ( نافذة) نريد إرسال الأخبار .
وقبل البدء في المراسلات يجب التأكد - أولاً - من وجود المستخدِمين العاملين حالياً في
النظام :
$ who
ziad ttyp0 May 7 09:40.
max ttyp1 May 7 10:15
mazen ttyp2 May 7 11:20
root console Feb 7 08:14
الشكل 54
هؤلاء المستخدِمون يعملون حالياً على الجهاز. وبعد التأكد نباشر الإرسال :
$ write max
You are connected to "max at jordsys ttyp1".
Hay Max !
I need a cup of coffee. هنا تكتب الخبر
Ziad. من
Ctrl-D write نهاية البرنامج
ونستعمل الأمر هكذا في حال تعدد النوافذ :
$ write max ttyp1
ويُرسَـل الخبر للمستخدِم max إلى النافذة (المطراف)ttyp1 مباشرة.
يفضل استعمال who قبل كل عملية إرسال مباشِرة ، للتأكد من وجود العاملين في
النظام. وإذا أراد أحد المستخدِمين الحيلولةَ دون "إزعاجه" ، فيستطيع أن يحجب ذلك بواسطة
الأمر mesg n ، ويعيد السماح بالوصول إليه بواسطة mesg y ، وذلك في حال حصول المستخدِم
على الصلاحية بأن يغير مواصفات مطرافه بواسطة mesg .
ونستطيع رؤية صلاحية التغيير هكذا:
$ LS -al /dev/ttyp1
crwx-w---- 1 max tty 20 6 May 7 13:05 /dev/ttyp1
نرى هناأنَّ في المجموعة الثانية من الحقوق يوجد w ¡ وهذا يعني أن المطراف ليس
محجوباً. وفي حالة حجبه نجد (لا حقوق -) بدل (حقوق w) .
xargs
تركيب الأوامر:
لدى تشغيل عدة برامج في إيعاز واحد ، نستعمل البرنامج 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 يوفر علينا وقتاً طويلاً من العمل ، ويكون مساعداً في بعض
الأحيان.
الأوامر والبرامج التابعة للنظام UNIX System V
الأوامر
أوامر للإدخال والإخراج:
open فتح ملف للإدخال والإخراج
close إغلاق الملف
read قراءة محتوى الملف
write كتابة في الملف
lseek تحرك الموجه في الملف
ioctl عملية توجيه الأجهزة
fcntl عملية توجيه الملف
fstat معلومات وضع وحالة الملف
dup إزدواج وصف الكلمة الترتيبية للملف
chdir تغيير دليل العمل
chroot تغيير دليل العمل (الجذر) الرئيسي
أوامر لعمل الملف وحمايته:
creat عمل ملف جديد
mknod عمل أرشيف او ملف خاص
link عمل ربط جديد
unlink حذف الربط
access جلب صلاحية فتح الملف
chmod تغيير صلاحية وحقوق فتح الملف
chown تغيير مالك الملف
utime تغيير وقت العمل بالملف
stat جلب حالة ووضع الملف
umask جلب منيو العمل بالملف
mount عمل نظام ملفات جديد
umount حذف نظام الملفات
ustat جلب الإحصاء الخاص بنظام الملفات
أوامر إدارة العمليات:
exec تشغييل برنامج جديد
pause أوقف عمل برنامج وانتظر الإشارة
alarm وضع وقت الإنذار
exit إنهاء عمل برنامج
fork تشغيل عملية ابن
wait انتظر نهاية عمل عملية الأبن
kill احذف او انهي عمل عملية ما
signal جواب على احدى الاشارات
nice تغيير حالة عمل العمليه
getpid جلب رقم العملية
getppid جلب رقم العملية الأم
setpgrp وضع رقم مجموعة العملية
getpgrp جلب رقم مجموعة العملية
setuid وضع رقم مستَخدِم العملية
getuid جلب رقم مستَخدِم العملية
setgid وضع رقم مجموعة مستَخدِمين العملية
getgid جلب رقم مجموعة مستَخدِمين العملية
geteuid جلب الرقم الأصلي لمستَخدِم العملية
getegid جلب الرقم الأصلي لمجموعة مستَخدِمين العملية
times جلب وقت تشغيل العملية
ulimit وضع وجلب حدود عمل العملية
brk تعليمات استعمال وحدة الذاكرة الاضافية
plock وضع عملية ما في وحدة الذاكرة
pipe عمل اُنبوب
msgget فتح مجال إخباري
msgop إرسال وإستقبال من مجال إخباري
msgctl تحويل مجال إخباري
semget Semaphores فتح مجموعة إشارات
semop semaphores تشغيل عملية من خلال
semctl semaphores إدارة
maus إستعمال الذاكرة المشتركة
shmget فتح الذاكرة المشتركة للإستعمال
shmop شبك الذاكرة المشتركة
shmctl إدارة الذاكرة المشتركة
أوامر اخرى:
acct تشغييل واقاف حساب التشغييل
profil profileتشغييل واقاف عمل ال
ptarce عمل متابعة احد عمليات الأبناء
stime وضع وقت وتاريخ النظام
time جلب الوقت
sync حذف مجال الملفات من النواه
uname جلب اسم النظام العامل
البرامج المساعدة
acctcom يبحث عن ويظهر ملفات محاسبة عمل النظام
adb مساعدة تجارب
admin SCCS إدارة وعمل ملفات
ar يحتفظ باراشيف قابلة للنقل
as أسمبلي
asa ASA يحلل رمز الميزان
awk يمكن استعماله لبرمجة بسيطة
banner يعمل رمز او إشارة عنوان
basenameيظهر اسم ملف الممر
bc آلة حاسبة
bdiff يقارن ملفان كبيران
bfs يبحث في ملفات كبيرة الحجم
bs مترجم برامج
cal روزنامة / تقويم
calendar روزنامة تنظيمية
cancel حذف عملية طباعة وسيطة
cat إظهار محتوى الملف
cb توضيب برامج سي
cc مترجم برامج سي
cd تغيير دليل العمل
cdc SCCS-Delta-Operationتغيير معلومات ال
cflow يرسم مخطط مجرى المعلومات
chgrp يغير المجموعة المالكة للملف
chmod يغير حقوق استعمال الملف
chown يغير اسم مالك الملف
cmp يقارن ملفان
col يصفي بالعكس إنفصال السطور في الملف
comb SCCS-Deltaيوحد
comm يختار او يتجاهل سطور تأتي في ملفان معنيان
convert يوحد مواصفات ملفات أرشيفية وبرمجية
cp ينسخ ملفات
cpio ينسخ ملفات أرشيف
cpp تأويل برامج سي
crypt تشفير وحل تشفير الملفات
csplit يقتطع أجزاء ملف حسب المواصفات المسجلة
ct في مطراف بعيد getty يعمل عملية
cu يطلب العمل في نظام يونيكس آخر
cut يظهر معلومات الملف مقتطعة
cw يعمل النص في ملف ما موازي الطول
cxref يعمل قائمة علاقات لبرامج سي
date التاريخ
dc آلة حاسبة
dd محول ملفات
delta SCCS يعمل تغييرات في ملفات
deroff يحذف المواصفات الترتيبية من ملف ما
diff يقارن ملفان بدقة
diff3 يقارن 3 ملفات
diffmk يسجل الاختلاف في ملفان
dircmp يقارن أدلة
dirname يظهر أدلة الطريق
disable يوقف إخراج الطباعة الوسيطة
du وصف إستعمال أُسطوانة التخزين
dump إظهار محتوى ملف مترجم من الذاكرة
echo إظهار نص معيين
ed محرر نصوص سطري
efl مترجم فورتران
enable يعيد عمل إخراج الطباعة الوسيطة
env يسجل شروط عمل الأوامر
eqn يضع مواصفات العمليات الحسابية في الرياضيات
expr يحسب قيمة المعلومات
f77 مترجم فورتران 77
factor تجزئة اجزاء عدد ما
false يسجل القيمة " غلط "
file إظهار نوعية الملف
find يبحث عن وفي ملفات
fsplit يجزئ برامج فورتران
gath RJE يجمع ملفات للإستعمال ال
ged راسم
get SCCS يجلب رقم نسخة ملف ال
getopt يتفحص إحتمالات الأوامر
graph يعمل رسم
graphics يدخل أوامر ترقيمية وراسمة
grep البحث عن المعلومات المطلوبة داخل الملفات
qutil برامج مساعدة لعمل الرسوم
help المساعد
hyphen البحث عن الكلمات المتباعدة
id يظهر اسم المستخدِم والمجموعة
ipcrm يعيد مجموعة الإشارات والذاكرة المقتطعة
ipcs يظهر حالة علاقة العمليات الخلفية
join يجمع مابين ملفان بيانات
kill يوقف عمل العمليات
ld برنامج تجميع
lex يعمل حالة التوضيب المعجمي
line ينقل سطر الإدخال الى الإخراج
lint يتفحص الإدخال النحوي للغة سي
ln يربط ملفات
login يُدخِل المصرح لهم الى النظام
logname يظهر اسم الداخل الى النظام
lorder يجد العلاقة الترتيبية في مكتبة الأوامر النظامية
lp برنامج الطباعة الوسيطة
lpr برنامج الطباعة الوسيطة
lpstat يظهر المعلومات الخاصة بالطباعة الوسيطة
ls يسرد محتويات الأدلة
m4 macro-proccessor وحدة
mail البريد الإلكتروني
make يعيد توحيد البرامج
makekey يعمل مفتاح للترميز
man المرجع المساعد
mesg يحجب ويسمح بارسال الأخبار
mkdir يعمل دليل
mm يوضب نصوص
mmt يوضب نصوص
mv ينقل ملفات
newform يعيد توضيب محتوى ملف نصوص
newgrp يغيير وضع الإنتساب الى مجموعة
news يظهر أخبار نظام الإعلام
nice يغير المرتبة التي يعمل بها برنامج ما
nl يرقم السطور في الملف
nm يظهر اسم ملف الايعازات المشترك
nohup يجعل احد البرنامج يعمل دون مراقبة النظام
nroff توضيب النصوص
od برنامج الإظهار البينري
pack يكثف الملفات
passwd يعمل على تغيير كلمة المرور
paste يجمع سطور الملف
pcat يجمع ملفات مكثفة
pcc مترجم لغة سي خفيف
pr يطبع ملفات
prof يظهر مواصفات
prs SCCSيطبع ملفات
ps يظهر حالة العملية الباطنية
ptx يستعمل للفهرسة
pwd يظهر دليل العمل
ratfor مترجم فورتران إضافي
regcmp مترجم ايعازات عادية
rjestat RJEيظهر حالة ال
rm يحذف ملفات
rmdel SCCS-Deltaيحذف
rmdir يحذف دليل
rsh غلاف مصغر
sact SCCS يظر أعمال التحرير ل
sadp يظهر حالة قراءة موجودات أُسطوانة التخزين
sag يظهر مخطط عمل النظام
sar يظهر لائحة عمل النظام
scat يوحد ملفات ويظهرها
sccsdiff SCCSيقارن اعمار ملفان
sdb symbolicمساعد
sdiff يقارن ملفات
se محرر مطراف
sed محرر
send للعمل RJEيرسل وظائف
sh غلاف بوني
size يظهر حجم ملفات الايعازات
sleep برنامج يعمل بوقت معين
sno snobolمحول/مترجم
sort يرتب محتوى الملف
spell يجد أغلاط نحوية في ملف ما
spline يسهمد ويرتب منعطفات رسومية
split يجزئ ملفات
stat إحصائات شبكية لأعمال الرسوم
strip يحذف الرموز من ملفات الايعازات
stty يغيير حالة عمل المطراف
su يغير مؤقتاً حالة معرفة المستخدِم
sum يجمع عدد الرزم في ملف ما
sync يسجل جزء وحدة التخزين المتواجد في الذاكرة في وحدة التخزين
taps وضع نقاط الفراغ الموسع على شاشة المطراف
tail يظهر آخر الملف
tar برنلمج الأرشيف
tbl توضيب اللائحات
tee تهذيب الأنابيب
test يظهر الشروط
time يظهر وقت عمل برنامج ما
timex يظهر معلومات ووقت عمل برنامج ما
toc يعمل بيان رسومي
touch تغيير تاريخ آخر استعمال حصل لملف معين
tplot مصفاة رسوم
tr تبديل أحد الأحرف من محتوى أحد الملفات
troff يوضب نصوص
true يدخل حالة " صح "
tsort للترتيب الهندسي
tty يهر اسم المطراف
umask جلب منيو العمل بالملف
uname إظهار اسم نظام يونيكس العامل
unget SCCSيعيد ملف
uniq يعيد ملف ذو سطور موحدة
units يغير حالة جهاز ما
unpack يحل التكثيف
uucp يرسل ملفات من نظام الى نظام عبر الشبكة
uulog uucpيعطي معلومات الدخول ل
uuname uucpيعطي اسم الدخول
uupick للعمل بها uucpيجد ملفات
uustat uucp يظهر معلومات النقل بواسطة
uuto ينسخ ملفات بين أنظمة يونيكس عبر الشبكة
uux يقوم بإدخال أمر ما الي نظام يونيكس بعيد
val SCCSيوافق على صلاحية ملفات
vc مراقبة عمر النظام بواسطة رقمه
wait إنتظار نهاية عمل عملية خلفية
wc يظهر عدد الأسطر والكلمات والأحرف من محتوى ملف معين
what SCCSيجد ملفات
who يظهر معلومات تخص المستخدِم
write يرسل أخبار الى مستخدِم آخر
xargs إخراج مُشتَـرك لدى تشغيل عدة برامج في إيعاز واحد
yacc عدة لمترجم برامج