تستمتع غالبية مجتمع التكنولوجيا بالتفاعل مع الأنظمة من خلال واجهة سطر الأوامر (CMD) أو الغلاف (shell). بشكل عام، هذا يسهل عملهم. على سبيل المثال، يمكنك إنشاء أمر غلاف يمكنه تنفيذ عدة مهام تلقائيًا بدلاً من الاضطرار إلى النقر فوق عدة أزرار في واجهة المستخدم الرسومية (GUI).
عندما تقوم بتشغيل برنامج غلاف (shell) أو CMD، فإنه يجمع عدة معلومات. تحدد هذه المعلومات كيفية وصول البرنامج إلى موارد النظام الأساسية بالإضافة إلى السلوك العام. يمكنك تخزينها في مكان يسمى البيئة (environment). تتكون البيئة من سلاسل نصية تمثل أزواج المفاتيح والقيم. في هذا البرنامج التعليمي، سنستخدم Ubuntu 20.04 VPS كمثال لإرشادك أثناء إعداد متغيرات البيئة أو متغيرات الغلاف. يجب أن ينطبق هذا الدليل على توزيعات Linux الأخرى أيضًا.
ما الفرق بين متغيرات البيئة ومتغيرات الغلاف؟
عند بدء جلسة، يتم جمع المعلومات من إعدادات النظام وملفات التكوين. بعد ذلك، تصبح متاحة لعملية الغلاف والعمليات التابعة لها. هذه المعلومات عبارة عن مجموعة من أزواج المفاتيح والقيم بهذا التنسيق:
|
1 2 3 |
KEY=value KEY="Some value" KEY=data1:data2 |
أسماء المتغيرات، أي المفاتيح، حساسة لحالة الأحرف. ومع ذلك، فمن المقبول تقليديًا كتابتها بأحرف كبيرة (UPPER CASE). يساعدك هذا في تمييزها ضمن السياقات الأخرى. باستخدام حرف النقطتين الرأسيتين ‘:’ يمكنك تعيين قيم متعددة لنفس المتغير. من المهم أيضًا التأكد من عدم ترك مسافة حول علامة =. المفاتيح هي المتغيرات وتصنف إلى قسمين: متغيرات البيئة ومتغيرات الغلاف. تحتوي متغيرات البيئة على جميع المتغيرات المحددة على مستوى النظام والمتاحة لكل أغلفة أو عمليات تابعة. وهي تساعد في تمرير المعلومات إلى العمليات التي تبدأها من خلال أوامر الغلاف. تشمل متغيرات الغلاف فقط المتغيرات المحددة في جلسة الغلاف المحددة. علاوة على ذلك، فهي تشمل فقط المتغيرات المتاحة حصريًا داخل مثيل الغلاف الخاص بها.
سرد متغيرات البيئة والغلاف
افتراضيًا، يوفر الطرفي (terminal) أمرين لسرد متغيرات البيئة والغلاف: env أو printenv. يعرضان نفس المعلومات في حالتهما الافتراضية. إليك عينة من مخرجات هذه الأوامر:
باستخدام env:

باستخدام printenv:

كما ترى، المخرجات هي نفسها. يكمن الاختلاف عندما تريد قيمة مفتاح معين. عندها ستستخدم printenv مع اسم المتغير:

لرؤية قيم متعددة، يمكنك تمرير أكثر من وسيط (argument) واحد إلى الأمر printenv. ستظهر القيم بالترتيب الذي أدخلت به الوسائط:

يمكنك أيضًا استخدام الأمر echo مع اسم المتغير لعرض قيمة المتغير:

يتيح لك الأمر env تعديل البيئة التي تعمل فيها البرامج عن طريق تمرير تعريفات المتغيرات بصيغة مثل:
|
1 |
env VAR1="var 1 value" command_to_run command_options |
يتيح لك هذا تجاوز القيم أو تعيين قيم جديدة يمكن استخدامها بواسطة العملية التابعة. يسرد الأمران printenv و env متغيرات البيئة كما هو موضح أعلاه. كانت هذه محددة بالفعل لعمليات النظام. إذا كنت تريد رؤية قائمة بمتغيرات الغلاف، يمكنك استخدام الأمر set. ستؤدي كتابة set بدون أي متغيرات إلى إرجاع قائمة بجميع متغيرات البيئة، ومتغيرات الغلاف، والمتغيرات المحلية، ووظائف الغلاف:

