يعالج هذا الدرس، الأول من سلسلة دروس عن شهادة RHCSA، أساسيّات التعامل مع الطرفيّة Terminal في RHEL. سنفترض أن لديك توزيعة RHEL 7 مثبّتة وجاهزة للعمل؛ يمكنك الاستعانة بدرس تثبيت Red Hat Enterprise Linux باستخدام VirtualBox لتجهيز بيئة للعمل عليها.
بنية الأوامر في Shell
لا تثبّت -عادةً- واجهة رسومية في الخواديم؛ لذا ستجد نفسك في الغالب أمام واجهة نصيّة تمثّلها الصّدفة Shell التي تقدّم محثّا Prompt ينتظر منك إدخال أوامر تتفاعل عن طريقها مع مختلف خدمات نظام التّشغيل. بالنسبة للخواديم بواجهة رسوميّة فيمكن تشغيل برنامج الطرفيّة Terminal وستظهر نافذة بمحثّ تُكتَب فيه الأوامر. يُنفَّذ الأمر في الطرفيّة بالضّغط على زرّ Enter
في لوحة المفاتيح، ويتكوّن من جزأين:
- اسم الأمر
- ومعطيات Arguments.
تُغيّر معطياتٌ (تُسمّى خيارات Options، وتكون مسبوقة عادة بشرطة -
) سلوكَ الأمر على نحوّ محدَّد سلفا؛ بينما تعيّن المعطيات الأخرى الكائنات التي سيعمل عليها الأمر.
ملحوظة: برنامج الصّدفة المبدئي Default في RHEL وكثير من توزيعات لينكس هو Bash (اختصار لـBourne again shell). توجد برامج أخرى للصّدفة يمكن تثبيتها مثل C Shell و Ksh.
الحصول على معلومات عن الأوامر
توجد وسائل عدّة يمكن من خلالها الحصول على معلومات مفصَّلة عن أوامر الصّدفة.
الأوامر المضمنة Built-in والأوامر المنفصلة
تنقسم الأوامر في الصّدفة إلى نوعين؛ أوامر مضمَّنة وأخرى مستقلة أو منفصلة. تعدّ الأولى جزءًا من الصّدفة نفسها أمّا الثانيّة فهي برامج تُثبَّت على النظام إما مبدئيًّا أو يُثبّتها المستخدم.
يساعد الأمر type
في تحديد ما إذا كان أمر مّا مضمَّنا في الصّدفة أو أن حزمة (برنامجا) آخر منفصلة عن الصّدفة توفّره. يمكّننا هذا الفصل بين طبيعة الأوامر أن نعرف أين يمكننا الحصول على معلومات أكثر عن أمر عندما نحتاج لذلك. إن كان الأمر مضمّنا في الصّدفة فسنبحث عن معلوماته في صفحة التوثيق الخاصّة بها؛ أما إذا كان منفصلا عنها فسنبحث عن المعلومات عنه في صفحة التوثيق الخاصّة بالبرنامج الذي يوفّره.
$ type cd cd is a shell builtin $ type top top is /usr/bin/top $ type type type is a shell builtin $ type less less is /usr/bin/less
ملحوظة: تشير علامة الدولار $
إلى محثّ المستخدم العادي، وليست جزءا من الأمر. السّطر أو الأسطر الموالية للسّطر الذي توجد به علامة الدولار هو نتيجة تنفيذ الأمر.
في الأمثلة أعلاه ننفّذ الأمر type
ونمرّر له اسم الأمر الذي نريد معرفة هل هو مضمَّن في الصّدفة أم منفصل عنها. تظهر بعد تنفيذ كل أمر نتيجة؛
تشير النتيجة:
cd is a shell builtin
إلى أن الأمر cd
مضمَّن في الصّدفة؛ نفس الشيء ينطبق على type
. إن لم يكن الأمر مضمّنا في الصّدفة، بمعنى أن حزمةً منفصلةً توفّره، فسيظهر مسار الحزمة كما هو الحال مع أمرَي top
وless
في الأمثلة السّابقة.
من بين الأوامر المعروفة المضّمنة في الصّدفة:
-
أمر
echo
الذي يطبع سلسلة محارف. -
أمر
pwd
الذي يطبع مسار المجلّد الحالي.
توثيق الأوامر
يمكننا الاستعانة بصفحات التوثيق عند الشّك في عمل أمر مّا. تُستدعى صفحات التوثيق بالأمر man
. توجد إضافة إلى صفحات توثيق الأوامر صفحاتُ توثيق خاصّة بالملفّات المهمّة مثل hosts
،fstab
و inittab
؛ دوال المكتبات البرمجيّة، الصّدفات، الأجهزة الطّرفية وميزات أخرى.
نستخدم الأمر man
مثلا على النحو التالي لعرض معلومات عن عمل الأمر uname
:
$ man uname
في ما يلي مقتطَف من النتيجة:
UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s
يوجد مصدر آخر مهمّ للبحث عن معلومات أمر مّا وهو أمر info
الذي يقدّم عادة معلومات أشمل من أمر man
. يُمرَّر اسم الأمر الذي نريد معلومات عنه إلى info
على النّحو التالي:
$ info ls $ info cut
كما تتوفّر ملفّات مساعدة في المجلّدات الفرعيّة للمجلّد usr/share/doc/
.
حاول التعوّد على استخدام الطّرق الثلاث المذكورة أعلاه للبحث عن معلومات حول أمر تريد استخدامه أو تشّك في معطياته. انتبه خصوصا للمعلومات المذكورة عن صيغة استخدام كلّ أمر.
أوامر أساسية
أمر exec
ينفّذ أمرُ exec
الأمرَ الممرّر في المعطى. في الغالب يمكن تنفيذ الأمر الأخير دون الحاجة لتمريره إلى exec
إلا أنّ خصوصيّة exec
هي أنها تنشئ عمليّة Process جديدة تحلّ مكان عمليّة الصّدفة بدلا من العمل بالتوازي معها. عندما تنتهي العمليّة الجديدة تنتهي معها عمليّة الصّدفة.
نقارن بين الحالتي التاليتيْن لتوضيح المسألة:
$ top $ exec top
ننفّذ في الحالة الأولى أمر top
الذي يعرض قائمة بالعمليّات العاملة على النظام؛ ثم نضغط الزّر q
لإنهاء الأمر؛ ستلاحظ أن المحثّ يظهر من جديد. في الحالة الثّانيّة يُنفَّذ الأمر top
وتظهر قائمة بالعمليّات؛ ولكن عند الضّغط على زر q
تختفي الطرفيّة.
أمر export
يُستخدَم أمر export
لـ”تصدير” متغيّر إلى متغيّرات النّظام. متغيّرات النّظام (أو متغيّرات البيئة Environment variables) هي مجموعة من المتغيّرات تؤثّر قيّمها على سلوك البرامج أثناء تنفيذها؛ بعضها معدّ مبدئيًّا مع النّظام ويُتاح الوصول إليه لجميع البرامج. لكي يُضاف متغيّر إلى هذه المتغيّرات فيجب أن يُصدَّر إليها؛ وهذا هو عمل الأمر export.
راجع السؤال التالي من قسم الأسئلة والأجوبة ماذا يعني متغير النظام PATH؟ أو درس الطريق نحو فهم متغير المسار PATH لمعلومات أكثر ومثال على متغيّرات النّظام.
أمر history
يعرض الأمرُ لائحة بالأوامر التي نفّذها الحساب الذي تستخدمه على النظام، مع ترقيمها. تمكن إعادة تنفيذ الأمر بكتابة رقمه في اللائحة مسبوقا بعلامة تعجّب. مثلا:
$ history 13 tty 14 exec top 15 ps -ef | grep bash 16 ps -ef | grep 3817 | grep -v grep 17 ps -ef | grep bash 18 tty 19 exec top 20 ps -ef | grep bash 21 ps -ef | grep 4692 22 ps -ef | grep 4692 | grep -v 23 ps -ef | grep 4692 | grep -v grep 24 exit 25 history
لإعادة تنفيذ الأمر رقم 19
(أي exec top
):
!19
يمكننا أيضا البحثُ في سجلّ الأوامر بالضّّغط على الزّريْن Ctrl
وr
ثم البدء في كتابة الأمر الذي نبحث عنه وستظهر الأوامر الموافقة لما نكتب مباشرة مع إمكانيّة التعديل عليها.
يُحتَفَظ بلائحة الأوامر في ملف باسم bash_history.
يوجد بالمجلَّد الشخصيّ للمستخدِم. تحتفظ الصّدفة مبدئيًّا بآخر 1000 أمر نفّذها المستخدم؛ إلا أن بإمكانك تغيير هذه القيمة بالتعديل على قيمة متغيّر النّظام Environment variable الذي يحتفظ بهذه القيمة وهو HISTSIZE
. يمكن استخدام أمر export
لتعديل قيمة المتغيّر. نستخدم في المثال التالي أمر echo
لعرض قيمة المتغيّر قبل التعديل ثم نعدّله ونطبع قيمته الجديدة (لاحظ استخدام علامة $
قبل اسم المتغير عند تمريره للأمر echo
):
$ echo $HISTSIZE 1000 $ export HISTSIZE=2000 $ echo $HISTSIZE 2000
إلا أن طريقة التغيير هذه ليست دائمة؛ إذ سيعيد النّظام قيمة HISTSIZE
المبدئية إذا أعيد تشغيله أو عند الخروج من الطرفيّة. لجعل التّعديل دائما نعدّل الملف bashrc.
يدويًّا ونعيّن قيمة المتغيّر HISTSIZE
(لا تترك فراغا بين علامة =
وطرفيّ العمليّة):
HISTSIZE=2000
ملحوظة: لن يُعتمَد هذا التعديل إلا عند فتح جلسة جديدة.
أمر alias
الاختصارات Aliases هي صيغ مختصرة لأمر أطول. إن كانت ملفّات موقع الويب توجد على المسار /var/www/
ونستخدم أمر cd
للانتقال إليها على النحو التالي:
cd /var/www
فيمكننا تعريف كنية (اختصار) www
تعمل كما لو أنها أمر ويؤدي تنفيذها إلى الانتقال إلى المجلّد المذكور.
يعرض الأمر alias
إن نُفِّذ دون معطيات، أو بتمرير المعطى p-
، لائحة بالاختصارات المضبوطة. إن أردت إعداد اختصار جديد فيمكنك ذلك بذكر اسم الاختصار ثم الأمر الذي تحلّ محله على النحو التالي:
$ alias ls='ls --color=auto'
يغيّر الاختصار السّابقة عمل الأمر ls
بإضافة معطيات نريد أن تعمل مبدئيًّا؛ إظهار كلّ نوع من الملفات بلون مختلف عند تنفيذ أمر ls
.
ملحوظة: يمكنك إعطاء أي اسم تريده للاختصار؛ حتى ولو كان اسم أمر موجود سلفا؛ لذا ينبغي الحذر في اختيار أسماء الاختصاصرات. كما يمكنك أيضا إدراج أكثر من أمر في الاختصار على أن تفصل بينها بنقطة فاصلة ;
:
$ alias myNewCommand='cd /usr/bin; ls; cd; clear'
يعمل الأمر alias
على تعديل الاختصارات بالنسبة للجلسة الحاليّة دون أن تكون التغييرات دائمة. لجعل الاختصارات تعمل بعد إعادة تشغيل النّظام أو بعد الخروج من الجلسة الحاليّة أضفها إلى الملف bashrc.
الموجود في ملفك الشّخصي؛ إختصار واحد في كلّ سطر (في آخر الملفّ، تحت سطر User specific aliases and functions #
)؛ مثلا:
alias myNewCommand='cd /usr/bin; ls; cd; clear'
ستُعتمَد التعديلات بعد الخروج من الجلسة الحاليّة.
إن أردت أمثلة أكثر تفصيلا عن الاختصارات فدرس مقدّمة إلى اختصارات الطرفية (Aliases) ودوالها - أنجز مهامك بسرعة! يقدّمها.
أمر exit
ينهي كلّ من أمري exit
وlogout
جلسة الصّدفة. الفرق بين الاثنين أن أمر exit
ينهي أي صدفة مهما كان نوعها بينما ينهي أمر logout
صدفات تسجيل الدّخول؛ وهي تلك المشغَّلة تلقائيًّا عند تسجيل الدّخول من الواجهة النصيّة (الواجهة غير الرّسوميّة).
ملحوظة: الصّدفة Shell هي اسم عامّ لأي برنامج يعطيك واجهة نصيّة للتّفاعل مع النّظام. توجد أنواع عدّة من الصّدفات؛ التفاعليّة Interactive، غير التّفاعليّة، صدفات تسجيل الدّخول Login وصدفات ما بعد الدخول Non-login. صدفات تسجيل الدّخول هي جزء من عمليّة الدّخول إلى النّظام (مثلا في خادوم ليست لديه واجهة رسوميّة)؛ أما صدفات ما بعد الدخول فيشّغلها المستخدم بعد ولوجه إلى النّظام؛ ومن أمثلتها برنامج Terminal في الواجهة الرّسومية.
جرّب تنفيذ الأمر logout
في برنامج الطرفيّة في الواجهة الرسوميّة ولاحظ الرسالة التي تظهر.
أمر expand
لا تتعامل بعض البرامج المعالجة النصيّة جيّدا مع علامة الجدولة Tabulation وتحتاج بالتالي إلى استبدال المسافة بها. يؤدّي أمر expand
، الذي يأتي ضمن حزمة برامج coreutils
، هذه المهمة. سنفترض أن لدينا ملفًّا باسم numbers
(امتداد الملفات ليس ذا أهميّة كبيرة في لينكس) به أرقام تفصل بينها علامات جدولة. نستخدم أمر cat
لعرض محتوى الملفّ في الطّرفيّة:
$ cat numbers one two three four five six seven eight nine ten twelve thirteen
نضع مسافات مكان علامات الجدولة كالتالي:
$ expand --tabs=1 numbers
يحدّد المعطى tabs--
عدد المسافات التي نضعها مكان الجدولة (مسافة واحدة في المثال). تظهر النتيجة على النحو التالي:
one two three four five six seven eight nine ten twelve thirteen
لاحظ أن التغييرات لا تحدُث على الملفّ، بل تُطبع مباشرة في الطّرفيّة (التي تُعرَف بـالإدخال المعياري Standard input, stdin).
إن رغبت في الإجراء المعاكس لعمل expand
(بمعني إحلال علامات جدولة مكان المسافات) فأمر unexpand
موجود لهذا الغرض ويُستعمَل بنفس المبدأ.
أمرا head و tail
يطبع أمر head
، إن استُخدِم دون خيارات، الأسطرَ العشرة الأولى من الملفّ المذكور اسمُه في المعطى. يمكن تغيير هذا السلوك المبدئيّ باستخدام خيّار n-
متبوعا برقم يمثّل عدد الأسطر التي تود إظهارها:
$ head -n3 /etc/passwd
يعمل أمر tail
بطريقة مشابهة لكنّه بدلا من طباعة الأسطر الأولى يطبَع الأسطر الأخيرة.
$ tail -n3 /etc/passwd
يوفّر أمر tail
باستخدام خيّار f-
ميزةَ عرض الأسطر الأخيرة من ملف فور إضافتها إليه. يمكن استخدام هذه الميزة مثلا لمتابعة سجلّ Log في الوقت الحقيقيّ:
$ tail -f file.log
أمر paste
يأخذ أمر paste
ملفيّن نصّييْن بمحاذاة أسطُر الملفّ الأول منهما بجانب الثاني ووضع فاصل بين السّطريْن. إن استُخدِم الأمر دون تحديد الفاصل فسيُستخدَم الفاصل المبدئي (علامة الجدولة). إن أردت تخصيص الفاصل فيمكن استخدام الخيّار d-
. يطبع الأمر النتيجة مباشرة في الطّرفيّة دون تعديل على أي من الملفّيْن. في المثال التالي نُظهِر محتوى الملفّيْن file1
و file2
بالأمر cat
ثم نستخدم paste
لدمج الاثنيْن:
$ cat file1
1
2
3
4
$ cat file 2
one
two
three
four
$ paste -d= file1 file2
1=one
2=two
3=three
4=four
5=five
6=six
استخدمنا في المثال السّابق الخيار d-
لتحديد الفاصل؛ وهو في هذه الحالة علامة التساوي =
. لاحظ ألا وجود لمسافة بين الخيار d-
والعلامة التي اخترناها للفصل بين سطريْ الملفّين؛ كما أن أسطُر الملفّ في المعطى الأول تأتي أولا تليها علامة الفصل ثم أسطر الملف الثاني.
أمر split
يعمل الأمر split
على تقسيم ملفّ إلى ملفّيْن أو أكثر وتسميّتهما اعتمادا على لاحقة Suffix من اختيارنا. لدينا معايير تقسيم عدّة للاختيّار بينها؛ الحجم Size، عدد الأسطُر، عدد الملفات الناتجة وطبيعتها. بالنسبة للّاحقة فيمكن أن تكون أحرفا أو أرقاما.
يقسّم الأمر التالي الملف bash.pdf
إلى ملفّات حجمُ كلّ واحد منها 50KB
. تبدأ الملفّات الناتجة بـ_bash
يليها عدد.
$ split -b 50KB -d bash.pdf bash_
الخيّار b-
يحدّد معيار التقسيم بحجم 50KB
؛ الخيّار d-
يحدّد نوعيّة اللّاحقة (أعداد مرتَّبة)، bash.pdf
اسم الملفّ الذي نريد تقسيمه و_bash
السّابقة التي تبدأ بها أسماء الملفّات المتحصَّل عليها. مثال على النتجية:
bash_00 bash_01 bash_02 bash_03 bash_04 bash_05
لو لم نستخدم الخيّار d-
لكانت النتيجة كالتالي:
bash_aa bash_ab bash_ac bash_ad bash_ae bash_af
إن أردت دمج الملفّات الناتجة والحصول على الملفّ الأصلي فأمر cat
يفي بالغرض:
$ cat bash_00 bash_01 bash_02 bash_03 bash_04 bash_05 > bash.pdf
أمر tr
يُستخدَم أمر tr
لإحلال محارف Characters مكان أخرى. نستخدم في المثال التالي ملف file2
السابق وننفذ عليه أمر tr
لإحلال O
مكان o
:
$ cat file2 | tr o O
يُستخدَم الأنبوب Pipe (|
) لتوجيه نتيجة أمر إلى آخر؛ تُصبِح نتيجة الأمر اﻷول في هذه الحالة هي معطى الأمر الثاني. في المثال نطبع محتوى الملف file2
ثم نمرّره للأمر tr
؛ تظهر النتيجة في الطرفيّة:
One
twO
three
fOur
five
six
يمكن تطبيق التحويل على مجال من الأحرف؛ في المثال التالي نُحوِّل جميع الأحرف الصّغيرة في الملف file2
إلى أحرف كبيرة:
$ cat file2 | tr [a-z] [A-Z] ONE TWO THREE FOUR FIVE SIX
أمرا sort و uniq
يتيح أمر uniq
إمكانيّة إظهار الأسطر المكرّرة في ملف نصّي أو حذفها. يجب الانتباه إلى أن uniq
لا يكشف التكرار إلا إذا كانت الأسطُر المتكرّرة متتالية. لذا فإن تنفيذ uniq
يسبقه غالبا ترتيب الملفّ بالأمر sort
.
يفترض أمر sort
مبدئيّا أن السّطر يتكوّن من حقول عدّة تفصل بينها مسافات؛ ويعتمد الحقل الأول لترتيب أسطُر الملف. لاحظ المثال التالي وكيف حذف أمر uniq
أحد الأسطر بعد ترتيب الملفّ بـ sort
:
$ cat file3
Jan Doe 111
Dave Null 114
Peter Cramp 113
Dave Smith 112
Dave Null 114
$ sort file3 | uniq
Dave Null 114
Dave Smith 112
Jan Doe 111
Peter Cramp 113
يمكّننا خيار k-
متبوعا برقم يمثّل موقع الحقل في السّطر (الثاني، الثالث، …) من اختيّار حقل مغاير للحقل المبدئي في ترتيب الملف. لاحظ الترتيب في المثالين:
$ sort -k2 file3 | uniq
Peter Cramp 113
Jan Doe 111
Dave Null 114
Dave Smith 112
$ sort -k3 file3 | uniqJan Doe 111
Dave Smith 112
Peter Cramp 113
Dave Null 114
يتيح أمر sort
كذلك حذف الأسطُر المكرّرة مباشرة دون الحاجة لتمرير نتيجة الترتيب إلى uniq
وذلك باستخدام الخيّار u-:
$ sort -u file3 Dave Null 114 Dave Smith 112 Jan Doe 111 Peter Cramp 113
أمر cut
يستخرج أمر cut
أجزاءً من أسطر ويعرضها في الطّرفيّة. يعتمد الأمر على عدد البايتات (الخيار b-
)، المحارف (c-
) أو الحقول (f-
).
يتّخذ أمر cut
مبدئيا المسافة فاصلا بين الحقول؛ إلا أن بالإمكان تخصيص الفاصل بالخيّار d-
.
نستخدم في المثال التالي أمر cut
لاستخراج الحقليْن الأول والثالث من الملف etc/passwd/
اعتمادا على أنه يُفصَل بين الحقول بعلامة :
.
cut -d: -f1,3 /etc/passwd
يحدّد d-
الفاصل بين الحقول (:
)، و f-
الحقول التي نستبقيها (الحقل الأول والثالث).
خاتمة
رأينا في هذا الدّرس أساسيّات التعامل مع الطّرفيّة، كيفيةَ الحصول على المساعدة عندما نحتاج إليها وأوامرَ هامّة لمعالجة الملفات النّصيّة من سطر الأوامر.
استخدم وسائل المساعدة التي تحدثنا عنها للحصول على معلومات أكثر عن الأوامر الواردة في المقال. يمكنك استخدام مربع التعليقات في الأسفل لطرح استشكالات عن موضوع الدّرس.
ترجمة -وبتصرّف- للمقال RHCSA Series: Reviewing Essential Commands & System Documentation لصاحبه Gabriel Cánepa.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.