كيف تتواصل البرامج مع بيئتها - مقال لفهم متغيرات البيئة

كم مرة قمت بتحميل برنامج و قرأت عن متغيرات البيئة و احتجت أن تقوم بعمل متغير بيئة للبرنامج لجعله يعمل بالشكل المطلوب
كيف تحدد المتصفح و محررالنصوص الإفتراضي, كيف تقوم بتغير الصدفية الخاصة بك
ستستطيع الفهم والاجابه علي كل هذه الاسئله واكثر باذن الله بنفسك بعد قراءه و فهم مقال اليوم والذي سنشرح فيه متغيرات البيئة (environment variables)

يمكنك قراءه هذا المقال والاستفاده منه سواء كنت تستخدم ويندوز او لينكس او ماك
وذلك لأن environment variables توجد في جميع أنظمة التشغيل

توضيح بعض المفاهيم للمقال

قبل البدأ لنقوم بفهم ماهية المتغيرات و البيئه ليسهل علينا فهم متغيرات البيئه و الصدفية

variable المتغير

المتغير في الحاسوب يشبه بشكل كبير جدا المتغيرات التي قمنا بدارستها في مواد الرياضيات حيث يكون هنا رمز مثل x وهذ الرمز يشير الي قيمه معينه مثل رقم 5 مثلا
ويكون التعبير عنه بهذا الشكل x = 5

في اجهزه الحاسوب يشير هذا الرمز الي مكان معين او ( عنوان معين ) في الذاكره والتي بدورها تحتوي علي القيمه المردا تخزينها

اذن المتغير هو رمز يمثل ( او يشير )الي عنوان معين في الذاكره وهذا العنوان بدوره يحتوي علي القيمه المراد تخزينها في الذاكره و نستخدم الرمز كمرجع لهذا العنوان

كمثال نقرض أنك تريد أن تعمل برنامج يحيي المستخدم باسمه في كل صفحات البرنامج
هنا ستعمل متغير لأسم المستخدم و تضعه في مختلف الأماكن في برنامجك و عندما يدخل المستخدم اسمه سيعرض في هذه الأماكن

environment البيئه

لنشرح مفهوم البيئه من وجه نظر الانسان
البيئه بكل بساطه هي المحيط اي الاشياء التي تحيط بنا كبشر وتؤثر علي علينا مثل الماء والهواء والتربه والمعادن والمناخ وغيرها الكثير
وكما يمكن للبيئه ان تؤثر علي الانسان يمكن للانسان ايضا ان يؤثر علي البيئه
اذن البيئه تؤثر علينا كبشر ونحن كبشر نؤثر ايضا علي البيئه

ومن خلال الشرح السابق للبيئه يمكنك ان تقوم بتطبيق ماسبق ايضا علي البرامج
اي ان البرنامج يوجد علي الحاسوب الذي يوجد عليه برامج اخري والتي تؤثر علي بعضها البعض والتي تتاثر بدورها ايضا بهذا البرنامج
اذن البرنامج الموجود علي الحاسوب يوثر ويتاثر بالبرامج الاخري الموجوده ايضا علي الحاسوب كما نحن البشر

فيمكن للبرنامج ان يتاثر بالوقت: عن طريق تبيه المستخدم اذا كان هذا الوقت هو وقت النوم مثلا( مثال علي تاثر البرنامج بالمحيط الخاص به )
كما يمكن ان يكون هناك برنامج عند تشغيله يقوم باغلاق كل البرامج الاخرى مثلا ( مثال علي تاثير البرنامج علي المحيط الخاص به )

اذن البرامج هي مثل الانسان تقريبا توجد في بيئه معينه خاصه بها حتي تعمل والبيئه التي تعمل بها البرامج هي الحاسوب
والبشر البيئه التي يعيشون عليها هي كوكب الارض
ومع عدم وجود البيئه المناسبه للبرنامج سيؤدي ذلك الي حدوث خلل و أخطاء في طريقة عمل البرنامج

كذلك كل برنامج لديه الخصائص الخاصه به التي لي يمكن الوصول لها من خلال البرامج الأخري

و الصدفيه يمكن اعتبارها برنامج يعمل داخل البيئه تملك المتغيرات الخاصه بها

متغيرات البيئة

هي متغيرات تحتوي علي قيم متغيره متعلقة بالنظام و استخدامه تؤثر علي طريقة سيره و عمل برامجه
متواجده في كل أنظمة التشغيل مع وجود في طرق تخزين القيم و أنواعها
بإمكانك إنشائها, تعديلها , حذفها, عرض محتواها لتحصل علي معلومات عن النظام