قد تكون المتغيرات كثيرة جدًا. إذا لزم الأمر، يمكنك تقسيمها إلى صفحات باستخدام الأمر:
|
1 |
set | less |
يمكنك تنظيف المخرجات بشكل أكبر عن طريق تحديد تشغيل الأمر set في POSIX، وبالتالي عدم طباعة وظائف الغلاف. هنا نقوم بالتنفيذ في غلاف فرعي (subshell - مثيل منفصل لمعالج الأوامر) لمنع الأمر من تغيير البيئة الحالية:
|
1 |
(set -o posix; set) |
يسرد ما سبق جميع أوامر البيئة والغلاف المتاحة على النظام. يمكنك تقليص المخرجات باستخدام الأمر التالي لمحاولة الحصول على متغيرات الغلاف فقط:
|
1 |
comm -23 <(set -o posix; set | sort) <(env | sort) |
مخرجات عينة من الأمر أعلاه هي:

بينما قد يتضمن الأمر بعض متغيرات البيئة، إلا أنه سيساعدك على التمييز بين متغيرات الشل (shell) ومتغيرات البيئة. وذلك لأن الأمر set يضع قيم المتغيرات بين علامتي اقتباس، بينما لا تفعل الأوامر printenv و env ذلك. متغيرات الشل مفيدة لتعيين قيم مستمرة للجلسات، دون كتابة التغييرات بشكل دائم في الملفات.
متغيرات البيئة الشائعة
USER – المستخدم الحالي الذي قام بتسجيل الدخول.
SHELL – الشل (shell) الذي سيقوم بتفسير الأوامر التي تدخلها. الافتراضي هو bash، ولكن يمكنك تغيير ذلك.
HOME – الدليل الرئيسي (Home directory) للمستخدم الحالي.
TERM – يحدد نوع الطرفية (terminal) المراد محاكاتها. يعرض الطرفية المحاكاة الحالية.
PWD – دليل العمل الحالي.
OLDPWD – دليل العمل السابق. يساعد هذا الشل على الانتقال إلى الدليل السابق عندما تدخل أمر تغيير الدليل كـ cd.
EDITOR – محرر الملفات الافتراضي عند كتابة edit في الطرفية الخاصة بك.
LS_COLORS – يحدد رموز الألوان المستخدمة لإضافة مخرجات ملونة عند إدخال الأمر ls. يساعد في التمييز بين أنواع الملفات وتقديم معلومات للمستخدمين.
LOGNAME – اسم المستخدم الحالي.
MAIL – يحدد المسار إلى صندوق بريد المستخدم الحالي.
LANG – يحدد إعدادات اللغة المحلية (locale) الحالية.
PATH – يحدد قائمة بالأدلة للبحث فيها عند تنفيذ الأوامر. أثناء تنفيذ أمر ما، يبحث النظام في هذه الأدلة ويستخدم أول ملف قابل للتنفيذ يعثر عليه.
_ – آخر أمر تم تنفيذه.
متغيرات الشل الشائعة:
BASH_VERSION – إصدار bash، في مخرجات سهلة القراءة للبشر.
BASH_VERSINFO – إصدار bash، في مخرجات قابلة للقراءة آلياً.
BASHOPTS – قائمة الخيارات التي تم استخدامها عند تنفيذ bash. مفيد لتحديد ما إذا كانت بيئة الشل ستعمل كما تتوقع.
COLUMNS – عدد الأعمدة المستخدمة لعرض المخرجات على الشاشة.
DIRSTACK – مكدس الأدلة (stack) المتاحة مع الأوامر pushd و popd.
HOSTNAME – اسم مضيف (hostname) الكمبيوتر في الوقت الحالي.
HISTFILESIZE – عدد أسطر سجل الأوامر المخزنة في ملف.
HISTSIZE – عدد أسطر سجل الأوامر المسموح بها في الذاكرة.
IFS – فاصل الحقول الداخلي لفصل المدخلات على سطر الأوامر. وهو مسافة بشكل افتراضي.
SHELLOPTS-يُستخدم لتعيين خيارات الشل.
UID-معرف المستخدم (UID) للمستخدم الحالي.
PS1– تعريف موجه الأوامر الأساسي. يُستخدم هذا لتحديد شكل موجه الأوامر الخاص بك عند بدء جلسة شل.
PS2 – الإعلان عن موجهات أوامر ثانوية عندما يمتد الأمر عبر عدة أسطر.
تعيين أوامر البيئة والشل
أولاً، كما تم توضيحه سابقاً، سنبقي أسماء المتغيرات بأحرف كبيرة بالكامل. بعد ذلك، سنمر عبر إنشاء متغيرات الشل. وأخيراً، سنقوم بإنشاء متغيرات البيئة.
إنشاء متغيرات الشل
لنبدأ بعبارة "hello world" المعتادة. أدخل ما يلي في الطرفية الخاصة بك:
|
1 |
MY_FIRST_VAR=’Hello World!’ |
تُستخدم علامة الاقتباس لأن المتغير يحتوي على مسافة. لاحظ أننا استخدمنا علامة اقتباس مفردة لأن علامة التعجب هي حرف خاص ويجب إما تخطيها (escaped) أو وضعها في علامات اقتباس مفردة. الآن، لقد قمت بإنشاء أول متغير شل خاص بك. وهو متاح في جلسة الشل الحالية فقط. متغيرات الشل ليست متاحة لعمليات الشل الفرعية والعمليات التابعة. يمكنك طباعتها على الطرفية باستخدام الأمر set مع grep:

