شاید شما هم مثل من دردسرهای زیادی بابت تنظیم کردن این نوع متغیرها در محیط لینوکس کشیده باشین و بعد از کلی تلاش بازم به اون نتیجهای که میخواین نرسیده باشین. اینجا من قصد دارم نحوه تنظیم این نوع متغیرها رو بر اساس تجربه و آموزشهایی که دیدم معرفی کنم. توی لینوکس این متغیرها به دو نوع تقسیم میشن:
بهطور مثال PWD از متغیرهای تعریف شده توسط سیستم هست که مقدار ذخیره شده داخلش همیشه دایرکتوریای هست که داخلش هستیم، برای مشاهده میتونی دستور زیر رو داخل ترمینال لینوکستون اجرا کنین (با دستور env میتونین همه متغیرهایی که تنظیم شده رو مشاهده کنین):
echo $PWD
ما میتونیم این متغیرها رو به ۳ نوع تعریف کنیم:
۱. متغیرهای تعریف شده به صورت محلی یا Local Environment Variable
این نوع متغیرها تا زمانی میمونن که کاربر ترمینالشو نبسته یا اگه به سروری وصل شده تا زمانی که اتصالش قطع بشه، در واقع تا زمانی که session اون ترمینال به پایان برسه. این نوع متغیرها برای تعریف شدن نیاز به هیچ فایلی ندارن و با چند دستور میشه تعریف و استفادشون کرد. در زیر نمونهای از این نوع متغیرها رو نوشتم:
MY_NAME="MZM" echo $MY_NAME unset MY_NAME echo $MY_NAME
در دستورات بالا به ترتیب اول یک متغیر تعریف کردیم و بعد چاپش کردیم که مقدار MZM رو تو صفحه ترمینال نمایش میده و بعد متغیر رو حذف کردیم و برای اطمینان از حذف شدن چاپش کردیم که مطمئنا هیچ مقداری چاپ نخواهد شد.
۲. متغیرهای تعریف شده برای یک کاربر خاص یا User Environment Variable
این نوع متغیرها برای یک کاربر خاص تعریف میشن، یعنی زمانی که اون کاربر خاص به صورت لوکال یا ریموت لاگین میکنه وجود دارن و میشه ازشون استفاده کرد. برای تعریف این نوع متغیرها میشه از فایلهای زیر استفاده کرد:
~/.bashrc ~/.bash_profile ~/.bash_login ~/.profile
همونطور که بالا نوشته شده این فایلها در مسیر دایرکتوری خانه (HOME$) کاربر قرار دارن.
۳. متغیرهای تعریف شده در سطح سیستم یا System wide Environment Variables
این نوع متغیرها در تمام سطح سیستم وجود دارن یعنی همه کاربرا میتونن ازشون استفاده کنن، برای تعریف این متغیرها باید اونارو تو یکی از فایلها یا دایرکتوری زیر تعریف کرد:
/etc/environment /etc/profile /etc/profile.d/ /etc/bash.bashrc
خب حالا بریم ببینیم هر کدوم از این فایلها برای چی استفاده میشه و چه تفاوتی با هم دارن:
فایل bashrc.
این فایل متغیرها رو در سطح کاربر تعریف میکنه. هر دفعه که کاربر یک ترمینال جدید رو باز میکنه متغیرهای تعریف شده در این فایل تنظیم خواهندشد.
فایل bash_profile. یا profile.
این فایل متغیرها رو در سطح کاربر تعریف میکنه اما زمانی اجرا میشه که کاربر تو سیستم لاگین کنه چه به صورت ریموت و چه به صورت لوکال. اگر این فایل وجود نداشته باشه از فایل bash_login. یا bashrc. استفاده میشه.
فایل etc/environment/
این فایل متغیرها رو در سطح سیستم تعریف میکنه و برای همه کاربرها متغیرهای تعریف شده در این فایل قابل دسترس هست.
فایل etc/bash.bashrc/
این فایل متغیرها رو در سطح سیستم تعریف میکنه اما فقط برای کاربرهایی که ترمینال رو باز میکنن و به لاگین کردن کاربر مربوط نمیشه و تنها با باز کردن ترمینال این کار انجام میشه.
فایل etc/profile/
این فایل متغیرها رو در سطح سیستم تعریف میکنه اما فقط برای کاربرهایی که به سیستم لاگین میکنن. این فایل همچنین تمام فایلهایی که در دایرکتوری etc/profile.d/ هستن رو هم اجرا میکنه و اگر متغیری تو اون فایلها تعریف شده باشه برای کاربر در دسترس خواهد بود.
و در پایان اگر تغییری تو هر کدوم از این فایلها دادین و خواستین تغییرات خودتون رو تست کنین میتونین از دستور source استفاده کنین. به طور مثال اگه من تغییری تو فایل bashrc. دادم برای مشاهده تغییرات باید دستور زیر رو اجرا کنم:
source ~/.bashrc