مثال لمتغير البيئة $LANG

image

المتغير LANG يحتوي علي اللغة التي يقوم المستخدم باستخدامها
تقوم البرامج بقرائة قيمة المتغير لتعرف اللغة المفضله للعرض
حيث هنا اللغه هي الأنجليزيه و الترميز هو utf-8

متغيرات البيئة و متغيرات الصدفيه

نوعي المتغيرات في لينكس

  • متغيرات الصدفة

    • متواجدة في جلسة الصدفة الحالية فقط أي لا تستطيع استعمالها خارج نطاق الجلسة الصدفة الحالية
    • يتم تعريف قيمتها في الجلسه الحالية للطرفية
    • تستعمل للمهام ذات العمر القصير
  • متغيرات البيئة

    • يمكن الوصول لها من أي مكان
    • يتم تحديد قيمتها عند تسجيل الدخول
    • لها استعمالات دائمة تتطلب عمر افتراضي طويل

هناك قاعدة عامة بين المستخدمين و المبرمجين بتسمية متغيرات البيئة بأحرف كبيرة و متغيرات الصدفة بأحرف صغيرة , حافظ علي طرق التسميه المتعارف عليها رجاء :slightly_smiling_face:

اوامر متغيرات البيئة\الصدفة في لينكس

طريقة إنشاء المتغيرات و تعديلها

متغيرات الصدفة

نقوم بكتابة اسم المتغير متبوعا بعلامة المساواة ثم قمية المتغير

مثال لأنشاء متغير بأسم shell_x و قيمته xxx

[mo@mo-lab ~]$ shell_x=xxx
[mo@mo-lab ~]$ echo $shell_x
xxx
[mo@mo-lab ~]$

هنا قمنا بعمل متغير صدفة و عرضنا قيمته للتأكد من إنشائه

اسم المتغير$ + echo هي طريقة تستخدم لعرض قيمة المتغير سنناقش الطرق الأخري في قسم عرض المتغيرات بإذن الله

  • لاحظ أن التسميه كانت بالأحرف الصغيرة للدلالة علي أن المتغير متغير صدفة
  • لاحظ عدم وجود مسافات بين اسم المتغير و قيمته فقط علامة المساواة في المنتصف

متغيرات البيئة

نستخدم الأمر export لعمل متغير بيئة

[mo@mo-lab ~]$ export ENV_Y=yyy
[mo@mo-lab ~]$ echo $ENV_Y
yyy
[mo@mo-lab ~]$

هنا قمنا بعمل متغير بيئة بإسم ENV_Y و قيمته yyy

  • لاحظ أن التسميه كانت بالأحرف الكبيرة للدلالة علي أن المتغير متغير بيئة مع عدم و جود اهتمام بنوعية الحروف الخاصة بقيمة المتغير

  • لاحظ عدم وجود مسافات بين اسم المتغير و قيمته فقط علامة المساواة مثل طريقة أنشاء متغيرات الصدفة مع فارق إستخدام الأمر export

  • قم بتجربة إضافة مسافة قبل و بعد علامة المساواة و لاحظ ما سيحدث

  • متغير البيئة يمكن الوصول له من الصدفيه الحالية أو أي عملية فتحت من خلال الصدفية الحالية في حال اردنا جعله متواجد في أي صدفية او خدمة علي النظام نقوم بإضافته إلي أحد الملفات التي يتم قرائتها دوما مثل
    /etc/environment , /etc/profile , ~/.bash_profile , ~/.bashrc , ~/.profile , ~/.zshrc , ~/.fishrc

  • كل ملف له وقت تنفيذ معين و إضافة متغير إلي الملف ستجعله متاح وقت تنفيذ الملف شخصيا استعمل صدفية zsh لذلك اقوم بإضافة متغيراتي إلي ملف .zshrc و هو الملف الذي يتم تنفيذه عند بدأ الصدفية في حال كنت تستخدم صدفية bash بأمكانك إضافة أمر أنشاء المتغير إلي ملف ~/.bashrc

echo "export VAR=val" >> ~/.bashrc

الأمر السابق يقوم بطباعة الأمر الذي تود أن تقوم بتنفيذه و يقوم بتحويل النص إلي الملف النصي bashrc
هناك مقال قادم عن عملية التحويل في الصدفية بإذن الله

يمكنك معرفة الصدفة المستخدمة لديك عن طريق النظر إلي متغير البيئة SHELL