أو عرض القيمة باستخدام echo، والإشارة إليها باستخدام علامة $ واسم المتغير:

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

إنشاء متغيرات البيئة
يمكن تحويل متغير الشل الذي تم إنشاؤه سابقاً إلى متغير بيئة باستخدام الأمر export. أولاً، تقوم بإنشاء متغير شل. ثم، لإنشاء متغير بيئة، تحتاج إلى استخدام الأمر export. بعد تنفيذ هذا الأمر، سيكون المتغير متاحاً لعمليات الشل الفرعية والعمليات التابعة:
|
1 |
export MY_FIRST_VAR |
الآن، إذا قمت بالاختبار باستخدام الأمر printenv، فمن المفترض أن ترى المتغير والقيمة:

يمكنك أيضًا إنشاء متغير بيئي في خطوة واحدة باستخدام الصيغة التالية:
|
1 |
export MY_SECOND_VAR='This is my second variable' |
يتم تمرير المتغيرات البيئية فقط إلى غلافات العمليات الفرعية (child shells) وليس إلى الغلاف الأب (parent). يساعد هذا في منع العمليات الفرعية من التأثير على بيئة البرنامج الذي قام باستدعائها.
تخفيض وإلغاء تعيين المتغيرات
إذا كنت تتابع هذا البرنامج التعليمي حتى هذه اللحظة، فلا يزال لديك MY_FIRST_VAR معرفًا كمتغير بيئي. يمكنك إعادته إلى متغير غلاف عن طريق كتابة الأمر echo مع العلامة –n:
|
1 |
export -n MY_FIRST_VAR |
إذا قمت بالاختبار باستخدام printenv، فلن يكون هناك أي مخرجات. ومع ذلك، سيعرضه الأمر echo لأنه لا يزال متغير غلاف:

يمكنك إلغاء تعيين إما متغير غلاف أو متغير بيئي باستخدام الأمر unset. ويمكنك التأكد من أنه لم يعد موجودًا باستخدام echo. وكما ترى، فإنه لا يظهر أي مخرجات:

