الغرض من الـ shell أنها توفر بيئة يمكن عن طريقها تنفيذ الـ commands
يمكن باستخدام الـ aliases أن نعدل على الأوامر الموجودة أصلا ضمن لينوكس
unalias [-a] name(s)
-a لحذف جميع الـ aliases للمستخدم الحالي ضمن الـ session الحالية
من المفيد لمدير النظام أن يقوم بالاستفادة من الـ history عند التعامل مع الـ bash shell وبالتالي لا يكتب الأوامر نفسها مرارا وتكرارا
لضبط إعدادت الـ bash history نقوم بالتعديل على الملف ~/.bashrc حيث نحدد قيم المتحولين HISTFILESIZE وHISTSIZE
بشكل افتراضي تكون قيم هذه المتحولة صغيرة ,نقوم بزيادة القيم
بشكل افتراضي تكتب bash بنهاية كل session فوق الملف الخاص بالـ history ,فإذا كنا مسجلين الدخول لأكثر من bash session سيتم حفظ آخر session فقط ,نريد أن يتم الإلحاق للملف وليس الكتابة فوقه ,لتفعيل ذلك نضيف السطر التالي بملف .bashrc : shopt -s histappend
لنفعل الكتابة بشكل مباشر من الsession إلى الملف (وبالتالي يمكن لأوامر خاصة بterminal أن يتم استخدامها في أخرى بنفس الوقت) نستخدم الأمر history –a
الأوامر التي سيتم إظهارها عن طريق الأمر history ستكون مرقمة وهذا سيفيدنا بإعادة استخدامها
Histroy 5 تظهر آخر 5 أوامر
Event Designators
نستخدمها لتنفيذ أوامر سابقة من الـ history بعد كتابة !
لتنفيذ أمر تمت كتابته مؤخرا نكتب رقمه وفقا لآخر رقم كالتالي: !-number
لتنفيذ آخر أمر !!
!ssh تقوم بتنفيذ آخر آمر يبدأ بـ sshإذا كنا نريد تنفيذ أمر يحوي كلمة ليس في أوله ,نقوم بكتابة: !?search? حيث ينفذ آخر أمر يحوي الكلمة search
إذا أخطأنا بكتابة أمر يمكن أن نستخدم: ^original^replacement^
Word Designators
تكون بعد ! وتستخدم لاختيار قسم من الأمر
يمكن أن نحدد قسم معين من التعليمة التي نعيد تنفيذها ,حيث أن كل تعليمة تقسم لأجزاء مفصولة بـ space ومرقمة بدئا من 0
ls /usr/share/doc/manpages
cd !!:1
عن طريق هذه التعليمة قمنا بأخذ ثاني قسم من التعليمة السابقة
آخر قسم يرمز له بـ $ ,يمكن أن نختار جميع الparameters التي تم استخدامها في الأمر السابق كالتالي:
!!:1*
!!:1-$
Modifiers
إضافة modifiers للتعديل على الأوامر التي نقوم باستعادتها من الـ history
تضاف بعد :
cat /usr/share/doc/manpages/copyright
cd !!:$:h
Pwd
/usr/share/doc/manpages
عن طريق h modifier قمنا باقتصاص آخر جزء من الprarmeter بعد /
يمككنا أن نأخذ آخر جزء بعد /
less !cat:$:t
حيث يتم البحث عن آخر cat command تم تنفيذه ويتم إعادة آخر جزء بعد /
p modifier نستخدمه لطباعة الأمر الذي نقوم باستعادته من الـ history وذلك للتأكد من صحته قبل أن نقوم بتنفيذه
..
لاستبدال كلمة بكلمة أخرى s/original/new/
تقوم باستبدال أول ورود للكلمة original بالكلمة new
إذا أردنا استبدال كل ورود للكملة نستخدم gs بدلا من s
في العادة عندما كنا ندخل إلى محرر نصوص فإن أحرف الأبجدية سيتم طباعتها عند ضغطها ,لكن في vim سيتم الدخول أولا إلى الـ command mode وأحرف الأبدية ستنقل المؤشر مثلا
عند الضغط على : ندخل إلى الـ: last-line mode
الآن يمكننا أن نكتب أوامر مثل :q لإغلاق الملف ,أو :w لحفظ الملف
الـ shell environment تتألف من متحولات variables ,هذه المتحولات تأخذ قيم محددة
المتحولات تستخدم من قبل البرامج فمثلا يمكن للبرامج أن تعرف أني أستخدم اللغة الأنكليزية حيث تنظر لقيمة المتحول LANG والتي تكون en_US.UTF-8
وهذا يجعل البرامج تتعامل مع المتحولات بشكل عام بدون أن تهتم بالقيمة الفعلية للمتحول
بسبب احتياجات المستخدمين والصلاحيات المسندة لهم ستكون مختلفة فإن لكل مستخدم سيكون له بيئة خاصة به ,وبالتالي يكون له variables خاصة به
مثلا أحد المستخدمين يمكن أن تكون قيمة المتحول LANG عنده هي اللغة الأنكليزية ,ومستخدم آخر تكون قيمة الـ LANG عنده هي اللغة العربية
عندما يقوم مستخدم بتسجيل الدخول يتم خلق environment خاصة بهذا المستخدم بشكل تلقائي
من أجل خلق environment خاصة بالمستخدم بعد تسجيل الدخول يتم تنفيذ ملفات محددة وهي أربع ملفات (مذكورة الملفات الأربعة في السلايد القادم)
هذه الملفات ستقوم بتعريف المتحولات الخاصة بالمستخدم
عندما يقوم مستخدم بتسجيل الدخول فإن أول shell تفتح له هي الـ login shell
/etc/profile هو ملف عام يتم قراءته عندما يقوم أي مستخدم بتسجيل الدخول
هذا الملف بقوم بإعداد متحول الـ PATH ,وإعدادات ومتحولات خاصة بكل المستخدمين
أيضا هذا الملف يقوم بتنفيذ scripts توجد في الـ directory : /etc/profile.d . فإذا أردنا أن يقوم النظام بتنفيذ script من أجل كل مستخدم عندما يقوم بالدخول للنظام نضع هذا الـ script في الـ directory السابق
الملف /etc/bashrc يتم قراءته عند تنفيذ script ويمكن ضمنه أن نقوم بتنفيذ scripts توجد في الـ directory : /etc/profile.d
الاختلاف بالطريقة التي يتم تنفيذ بها الملفين /etc/profile و/etc/bashrc يعتمد على نوع تسجيل الدخول الذي ينفذ
/etc/profile تنفذ فقط من أجل الـ shells التفاعلية
/etc/bashrc تنفذ من أجل الـ shells التفاعلية وغير التفاعلية
في لينوكس هناك نوعان من الـ login shells : الـ shells التفاعلية ,والshells غير التفاعلية
الـ shell التفاعلية هي الـ shell التي يمكن للمستخدم فيها أن يقوم بإدخال التعليمات مثل: bash prompt (أي الـ terminal العادية)
بينما الـ shell غير التفاعلية هي الـ shell التي لا يمكن أن يتفاعل معها المستخدم مثل الـ bash الخاصة بتنفيذ scripts
/etc/motd يمكن بهذا الملف أن نكتب رسائل ستظهر للمستخدم بعد أن يسجل الدخول بنجاح إلى الـ shell ,يمكن أن يتم استخدام ذلك من قبل مدراء النظام لإظهار رسائل للمستخدمين وإعطائهم تعليمات أو إرشادات معينة بدلا من إرسال أيميل لهم على سبيل المثال
Motd هي اختصار لـ message of the day
/etc/issue هو ملف نصي يتم كتابة فيه رسائل تحوي تعلميات أو إرشادات تظهر للمستخدم قبل أن يقوم بتسجيل الدخول
الملف issue.net تحوي الرسالة التي سيتم إظهارها للمستخدم عندما يقوم بتسجيل الدخول عن بعد للجهاز remotely مثلا باستخدام ssh
الملف issue هو ملف نصي لكنه يمكن أن يحوي escape sequences لإظهار معلومات معينة حول النظام
escape sequence يبدأ بـ \ وبعده محرف معين ,مثلا \d ستقوم بطباعة التاريخ الحالي
\s تظهر اسم نظام التشغيل , \n تظهر اسم الجهاز ,\o تطبع الـ domain name للجهاز
\t تطبع الوقت الحالي ,\u تطبع عدد المستخدمين المسجيلين الدخول حاليا
أسرع طريقة للحصول على معلومات عن أمر معين هي أن ننفذ الأمر مع –help , مثلا: systemctl –help
نستخدم –help عندما يكون عندنا لمحة عامة عن كيف يمكن استخدام أمر ونريد أن نعرف الـ options المتاحة