لتطور مهاراتك و معرفتك قم بالبحث عن الملفات بالأعلي و اعرف متي يتم تنفيذها و ما هي اسباب وجود هذه الملفات

عرض المتغيرات

عرض قيمة أي متغير

يمكنك إستخدام الأمر echo لعرض قيمة المتغير عن طريق إضافة علامة $ قبل اسم المتغير

[mo@mo-lab ~]$ echo HOME
HOME
[mo@mo-lab ~]$ echo $HOME
/home/mo
[mo@mo-lab ~]$
  • متغير HOME يحتوي علي عنوان المنزل للمستخدم الحالي
  • في المرة الأولي عند عدم إضافة $ لم يعامل HOME كمجلد و أنما كنص فقام بطابعته كما هو علي عكس المرة الثانيه طبع قيمة المتغير

عرض كل متغيرات البيئة

بأمكانك إستخدام الأمر printenv بدون أي خيارات لعرض متغيرات البيئة الحالية

[mo@mo-lab ~]$ printenv
SHELL=/bin/zsh
SESSION_MANAGER=local/mo-lab:@/tmp/.ICE-unix/960,unix/mo-lab:/tmp/.ICE-unix/960
OLDPWD=/home/mo/
.........................
GOPATH=/home/mo/go
_=/sbin/printenv
[mo@mo-lab ~]$

قمت باقتطاع جزء من المخرجات حتي لا يطول الناتج
لاحظ هنا بعض المخرجات و حاول استنتاج قيمة كل متغير أيضا قم بتجربة الأمر في طرفيتك و اخبرني ما المتغير الذي أثار فضولك شاركني في التعليقات

حسنا يمكننا الأن البحث عن المتغيرات التي قمنا بإنشائها سابقا

[mo@mo-lab ~]$ printenv | grep shell_x
[mo@mo-lab ~]$ printenv | grep ENV_Y
ENV_Y=yyy
[mo@mo-lab ~]$

قمت هنا بتحويل مخرجات الأمر printenv إلي أداة البحث grep للتأكد من و جود المتغيرين ENV_Y , shell_x
لاحظ هنا أن الموجود هو ENV_Y لأنه متغير بيئة و الأداة printenv تعرض متغيرات البيئة فقط