إعداد المتغيرات البيئية عند تسجيل الدخول
تعتمد العديد من البرامج على المتغيرات البيئية لتشغيلها. وبما أنه ليس من الفعال تعيين المتغيرات في كل مرة تريد فيها تشغيل برنامج، فإن Linux يوفر طريقة لتعريفها وحفظها في ملف. وبهذه الطريقة، يمكن تعيينها تلقائيًا عند تسجيل الدخول. يقرأ الغلاف ملفات تكوين مختلفة اعتمادًا على كيفية بدء الجلسة. وتتم مناقشة هذه الملفات أدناه:
أنواع جلسات الغلاف والاختلافات بينها
- جلسة غلاف تسجيل الدخول (Login Shell Session) – تبدأ بمصادقة المستخدم. يتم تعيين الجلسة عند تسجيل الدخول عبر SSH أو جلسة الطرفية.
- جلسة غلاف بدون تسجيل دخول (Non-login Shell Session) – تبدأ عندما تبدأ غلافًا جديدًا من داخل الغلاف الذي تمت مصادقته بالفعل. يمكنك بدء غلاف جديد باستخدام الأمر bash. لا توجد حاجة لتفاصيل المصادقة.
- جلسة غلاف تفاعلية (Interactive Shell Session) – جلسة غلاف مرتبطة بجلسة طرفية.
- جلسة غلاف غير تفاعلية (Non-interactive Shell Session) – جلسة غلاف غير مرتبطة بجلسة طرفية – تعمل في الخلفية.
يتم تصنيف الجلسة إما كجلسة تسجيل دخول أو عدم تسجيل دخول، وإما تفاعلية أو غير تفاعلية. عندما تقوم بتسجيل الدخول وتبدأ جلسة غلاف عبر SSH، فستكون تلك جلسة غلاف تفاعلية وتطلب تسجيل الدخول. وعندما تقوم بتشغيل برنامج نصي على الطرفية، فإنه عادةً ما يعمل في جلسة غير تفاعلية وبدون تسجيل دخول. يمكن أن تكون جلسة الغلاف أيضًا مزيجًا من الاثنين. إذًا، أي ملف تكوين يتم اختياره؟
تقرأ جلسة تسجيل الدخول أولاً ملفات التكوين من الدليل /etc/profile. ثانيًا، تتحقق من ملفات التكوين الخاصة بالمستخدم من الدليل الرئيسي للمستخدم. يتم قراءة الملف الأول فقط الذي يتم العثور عليه من بين ~/.bash_profile و ~/.bash_login و ~/.profile ويتم تجاهل جميع الملفات الأخرى. أما جلسة عدم تسجيل الدخول فستقرأ أولاً من /etc/bash.bashrc، يليه ~/.bashrc. وتقرأ الجلسات غير التفاعلية المتغير البيئي المسمى BASH_ENV للحصول على اسم الملف المراد استخدامه لتعريف البيئة الجديدة.
تطبيق المتغيرات البيئية
عندما تقوم بتعيين متغيراتك، انتبه دائمًا إلى الملف الذي تضعها فيه بناءً على مناقشتنا أعلاه. سيوفر هذا مرونة من خلال ضمان توفر متغيرات معينة في جلسات معينة فقط. فأنت لا تريد أن تفتقد متغيرًا مهمًا في إحدى الجلسات.
في بعض الحالات، نريد أن يكون المتغير موجودًا في جلسات تسجيل الدخول وجلسات عدم تسجيل الدخول. لحسن الحظ، فإن معظم توزيعات Linux افتراضيًا قامت بتهيئة تكوينات تسجيل الدخول لقراءة تكوينات عدم تسجيل الدخول وجعلها متاحة لعملياتك. وبالتالي، يمكنك ببساطة تعريف متغيراتك في ملفات تكوين عدم تسجيل الدخول. عادةً ما نقوم بتعيين متغيرات بيئية خاصة بالمستخدم ونريد أن تكون إعداداتنا متاحة في كل من جلسات غلاف تسجيل الدخول وعدم تسجيل الدخول. لهذا السبب، سنستخدم الملف ~/.bashrc. سنستخدم nano لتعديل الملف. أدخل ما يلي في الطرفية لفتح الملف:
|
1 |
nano ~/.bashrc |
في ملف التكوين المفتوح، يمكنك رؤية العديد من المتغيرات بالفعل. يمكنك إضافة متغيرات بيئية بنفس الطريقة التي تتبعها عند استخدام سطر الأوامر. فقط اكتب الأمر:
|
1 |
export KEYNAME=value. |
يمكنك إضافتها في أي مكان في الملف - في سطر جديد، وليس داخل دالة تكرارية. بعد ذلك، احفظ الملف وأغلقه. أي جلسة shell تالية تبدأها ستقرأ من الملف. إذا كنت تريد أن تقرأ جلسة shell الحالية الإعدادات التي أضفتها للتو دون الحاجة إلى إعادة تشغيلها، يمكنك استخدام الأمر:
|
1 |
source ~/.bashrc |
يجب عليك إضافة المتغيرات البيئية على مستوى النظام في أي مما يلي: /etc/profile أو /etc/bash.bashrc أو /etc/environment.
خلاصة القول
أخيرًا، يمكنك الآن تعيين متغيرات shell والمتغيرات البيئية والاستمتاع بالقوة الكبيرة التي تجلبها هذه الأدوات إلى VPS الخاص بك! فلها العديد من المزايا مثل أتمتة تشغيل بعض العمليات، أو تكوين النشر التلقائي الذي يتطلب معلومات المصادقة، وتمرير المتغيرات إلى العمليات التابعة، والمزيد. تساعدك المتغيرات البيئية على إخفاء البيانات الحساسة مثل معلومات المصادقة من المستودعات العامة من بين بيانات أخرى. باستخدام هذا الأساس، يمكنك إنشاء برامج نصية معقدة يمكنك تنفيذها تلقائيًا عبر سطر الأوامر دون الحاجة إلى إدخال مستمر من المستخدم.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.