نظام التشغيل يونيكس
الطبعة الأولى
تأليف د. زياد ديب
يوسف
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 &nnbsp;
1464
8488 0
وهنا أعداد مع فاصل:
$ od -f filename
0000000 -3.3027876e-45
4.0606406e-43 1.7684876e-52 0.0000000e+00
وإذا استعملنا البرنامج od
دون إضافة ، فتظهر الأرقام في octal dump (Byte 2) :
$ od filename
0000000 033027
000264 000000 001464 000000 000848 000000 000000
والإظهار للمعلومات والعمل بها في يومنا هذا يكون غالباً بتعداد الهكسا
hexadecimal.
5.7.2 إظهار نوعية الملف
ويتم ذلك بواسطة البرنامج file
لإظهار نوعية الملف :
$ file \bin\cat
\bin\cat: sparc pure dinamicaly linked executable
$ file \etc\passwd
\etc\passwd: ascii text
ومن المستحسن إظهار النوعية بواسطة file قبل إظهار محتويات الملفات
التي تتم
بواسطة البرنامجين cat أو od أو غيرهما
للتأكد من النوعية.
8.2 إدارة وتنظيم الملفات
سنعالج في هذا القسم حركة الملفات ¡ مثل تغيير الاسمِ ، ونقلِ وازدواج
الملفات.
1.8.2 تغيير الاسم
يُغير الاسم بواسطة البرنامج(move)
mv . مثال: هناك ثلاثة ملفات samir¡ kamal¡
mustafa
:
$ ls
kamal mustafa samir
$ mv samir muhdi
$ ls
muhdi mustafa kamal
وهكذا تغيّر اسم samir
إلىmuhdi
¡ وبالمثال التالي نستطيع نقل الملف إلى دليلٍ آخرَ
، وباسمٍ آخرَ:
$ ls
muhdi museafa kamal
$ mkdir text
نعمل دليلاً جديداً
$ ls -F
muhdi mustafa kamal text/
$ mv muhdi text
$ ls -F
mustafa kamal text/
$ ls text
muhdi
$_
في هذا المثال عَمِلنا دليلاً جديداً باسم /text ¡ ونقلنا muhdi إليه ،
واختفى muhdi
من الدليل الحالي ، لأنه أصبح في
الدليل /text
¡ ونستطيع نقل ملفات كثيرة باستعمال ( * و
? ) ، وقد ذكرنا سابقاً كيفية
استعمال هذه الرموز.
2.8.2 طبع و نسخ الملفات
بواسطة البرنامج (copy) cp
يمكن عمل نُسخة إضافية للملف باسم آخر:
$_
$ cp mustafa Ahmad
$ ls -F
ahmad mustafa kamal text/
$_
كما يمكنك أن تنسخ الملف في دليل آخر بالاسم ذاته:
$ cp ahmad text
$ ls -F text
ahmad muhdi
$_
3.8.2 الإشارة لارتباط
الملفات
لقد شرحنا عن البرنامج cp الذي ينسخ الملف ليصبح لدينا ملفان مستقلان يمكننا تغيير
محتوياتهما كُلاً على حدة.
والبرنامج ln
يربط الملفات، وذلك بعملِ ملف نظري كصورة عن ملف
معين، وليس ملفاً حقيقياً . وإذا
تم تغيير محتوى أحد هذه الملفات فيتم تغيير محتوى الآخر
تلقائياً ، لأن المحتوى واحد، أي
أن المحتوى والمعلومات موجودة مرة واحدة في وحدة التخزين،
بخلاف ما ذكرناه عن البرنامج cp ، الذي ينسخ
الملف بكامل محتوياته فيصبح لدينا ملفان
مستقلان. وهنا مثال لارتباط ملفين:
$ ls -F
ahmad mustafa kamal text
$ ln kamal kamal2
وهنا يحصل الارتباط
$ ls -F
ahmad mustafa kamal
kamal2 text/
$_
$ ls -L
- rw-r--r-- 1 ziad
staf
380 13 Feb
08.10 ahmad
- rw-r--r-- 1 ziad
staf
420 15 Mar
10.03 mustafa
- rw-r--r-- 2 ziad
staf
80 20 Sep
11.12 kamal
- rw-r--r-- 2 ziad
staf
80 20 Sep
11.12 kamal2
drwxr-xr-x 2 ziad
staf
384 20 Sep 10.11 Text
وهنا أظهرنا ارتباط kamal
و kamal2
¡ وتراه بظهور عدد الارتباط 2 ، وحجمُ الملفين
هنا 80 حرفا.
ويظهر الارتباط جلياً بواسطة ls
-i
كالتالي:
$ ls -i k* ahmad
320 ahmad
402 kamal
402 kamal2
$
وهنا أرقام الملفين kamal
و kamal 2 ¡ 402
¡ ومعنى ذلك أنه الملف ذاته ، والصلة
تكون الارتباط فقط.
4.8.2 إزالة وحذ ف الملفات
يتم ذلك بواسطة الأمر (remove)
rm ¡ حيث نستطيع إزالة الملفات من الدليل الحالي
أو من أحد الأدلة الأخرى.
$ ls -F
ahmad kamal kamal2
mustafa text/
$ rm ahmad
$ ls -F
kamal kamal2 mustafa
text/
الملف ahmad
لم يعد موجوداً في الدليل. ونستطيع حذفه من الدليل /text أيضاً:
$ ls text
ahmad muhdi
$ rm text/ahmad
$ ls text
muhdi
ونستطيع أيضاً استعمال ( * و ? ) لحذف عدة ملفات، ولكن يجب الحذر من ذلك ، لأن
هناك
احتمالاً لحذف كثيرٍ من الملفات
باستعمال النجمة (*) .
بعد حذف الملفات تضيع المعلومات الموجودة بها إلى غير رجعة. وننصح باستعمال
الإضافة -i لمنع الحذف التلقائي
، وللإجبار على إعطاء الموافقة أثناء إزالة الملف المعني.
$ rm -i mustafa
mustafa ? n
n رفض
الحذف
وبهذا لم يُحذف الملف لأننا وضعنا n
وليس y (yes & no)
5.8.2 إزالة وحذ ف الأدلة
ذكرنا سابقاً أنّ الأدلة تحتوي ملفات مختلفة النوعية، وإذا أردنا إزالة أحد
هذه
الأدلة ، فيجب إفراغها من الملفات
أولاً بحذف جميع الملفات والأدلة الفرعية الموجودة داخلها ،
ويتم ذلك بواسطة الأمر (remove directory) rmdir
¡ أو مع الإضافة -r
التي تزيل الدليل
ومحتوياته. وهذا خطر جداً ويجب
الحذر قبل استعماله. ولا أنصح بذلك قبل التأكد من محتويات
الدليل.
$ ls -F
kamal kamal2 mustafa text/
$ rmdir text
rmdir: text not empty
لا يُحذف الدليل لاحتوائه ملفات
$ mv text/*
$ rmdir texte
$ ls -F
kamal kamal2 mustafa
$_
لاحظنا في المثال الأعلى أنه لم يحذف rmdir الدليل لأنه يحتوي ملفات ،
وبعد إفراغه
بواسطة rm
¡ أعدنا الحذف بواسطة rmdir
.
لكن ماذا يحدث لو استعملناrm -r
؟
$ ls -F
kamal kamal2 mustafa
text/
$ rm -r text
$ ls -F
kamal kamal2 mustafa
لقد حُذف الدليل ومحتوياته في آن معاً !
ولو كانت هناك أدلة منسوبة إلى الدليل /text لحُذفت أيضاً ، دون معرفة ما
بداخلها
من أدلة وملفات، ولذلك احذر
استعمالrm -r
¡ لأنه يُعتبر من أخطر الأوامر على الإطلاق.
على سبيل المثال : لو أن مدير
النظام root
أدخل الأمر كالتالي rm
-r
الأدلة عن بكرة أبيها من النظام ،
وهذا يعني أن النظام قد دُمِّر نهائياً.
6.8.2 البحث عن الملفات
هنا نشرح قدرات البرنامج find
في البحث عن الملفات ومحتوياتها. حيث ذكرنا سابقاً
أنّ الملفات موجودة في أدلة مختلفة
موزعة في النظام، ولدينا هناك 200 دليل تحتوي مئات
الملفات ، ولكن إذا وُجد ملفٌ في
أحد الأدلة وكنا بحاجة إلى محتوياته ، فكيف يمكننا أن نجده
بسهولة..؟
في البداية نشرح معايير وإضافات البرنامجfind :
-name
???? اسم الملف
-perm
777 حقوق الملف
-type
f
(d دليل) (f ملف)
-user
ziad
مالك الملف
-group
staf
المجموعة
-newer
mustafa
mustafa الملف
الأحدث من
-atime
+7 ملفات لم
تستعمل منذ 7 أيام
-mtime
+7 ملفات لم
تغير منذ 7 أيام
-ctime
+7 منذ7 أيام
لم تغير inode
لائحة
-links
2
عدد الارتباطات
وهنا نشرح بعضها بالتفصيل:
-name
find -name 'a*'
aالبحث عن الملفات التي تبدأ في
find -name mustafa
mustafa البحث عن
الملف
find / -name mustafa
في جميع الأدلة mustafaالبحث عن
find /text -name mustafa
/textفي دليل mustafaالبحث عن
-perm
chmodلاستعمال هذا المعيار انظر
الأمر
perm 777
rwx rwx rwxابحث عن ملف بهذه الحقوق
perm 755
rwx r-x r-x
ابحث عن ملف بهذه الحقوق
perm 600
rw- ---
--- ابحث عن ملف بهذه الحقوق
-type d
ابحث عن أدلة
-type f
ابحث عن ملفات
وهنا بعض الأمثلة لاستعمال برنامجfind
:
$ find -name mustafa -exec file { }\;
ابحث عن الملف mustafa
¡ واعمل بالأمر file
(بواسطة -exec)¡الذي
يُظهر لنا نوعية
الملف.
$ find -name mustafa -ok rm { };
ابحث عن الملف mstafa
واحذفه بواسطة rm
بعد الموافقة (-ok).
$ find / -type f -user ziad -perm 777 -print
ابحث عن جميع الملفات التي يملكهاziad
¡ على أن يكون لباقي المستخدِمين الحقوق
الكاملة (777) ، وأرسل المحتوى إلى
الشاشة -print
.
$ find / -name 'mu*' -mtime +7-exec rm> { };
ابحث عن الملفات التي تبدأ بالأحرف mu ¡ والتي لم تتغير
منذ الأيام السبعةالأخيرة
، واحذفها من وحدة التخزين دون
موافقة.
9.2 ملفات الأجهزة والوحدات
ذكرنا سابقاً أنّ الأجهزة موجودة في النظام كملفات في الدليل /dev . وهذا
بالطبع
يعد تفوقاً على الأنظمة الأخرى،
لأن برامجَ النظام ، والبرامجَ الخاصةَ والأخرى لا تحتاج للإفصاح عن
كيفية إخراج المعلومات إلى الشاشة،
أو إلى الطابعة ، أو إلى وحدة التخزين ، وتُوَجَّهُ
المعلوماتُ إلى ملف وحدة الإخراج ،
أو إلى أي ملف آخر من ملفات الوحدات ، لإدخال أو إخراج
هذه المعلومات.
وتستطيع إظهار الملفات في الدليل /dev
هكذا:
$ ls -l /dev
crw--w--w-
3 root
system
0. 1
11 Mar
10.12
console
brw-rw-rw-
2 bin
bin
2.135 22 Jul
13.10 fdo
brw-rw-rw-
2 bin
bin
2.143 24 Jul
1992 fd1
brw-------
1 sys
sys
3. 1
04 Nov
12.12 hd1
brw-------
2 sys
sys
3. 2
04 Nov
1992 hd2
brw-------
2 sys
sys
3. 3
04 Nov
1992 hd3
crw-------
1 sys
system
3. 1
04 Nov
1992 kmem
crw-rw-rw-
1 root
system
6. 0
22 Jul
13.10 lpo
crw-rw-rw-
1 root
system
6.129 22 Jul
13.03 lp1
crw-------
1 sys
system
8. 0
04 Apr
1992 mem
brw-rw-rw-
1 root
sys
4. 0
20 Jul
1992 mt0
brw-rw-rw-
1 root
sys
8. 2
12 Jul
14.13 null
crw-------
1 sys
sys
23. 1 01 Apr
1992 swap
crwx-w--w-
1 ziad
tty
15. 0 11 Mar
12.16 ttyp0
crwx-w--w-
1 root
system
15. 1 11 Mar
12.16 ttyp1
crwx-w--w-
1 root
system
15. 1 11 Mar
15.10 ttyp2
الشكل 13
ومن الممكن أن يكون هناك ملفات أكثر من ذلك. وهذه الملفات في الشكل الأعلى
تبدأ
بحرف c أو b . وبدل سعة
الملف في ال Bytes
أي عدد الحروف تجد عدداً بفاصل (15. 1) ، أما
باقي المعلومات عن هذه الملفات فهي
إلى حد بعيد تشبه معلومات باقي الملفات الموضحة سابقاً.
حرف c يعني أن هذه
الوحدة مخصصة لتوجيه الأحرف) بان تُرسل المعلومات بالحرف
character إلى
الشاشة) ، مثلا حرف b
يعني أن هذه الوحدة تُوجِّه المعلومات بالدفعة (
الرزمة) وليس بالحرف، وهذه الدفعة
تقدر ما بين 512 - 1024 Bytes
، ويتم توجيهها إلى
أُسطوانة التخزين (وحدة التخزين)
أو إلى شريط التخزين إلخ... والعدد الأول (بدل السعة) يعني
الرقم الرئيسي للوحدة ، والعدد
الثاني الرقم التسلسلي من ذات الوحدات ، أو بمعنى آخر:
العدد الاول major device number ،
والعدد الثاني minor device
number .
ونجد في الأعلى أيضاً: وحدات التخزين الصغيرة fd0 وfd1 ¡ ووحدات التخزين
الكبيرة
hd0 hd1 hd2
¡ والطابعات p0
اوp1
¡ ووحدة الأشرطة ( mt0
) ¡ والمطاريف ttyp0
ttyp1 ttyp2 consle
¡ ووحدة الذاكرة ( mem
أو kmem ) ¡
ووحدة الذاكرة الإضافية swap¡
وهي جزءٌ من وحدة التخزين الكبيرة
، ونجد أيضاً الوحدة الوهمية null
.
الفصل الثالث
المطاريف
1.3 القياسات والمواصفات للمطاريف
2.3 إدخال
المواصفات
3.3 قياسات التوصيل
1.3.3 تصفية الإدخال والانقطاع
2.3.3 تصفية الإخراج
3.3.3 تفسير وتأويل أحرف القيادة
4.3.3 احتمالات أخرى
5.3.3 فهرس المواصفات
4.3 ملفات القياسات والمواصفات
الفصل الثالث
المطاريف
إن المطراف هو الصلة بين الإنسان والآلة (الحاسوب). ووصل المطراف بالحاسوب يكون في
العادة seriall تسلسلياً،
أي أن الإرسال والاستقبال يتم بالحرف ، ويستعمل seriall أيضاً
لنقل المعلومات عبر خط الهاتف
بواسطة مترجم (محول) الذبذبة (Modem)
. أو إيصال المطراف
بواسطة شبكة الاتصال(Network) التي
تنقل المعلومات بالحزمة، وهذه الطريقة تعد أسرعَ الطرق
في نقل المعلومات مابين المطراف
والحاسوب ، وهي الطريقة المتبعة حالياً، لأنّ مطاريف نظام
يونيكس تعمل في الوقت الحاضر من
خلال النوافذ Windows
التي تتكون من مجموعة كبيرة من
المعلومات ،التي تُنقل ما بين
مطراف النوافذ والحاسوب. ونستطيع أيضاً استعمال الحاسوب
الشخصي PC كمطراف
بواسطة أحد برامج التكييف emulation
للمطاريف . وأهم المطاريف لإدارة
النظام هو المطراف الرئيسي consle ¡
وهذا بدوره يكون موصولاً مباشرةً بالحاسوب ، وهو -غالباً-
من النوع الحديث تكنولوجياً ،
والسريع الأداء ، والقابل لإعداد الرسوم والصور high graphics
resolution ، ويربط به
ما يسمى (الفأر) (mouse)
، للاستعمال المريح والفعال للنوافذ.
وكما ذكرنا سابقاً ،إنَّ لكل مطراف ملفاً خاصاً به في النظام يتواجد في الدليل/dev .
والمطاريف الموصولة مباشرة في
الحاسوب تكون أسماء ملفاتها tty01
أو ttyb ، أما
بالنسبة
إلى المطاريف الموصولة بواسطة شبكة
اتصال Network
فتكون أسماؤها ttyp01
أو ttyp02
، وحرف
p يعني ( pseudo ) أيَّ اسم
مستعار.
1.3 القياسات والمواصفات للمطاريف
في حالة ربط المطراف بالحاسوب يكون هناك بعض التعليمات والمواصفات التي يجب أخذها
بعين الاعتبار . إذ من المعروف أن
نقل المعلومات من وإلى المطراف تُذكر في عدد ال Bits التي
تُنقل في الثانية الواحدة baud-rate
¡ فلو افترضنا أن خط النقل التقليدي ينقل مثلا 9600
Bit في الثانية
، كم حرفا تكون هذه..؟ إن ذلك يرتبط ببعض المواصفات الأخرى التي يجب
توضيحها:
إنَّ حالات النقل 300 1200 2400 4800 9600
19200 و 38400 baud
هي المتعارف
عليها لنقل المعلومات.
وتتراوح الكميات الدارجة بين المطراف والحاسوب بين 9600 إلى
19200 boud ،
واذااستعملنا مترجم الذبذبة ( modem
) لنقل المعلومات ، فإن الكميات تبلغ
1200 - 9600 baud .
وإذا حددنا الكمية فيجب إيضاح نوعية المعلومات التي يجب نقلها. وهذه المعلومات
تتكون من Bytes ¡
وهذه بدورها تكون بحجم 6و7و8 Bit
زائد Bit
الفحص والاختبار parity-bit.
وإذا أردنا الفصل ما بين ال Bytes فنحن نكون
بحاجة إلى Bit
التوقف ( stop-bit
) . وفي
أغلب الأحيان تكون المعلومات أو
الأحرف مكونة من 8 Bits
زائد 2 stopp-bits
بالإضافة إلى
ذلك Bit الاختبار (parity-bit) الذي يحتوي
0 أو 1 ، ومعنى ذلك أن عدد ال Bitsفي ال Bytes
الواحدة تكون زوجية أو
فردية، أي even parity
أو odd parity
¡ وهذا يساعد إلى حد كبير
على حساب سرعة نقل المعلومات ،
لأنَّ هذه ال Bits
ستُنقل أيضاً بالمعية.
على سبيل المثال :
إنَّ 9600 Baud
ينقل 1070 حرفاً في الثانية لو كان كل حرف مكونا من Bits 9فقط
(8+1). وهذا يساعد المختصين على
حساب مدة وكمية نقل المعلومات.
2.3 إدخال المواصفات
ويتم ذلك بواسطة البرنامج stty
الذي من خلاله نستطيع تغيير المواصفات للمطراف
ولوحات مفاتيح الأحرف.
ولإظهار المواصفات الحالية
لمطرافنا نستعمل الأمر هكذا:
$ stty
speed 19200 baud; evenp
erase = ^H
-inpck imaxbel -taps
iexten crt
أو هكذا بالتفصيل:
$ stty -a
speed 19200 baud¡ 0 rows¡ 0
columns
parenb -parodd cs7 -cstopb
-hupc1 -cread -cllocal --crtscts
-ignbrk brkint ignpar -parmrk
-inpck -istrip -inlcr -iigncr icrnl -iuclc
ixon -ixany -ixoff imaxbel
isig iexten icanon -xcase
echo echoe echok -echonl -nofilsh -tostop
echoctl -echoprt echoke
opost -olcuc onlcr -ocrnl
-onocr -onlret -oofill --ofdel -taps
erase kill werase rprnt
flush lnext susp intr quit stop eof
^H ^U
^W
^R
^O
^V
^Z/^Y ^C
^\ ^S
^Q
^D
الشكل 14
شكل هذا الإظهار غيرُ مرتب لكنه سهل الفهم . وإليك استعمال الحالات في الأعلى
موضحةً
بالتدريج:
فتح وإغلاق هذه الحالات تُنجز بواسطة البرنامج stty ¡ بالإضافة إلى
إشارة الطرح (
إغلاق) ، أو دون إشارة الطرح
(فتح):
$ stty ignbrk
ignor Break
(لا توقف عمل البرامج)
$ stty -ignbrk
إلغاء الحالة
3.3 قياسات التوصيل
في حالة ربط المطاريف بالنظام تتركب المواصفات والمقاييس تلقائياً (أوتوماتيكياً)
بواسطة نظام التشغيل ، وفي بعض
الأحيان يكون من الضروري تغيير هذه المقاييس . شرح:
cs5 cs6 cs7 cs8 النقلByte في
5،6،7،8¡ Bit
ال عدد
[-]parenb
parity Bit
فحص إشارة الاختبار
[-]parodd
يكون زوجياً أو فردياًparity Bit
[-]cstopb
علامات الانفصال( -cstopb 1 Bit
¡ cstopb 2 Bit)
[-]hupcl
) modem فصل
الخط بعد الخروج أو عدم الفصل(
شرح تفصيلي للإيضاح:
cs5¡ cs6¡ cs7¡ cs8
يعني أنَّ Byte
النقل حجمها 5 ،6 ،7 أو 8 Bit
off/on parenb
يعني أنَّ هناك إشارةاختبار parity bit أو لا
¡
ويكون غير مفتوح هكذا -parenb
ومفتوحاًparenb
parodd
Byteيكون زوجيا (parodd) أو فرديا -parodd
cstopb
علامات الانفصال مابين Byte
النقل1-2 Bit
hupc/ hup
يعني فصل
الخط (خط الهاتف مثلآ)ا -hup
لا يفصل
بعد الخروج.
1.3.3 تصفية الإدخال
والانقطاع
وأهمها إشارة تجاهل وقف عمل البرامج بواسطة Ctrl -C (ignbrk) ¡
وقد تم ذكرها
سابقاً. أما الاُخرى فنشرح
مكوناتها كالتالي:
[-]igncr
Carriage Return
مراعاة
[-]icrnl
Linefeed
إلى Carriage Return
تحويل
[-]ixon
السماح بإيقاف إخراج المعلومات
[-]ixany
متابعة إخراج المعلومات بضغط أحد المفاتيح
شرح تفصيلي:
igncr
تحويل ضغط مفتاح Return إلى Linefeed
icrnl
تحويل Linefeed إلى carriage return أي عكس igncr
ixon
وقف الإرسال في الشاشة بواسطة -ixon ¡ ctrl-s لا
ixany
تواصل عمل الشاشة بعد الضغط على مفتاح
الفراغ
2.3.3 تصفية الإخراج
إضافات التصفية أثناء الإخراج:
[-]opost
السماح بالتصفية
[-]olcuc
تحويل الأحرف الصغيرة إلى كبيرة
[-]onlcr
Carriage Return+LF
إلى Linefeed
تحويل
[-]ocrnl
Linefeed
إلى Carriage Return
تحويل
[-]inlcr
Carriage Return
إلى Linefeed (LF)
تحويل
[-]icrnl
Linefeed
إلى Carriage Return
تحويل
3.3.3 تفسير وتأويل أحرف
القيادة
هناك حالات عديدة تختص بتغيير رموز القيادة وهي:
icanon (canonian modus) ¡
وهذه الحالة يجب أن تكون مفتوحة icanon ¡ وبإضافة علامة
الناقص [-] تكون مغلقة ، وهي تحول
دون إيقاف البرامج بواسطة (Ctrl -
C ) ودون العمل
بمفتاح الحذف اليساري BackSpace .
أما echo off/on
فتكون مغلقة ، أي off
¡ وتحول دون إظهار الأحرف على الشاشة ،
مثل إدخال كلمة المرور لمنع إظهار
حروف الإدخال على الشاشة
وأحرف القيادة تتغير باستعمال stty
أيضاً ، إضافةً إلى اسم حرف القيادة المراد
تغييره والحرف الجديد . وأحرف
القيادة هي:
^H ^U
^W
^R
^O
^V
^Z/^Y ^C
^\ ^S
^Q
^D
وهذه الأحرف تتألف من مقطعين: الرمز ^ ويعني Ctrl
والحروف A - Z
¡ بالإضافة إلى
الرموز الأخرى #$%|/][.
أسماء الوظائف القابلة للتغيير
erase c
رمز الحذف
kill
c
رمز الإيقاف
eof
c
رمز نهاية الملف
eol
c
رمز نهاية السطر
start
c
رمز متابعة إخراج معلومات المفاتيح
stop
c
رمز إيقاف إخراج المعلومات
susp
c
إيقاف البرنامج لمتابعته لاحقاً
rows
n
عدد السطور في الشاشة
cols
n
عدد الخانات في الشاشة
وc يعني حرف القيادة character و n رقم.
وهذه قائمة بأحرف القيادة المتبعة standard
^H erase
احذف الأحرف من اليسار
^C intr
إيقاف عمل البرنامج أو إظهار الملف
kill U
^ إنهاء عمل البرنامج أو إظهار الملف
^\ quit
إنهاء عمل البرنامج أو إظهار الملف
^D eof
إشارة نهاية الملف
^S/^Q stop إيقاف العمل
^Z/^Y susp
إنهاء العمل
4.3.3 احتمالات أخرى
يمكننا عمل تغيير جماعي لعدة مواصفات بواسطة cooked ¡ وبهذا نفتح icanon
و
opost سوياً
مع إضافاتهما، ونغلقهما بواسطة raw. وهذه الأخيرة خطرة جداً ،
لأنه بسبب
استعمالها لايستطيع أحد أن يوقف
برنامجاً أو يحذف حرفاً من ذلك المطراف.
وإذا حصلت عراقيل من قبل المطراف دون معرفة السبب ندخل المواصفة stty sane التي
تعيد كل التغييرات إلى المستوى
العادي standard.
cooked
مراعاة الرموز
raw
لا مراعاة ولا تغيير للإدخال
sane
وضع التغييرات العادية تلقائياً أو أوتوماتيكياً
5.3.3 فهرس المواصفات
تعتبر الإشارة [-] حالة نفي للمقاييس ، كما هو مبين في الجدول التالي:
[-]parenb parity Bit فحص
إشارة الاختبار
[-]parodd يكون زوجياً
أو فردياًparity Bit
cs5 cs6
cs7 cs8
النقلByte
في 5،6،7،8¡ Bit
ال عدد50 إلى
19200
النقل في Bit`s
ال عدد
[-]hupcl
فصل الخط بعد الخروج
[-]cstopb
علامات الانفصال( -cstopb
واحد Bit¡
cstopb 2 Bit)
[-]ignbrk Ctrl -C العمل ب
[-]istrip
الثامن أثناء الإدخال(مراعاة أم لا Bit ال
[-]inlcr
Carriage Return
إلى Linefeed (LF)
تحويل
[-]igncr
Carriage Return
مراعاة
[-]icrnl
Linefeed
إلى Carriage Return
تحويل
[-]iuclc
تحويل الأحرف الصغيرة إلى كبيرة أثناء الإدخال
[-]ixon
السماح بإيقاف إخراج المعلومات
[-]ixany
متابعة إخراج المعلومات بضغط أحد المفاتيح
[-]opost
السماح بالتصفية أثناء الإخراج
[-]olcuc
تحويل الأحرف الصغيرة إلى كبيرة أثناءالإخراج
[-]onlcr
أثناء الإخراج Carriage Return+LF
إلى Linefeed
تحويل
[-]ocrnl
أثناء الإخراجLinefeed
إلى Carriage Return
تحويل
[-]icanon
مراعاة رموز القيادة بأحرف عادية
[-]cbreak مراعاة رموز
القيادة بأحرف
[-]echo
إظهار ضغط مفاتيح الإدخال على الشاشة
erase c
وضع رمز الحذف
kill
c
وضع رمز الإيقاف
eof
c
وضع رمز نهاية الملف
eol
c
وضع رمز نهاية السطر
start
c
وضع رمز متابعةإخراج المعلومات بضغط المفتاح
stop
c
وضع رمز إيقاف إخراج المعلومات
susp
c
إيقاف البرنامج لمتابعته لاحقاً
rows
n
عدد السطور في الشاشة
cols
n
عدد الخانات في الشاشة
cooked
مراعاة الرموز
raw
لا مراعاة ولا تغيير للإدخال
sane
وضع التغييرات العادية تلقائياً أو أوتوماتيكياً
الشكل 15
4.3 ملفات
القياسات والمواصفات
في الملف /usr/lib/terminfo
نجد المعلومات الخاصة بالمطاريف ، وفي BSD-Uinx يكون
الاسم (/etc/termcap) .
وملف terminfoيكون مترجماً بلغة الآلة، أما ملف termcap فهو في حالة
أبجدية (text) ، أي
بالأحرف فقط ، وبالإمكان تغيير محتواه دون مصاعب. ويتعين على المبرمجين
مراعاة مواصفات المطراف لدى
استعمالهم برامج تخص المطراف نفسه. وفي أغلب الأحيان يكون
محتوى الملف termcap كما
يلي:
d0|vt100-am|vt100am|dec vt100:\
:do=^J:co#80:li#24:cl=50\E[;H\E[2J:sf=5\ED:\
:le=^H:bs:am:cm=E[%i%d;%dh:nd=2\E[C:up=2\E[A:\
:ce=3\E[:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
:md=2E[1m:mr=2E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H:\
:rf=\usr\share\lib\tabset\vt100:\
:rs=\E>\E[?31\E[?41\E[?51?\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1lE>:\
:ku=E0A:kd=\E0B:kr=\E0C:kl=\E0D:kb=^H\
:ho=\E[H:k1=\E)P:k2=\E0Q:k3=\E0R:k4:\E0S:pt:sr=5\EM:vt#3:xn:\
:sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
الشكل 16
وهذا المحتوى تابع إلى المطراف من نوعية VT100 من شركة DEC ¡ وفي
السطر الأول نجد
اسم نوعية المطراف، ويليه حجم
الشاشة بالأحرف :co#80:li#24
و do=^J
ومعنى ذلك أن
Ctrl -J يذهب
بالمحث (courser)
إلى السطر الأسفل ، و up=2\E[A
تعني أنَّ Ctrl -A
يذهب
بالمحث سطراً إلى الأعلى ...إلخ.
الفصل الرابع
الأغلفة
1.4 الأغلفة
التقليدية في يونيكس
2.4 العمل
بالغلاف
3.4 تغيير غلاف
الدخول
4.4 تحويلات
ورموز الغلاف
1.4.4 بدائل الأحرف
2.4.4 توجيه خروج المعلومات
3.4.4 توجيه إدخال المعلومات
4.4.4 تعدد الأوامر في سطر واحد Pipe
5.4.4 رموز الإدراج
5.4 قدرات
إضافية لغلاف سي
6.4 بدائل النظام
والأغلفة
1.6.4 بدائل غلاف بورني
2.6.4 بدائل غلاف سي
7.4 برامج
الأغلفة الخاصة shell-scripts
الفصل الرابع
الأغلفة
الأغلفة shells
¡ هي طليعة البرامج , ووظيفتها ترجمة الأوامر التي يفهمها ويدخلها
الإنسان إلى إيعازات آلية، ولتكون
صلة بين الآلة والمستخدِم الذي يعمل بنظامها. وبرنامج
الغلاف يُدخل مباشرة إلى الذاكرة RAM بعد الدخول
إلى النظام بواسطةlogin
.
والغلاف يُشغل البرامج المرغوبة بعد إدخالها بواسطة المطراف ، وتُرسل الإيعازات
مترجمة إلى النظام ليقوم بتنفيذها.
والغلاف يشبه إلى حد كبيرالمترجمَ العاملَ في إحدى
الشركات والتي يعمل بها كثيرٌ من
الموظفين مختلفي اللغات والقدرات ، ويكون قادراً على فهم
لغاتهم وأعمالهم ، ويقوم بترتيب
وظائفهم حسب أصول النظام . وفي نظام MS-DOS يكون
COMMAND.COM
شبيهاً بذلك.
ولكل غلاف لغة برمجة خاصة به ( ليس كلغة C أو Pascal )¡
وبواسطة أوامر هذه اللغة
نستطيع كتابة برامج بسيطة لتقوم
بوظائفَ متعددة تكرارية ، لكي لانحتاج إلى إدخال هذه
الوظائف يومياً بعد تشغيل الجهاز.
وهذه تعمل كالبرامج التي تكتب في MS-DOS في ملفاتها ،
التي تنتهي بالأحرفBAT ،
وتسمى ملفات الأوامر المكدسة (batchfiles)
، وهي تسمى في يونيكس
مخطوطات الأغلفة (shell-scripts) .
1.4 الأغلفة التقليدية في
يونيكس
هناك كثير من الأغلفة ، ومن أوسعها انتشاراً غلاف بورني (sh) Bourne-Shell الذي
يحمل اسم مبرمجه S.R. Bourne¡
وعلامة الدولار ($) هي المحث التقليدي لهذا الغلاف. وهناك
أيضاً غلاف سي ( csh ) C-Shell الذي يحتوي
على قدرات واحتمالات ووظائف أكثر تطوراً، وقد أُخذ
اسمه من لغة البرمجة C . ويحتوي
هذا الغلاف على لغة النحو (instructions
syntax) من لغة
سي ، ونعني بذلك طريقة إدخال
الأوامر والإيعازات ، ووصفَها وترتيبَها في
السطور. وإشارة
المُحثِّ في هذا الغلاف تكون عادة
الرمز المئوي (%). وقد لاقى هذا الغلاف إقبالاً واسعاً في معظم
الأنظمة. كما توجد أيضاً أغلفة
أخرى مثلtcsh¡ bash¡
ksh . ولغلاف بورني sh نوع مصغر يسمى
rsh ، ويخصصه
مدراء الأنظمة للمستخدِمين الذين لايحق لهم العمل المطلق في النظام ، وبالمثال
فالغلاف (rsh) لايسمح
بتغيير الدليل بواسطة الأمر cd
.
2.4 العمل بالغلاف
في حال تشغيل المطراف ، وبعد إدخال الاسم وكلمة المرور ، يعمل الغلاف المسجل في
ملف
كلمة المرور (/etc/passwd) مباشرةً ،
وتظهر علامة الغلاف $ أو % أو غيرها من علامات الأغلفة ،
أو أنها تكون قد غُيرت من قبل
المسؤول عن ذلك. ومدير النظام هو الذي يسجل في الملف المذكور
نوع واسم الغلاف في حالة تسجيل أو
إدخال مستخدِم جديد إلى النظام. ويستطيع المدير تغيير هذا
الغلاف في ذلك الملف في أي وقت .
وبعد الدخول إلى النظام يستطيع المستخدِم user إدخال غلافٍ
آخرَ مثل csh أو غيره
للعمل من خلاله ، والخروج منه يكون بواسطة exit على النحو التالي:
$ csh
% alias 1 ls -aF
% 1
kamal kamal2 mustafa text/ .profile exefile*
% exit
$ 1
1: not found
$ alias1 ls-aF
alias: not found
في الأعلى ،كما تلاحظ ، أدخلنا csh(%) غلاف سي من خلال غلاف
بورني sh($)
،
وعملناalias ، وهي
أسماء مستعارة لاختصار الأوامر والإضافات في غلافC-shell ، وأوعزنا
إلى
csh بأن تنتحلَ
اسماً مستعاراً (1) كبديل للأمر ls -aF ، وأدخلنا (1) كأمر
مباشر ليقوم
بدوره بالأمر ls -aF
دون إدخال الأمر والإضافات، وبعد ذلك خرجنا من csh بواسطة exit ،
وعدنا إلى غلاف بورني sh الذي
لايستعمل الأسماء المستعارة alias
، وكانت المحاولة فاشلة
بالطبع لعمل alias من خلال
غلاف بورني ($).
3.4 تغيير غلاف الدخول
وتغيير غلاف الدخول يتم بواسطة الأمر(change shell) chsh
هكذا:
$ chsh
changeing login shell for ziad on jordsys.اسم
النظام
Old shell: /bin/sh
اسم الغلاف الحالي بورني
New shell: /bin/csh
الغلاف الجديد سي
وهنا نرى أن الأغلفة موجودة في الدليل /bin¡ أما الأغلفة الأخرى
التي ذكرناها سابقاً
، فهي موجودة في الدليل /usr/bin أو /usr/local/bin :
4.4 تحويلات ورموز الغلاف
هناك رموز توجيه الإدخال و الإخراج (مثل < و >) للمعلومات من وإلى الشاشة ،
أو
الطابعة ، أو إلى ملف معين ، وكذلك
رموز البدائل ؟ و * التي تستخدم للبحث عن الملفات
وغيرها من الرموز المفيدة. وسنقدم
للقراء في هذا الجزء تفسيراً لهذه الرموز والبدائل
المستخدِمة في الأغلفة sh و csh..
1.4.4 بدائل الأحرف
أشرنا سابقاً إلى البدائل * و؟ وذكرنا أنَّ * هي بديلة لجميع الأحرف والرموز
، وأنَّ ؟
بديلة عن حرف واحد أو رمز، ويمكن
استعمالها في عدة طرق على النحو التالي :
$ ls
جميع الملفات
letter1 letter2 letter3 letter4letter2¡old
text2¡old
$ echo
letter* letter
جميع الملفات التي تبدأ ب
letter1 letter2 letter3 letter4 letter2¡old
$ echo letter?
وحرف ما واحد letter
جميع الملفات التي تبدأ ب
letter1 letter2 letter3 letter4
$ echo *2* جميع
الملفات التي تحتوي على 2 في داخلها
letter2 letter2¡old text2¡old
وهنا استعملنا الإيعاز echo
¡ وهذا ليس برنامجاً مثل ls
¡ ولكنه أمر تابع للغلاف .
ومن الممكن استبدال ؟
أو *2* باستعمال [ ] ما بين قوسين ، ووضعِ مانبحث عنه من أسماء
بداخلها كالتالي :
$ ls
letter1 letter2 letter3 letter4 letter2¡old
text2¡old
$ echo letter[13]
letter1 letter3
والتي تنتهي ب 1 او3 letter
جميع الملفات
ويمكن كتابة ذلك هكذا: [a-z
A-Z] ونعني الأحرف من A إلى Z
¡ ويمكن استعمال
[7-3!] ، وهذا لا يعني 3 أو 4 أو 5
أو 6 أو7 ، وعلامة التعجب ( ! ) تعني النفي (negation):
$ echo letter[!3-7]
letter1 letter2
2.4.4 توجيه خروج المعلومات
في هذا الشكل نوضح ما تحدثنا عنه سابقاً حول توجيه المعلومات إلى الملف أو إلى
الطابعة ، وليس إلى الشاشة:
$ date > tarich
tarich
أرسل التاريخ إلى الملف
$ cat
tarich
tarich أظهر محتوى الملف تاريخ
wed sep 20 12:32:15 1993
وهنا لم يظهر التاريخ على الشاشة كما توقعنا، ولكنه سجل في الملف tarich ثم
أظهرناه بواسطة البرنامجcat .
وباستخدام علامة < يعمل ملفاً جديداً ، أو تحذف المعلومات
السابقة في الملف الموجود. أما
علامة الإخراج المزدوجة << فتضيف المعلومات إلى نهاية ملف
موجود، وتحتفظ بالمعلومات
السابقة (انظر الشكل الأسفل):
$ date >>tarich
$ cat tarich
wed sep 20 12:32:15 1993
wed sep 20 13:10:10 1993
أضيفت هنا المعلومات إلى الملف tarich
¡ بينما بقيت المعلومات السابقة محفوظة.
ونستطيع بواسطة < و<< أن نوجه معلومات الأخطاء التي ترسل من قبل النظام
إلى ملف
معين للاحتفاظ بها.
$ alias1 ls -aF >achta
$ cat achta
alias:not found
لاحظ كيف وجهنا معلومات الأخطاء
إلى ملف achta
.
وهذه حالة أخرى لموضوع التوجيه:
$ find /usr -name vi -print
>natiga 27 /dev/null
نلاحظ أن البرنامج find
يبحث عن الملف vi
في الدليل /usr
،ويرسل ما وجده إلى
الملف natiga ،
وإذا حصل خطأ ما فإن النظام يرسل الخطأ إلى الملف /dev/null ، وهذا
الملف هو سلة المهملات في النظام.
وهنا تُرسل الأخطاء إلى ذات الملف الذي يحتفظ بالمعلومات (natiga) .
$ find /usr -name vi
-print >natiga 27 & 1/span><
وبواسطة غلاف 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 ¡
ويجب استعمال < إذا أردنا
وضع الإخراج في ملف آخر.