يمكنك ايضا استعمال الأداة printenv لعرض قيمة متغير واحد عن طريق إضافة اسم المتغير كمعطي للأداة
هناك أداة env تستطيع عرض متغيرات البيئة بالإضافة لبعض المميزات الأخري أنصحك بالإطلاع علي صفحة التوثيق الخاص بها عن طريق أداة man أو [الملخص باستخدام أداة tldr pages](خلاصة أوامر الطرفية مع tldr-pages

عرض كل المتغيرات

باستخدام الأداة set نستطيع أن نقوم بعرض جميع متغيرات الصدفة الحالية مع متغيرات البيئة السبب هو أن set أداة مدمجة مع الصدفية لذلك تستطيع الوصول لمتغيرات الصدفية الحالية

قم بالتجربه ستجد أن المخرج كبير لأحتوائه علي جميع المتغيرات و الدوال
shell

[mo@mo-lab ~]$ set | grep shell_x
shell_x=xxx
[mo@mo-lab ~]$ set | grep ENV_Y
ENV_Y=yyy
[mo@mo-lab ~]$

لاحظ هنا أن المخرج يحتوي علي متغيري البيئة و الصدفية المنشئان سابقا

تستطيع أداة set القيام بمهام إضافية غير طباعة المتغيرات الأخري أنصحك بالإطلاع علي صفحة التوثيق الخاص بها عن طريق أداة man أو الملخص باستخدام أداة tldr pages

إليك بعض متغيرات البيئة المفيدة التي أنصحك بتصفحها و القرائة عنها
USER , HOME, EDITOR, UID, terminal

حذف المتغير

أداة unset تقوم بحذف المتغير عن طريق إعطاء اسم المتغير كمعطي

[mo@mo-lab ~]$ echo $shell_x $ENV_Y
xxx yyy
[mo@mo-lab ~]$ unset shell_x
[mo@mo-lab ~]$ echo $shell_x $ENV_Y
yyy
[mo@mo-lab ~]$ unset ENV_Y
[mo@mo-lab ~]$ echo $shell_x $ENV_Y

[mo@mo-lab ~]$

في البداية قمت بطباعة كلا المتغيرين الذي قمت بإنشائهم من البداية
لاحظ اختفاء القيمه المعروضه ل shell_x بعد تنفيذ أمر unset عليه و بالمثل مع المتغير ENV_Y

الخيار v يسمح لك بحذف أكثر من متغير دفعة واحدة
unset -v var1 var2 var3

أمر unset سيقوم بإزالة المتغير من الجلسه الحالية و لكن لا تنسي في حال قمت بأضافته إلي ملف من المفات التي يتم تنفيذها دوما سيعود مره اخري لذلك في حال أردت حذف متغير قم بأزالته ايضا من الملف الذي قمت بأضافته اليه

الخاتمة

تعلم نظام تشغيلك و معرفة خباياه تسهل التعامل معه حاول دائما أن تتعلم المفهوم و ليس الحل قد تواجهك العديد من المشاكل المتعلقة بمتغيرات البيئة البحث عن الحل سيستغرق وقت أقل مع الحصول علي معرفه أقل بينما فهم طريقة عمل متغيرات البيئة سيسهل عليك حل الكثير من المشاكل المتعلقه بطريقة عمل البرامج

أيضا غالبية المشاكل المتعلقة باستيراد المكتبات الخاصة بالبرامج و لغات البرمجة تتعلق بمتغير بيئة يحتوي علي مسار المكتبات

المقال لا يذكر كل ما يتعلق بالمتغيرات و أنما هو نبذه لتحصل علي فكرة مبسطة إذا أردت الإستزادة بإمكانك الإطلاع علي المصادر و الروابط الأخري بالأسفل

ولا أنسي شكر صديقي محمود لقيامه بتبسيط شرح البيئه و المتغيرات , قبل التبسيط كنت قد اعتمدت علي تعريف ويكبيديا الغير مفهوم :slight_smile:

و السلام عليكم و رحمة الله و بركاته

المصادر

https://help.ubuntu.com/community/EnvironmentVariables
http://www.ee.surrey.ac.uk/Teaching/Unix/unix8.html

https://scribe.nixnet.services/@dichharai/environment-variable-vs-shell-variable-ebf18fa821a4
https://scribe.bus-hit.me/printenv-env-set-bash-commands-a-bonus-part-ii-e5f4c693d540
https://scribe.bus-hit.me/printenv-env-set-bash-commands-a-bonus-part-ii-e5f4c693d540

الترخيص

هذا الموضوع يتبع ترخيص جميع مواضيع أسس: CC-BY-SA 4.0

3 إعجابات

@muji انتظر نقدك البناء أخ معاذ

إعجاب واحد (1)

شكرا للمقال ولثقتك في شخصي.
مقدمة ممتازة، بأسلوب مشوق، وأيضا جزء المقال الأول حول المصطلحات فكرة سديدة. شكر الله لك.

بما أن باقي المقال يتحدث عن واحدة من أساسيات علم الحوسبة، فأفضل أن ينال حقه الكافي من الاطلاع والاستيعاب. لذلك ستكون لي عودة مطولة له إن شاء الله.

اقتراحي لك اليوم هو إضافة الصورة المميزة للمقال، حتى لو كانت بسيطة، لكنها تمثل جزءا أساسيا عند إضافتها لعنوان المقال.

إعجابَين (2)

شكرا لك مقدما
في المقالات القادمة سأحاول عمل صور مناسبة للمقال

أظنني أخذت الفكرة الكافية عن المقال بعد اطلاع يفيه حقه.
أحسنت الطرح والسرد صديقي محمد. فهرس المقال أوضح اهتمامك بهيكلة المقال وتنظيمه.

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

لدي نصيحة متعلقة بالتدقيق اللغوي: اِستخدم إضافة LanguageTool، هي موجودة بصفتها إضافة للمتصفحات وأيضا متوفرة لليبر أوفيس. ستساعدك كثيرا على التدقيق وضبط القواعد.

أتمنى قراءة مقالات أخرى من كتابتك. حبذا لو تكون حول برمجيات تنظيم المهام والانتاجية بما أنك متقدم في هذا الموضوع.

شكر الله لك.

انا بالفعل استخدم هذه الإضافة , كل الشكر لكرمك في إعطاء الملاحظات و الحمد لله أنك تري أن اللغة موجودة لأني أظن أن مهاراتي في االلغة منخفضة و تحتاج الكثير من التحسين

بإذن الله تقرأ مني ما يسرك في المقالات القادمة

إعجاب واحد (1)

مقال رائع بمعنى الكلمة.
سرد وشرح ممتاز.
شكرا لك يا محمد.

معلومة جديدة ومفيده.

إعجاب واحد (1)