هنگامی که از طریق یک نشست شل با سرور خود تعامل دارید، اطلاعات زیادی وجود دارد که شل برای تعیین رفتار خود و دسترسی به منابع جمعآوری میکند. برخی از این تنظیمات در تنظیمات پیکربندی قرار دارند و برخی دیگر توسط ورودی کاربر تعیین میشوند.
یکی از راههایی که شل برای ردیابی تمامی این تنظیمات و جزئیات استفاده میکند، از طریق ناحیهای است که به آن محیط گفته میشود. محیط ناحیهای است که شل هر بار که یک نشست جدید آغاز میکند، آن را میسازد و شامل متغیرهایی است که ویژگیهای سیستم را تعریف میکنند.
در این راهنما، ما در مورد نحوه تعامل با محیط و خواندن یا تنظیم متغیرهای محیطی و شل به صورت تعاملی و از طریق فایلهای پیکربندی صحبت خواهیم کرد.
توجه: این آموزش در جدیدترین توزیعهای لینوکس از جمله Ubuntu 22.04 LTS، Ubuntu 24.04 LTS، Debian 12، CentOS Stream 9، و Rocky Linux 9 اعتبارسنجی شده است. تمامی دستورات و مثالها در سیستمهای مدرن لینوکس با Bash 5.x و نسخههای جدیدتر کار میکنند.
اگر میخواهید در سیستم محلی خود یا یک سرور از راه دور همراه با این راهنما پیش بروید، ترمینال را باز کرده و دستورات را در آنجا اجرا کنید.
نکات کلیدی
قبل از اینکه وارد جزئیات شویم، نکات اساسی در مورد متغیرهای محیطی و شل در لینوکس به شرح زیر است:
-
متغیرهای محیطی توسط فرآیندهای فرزند به ارث برده میشوند و بر رفتار سراسری سیستم تأثیر میگذارند، در حالی که متغیرهای شل تنها برای نشست شل فعلی محلی هستند.
-
از دستورات
printenvیاenvبرای مشاهده متغیرهای محیطی و ازsetبرای مشاهده تمام متغیرهای شل و محیطی استفاده کنید. -
دستور
exportمتغیرهای شل را به متغیرهای محیطی تبدیل میکند و آنها را برای فرآیندهای فرزند قابل دسترسی میسازد. -
برای پایدار کردن متغیرها در نشستهای بعدی، آنها را به فایلهای پیکربندی شل مانند
~/.bashrcیا~/.profileاضافه کنید. -
درک محدوده و ارث بری متغیرها برای مدیریت صحیح پیکربندی و امنیت بسیار مهم است.
چگونگی کارکرد محیط و متغیرهای محیطی
هر بار که یک نشست شل آغاز میشود، فرآیندی برای جمعآوری و ترکیب اطلاعاتی که باید برای فرآیند شل و فرآیندهای فرزند آن در دسترس باشد، انجام میشود. این اطلاعات از فایلها و تنظیمات مختلف سیستم به دست میآید.
محیط، واسطهای است که از طریق آن فرآیند شل میتواند تنظیمات را دریافت یا تنظیم کند و به نوبه خود این تنظیمات را به فرآیندهای فرزند خود منتقل کند.
محیط به صورت رشتههایی پیادهسازی میشود که نمایانگر جفتهای کلید-مقدار هستند. اگر چندین مقدار ارسال شود، معمولاً با استفاده از کاراکتر دو نقطه (:) جدا میشوند. هر جفت به طور کلی به این شکل خواهد بود:
اگر مقدار حاوی فضای سفید مهمی باشد، از کوتیشن استفاده میشود:
در این سناریوها، کلیدها متغیرهایی هستند که میتوانند از دو نوع باشند: متغیرهای محیطی یا متغیرهای شل.
-
متغیرهای محیطی متغیرهایی هستند که برای شل فعلی تعریف شدهاند و توسط هر شل یا فرآیند فرزند به ارث برده میشوند. این متغیرها برای انتقال اطلاعات به فرآیندهایی که از شل راهاندازی میشوند، استفاده میشوند.
-
متغیرهای شل متغیرهایی هستند که تنها در شلای که در آن تنظیم یا تعریف شدهاند، وجود دارند. اینها معمولاً برای ردیابی دادههای موقتی مانند دایرکتوری کاری فعلی استفاده میشوند.
چاپ متغیرهای شل و محیطی
هر نشست شل، متغیرهای شل و محیطی خود را ردیابی میکند. میتوانیم این متغیرها را به چندین روش مشاهده کنیم.
برای مشاهده لیستی از تمام متغیرهای محیطی، میتوانیم از دستورات env یا printenv استفاده کنیم. در حالت پیشفرض، این دستورات باید دقیقاً به یک شکل عمل کنند:
در اینجا متغیرهای مختلف محیطی در خروجی آورده شده است که به طور معمول شامل مقادیری مشابه با موارد زیر هستند:
برای مشاهده متغیرهای شل، از دستور set استفاده میکنیم. اگر set را بدون پارامتر اضافی وارد کنیم، لیستی از تمام متغیرهای شل، محیطی، متغیرهای محلی و توابع شل دریافت خواهیم کرد.
ایجاد متغیرهای شل
حال بیایید یک متغیر شل را در نشست فعلی خود تعریف کنیم. این کار به راحتی انجام میشود؛ فقط کافی است نام و مقداری برای آن مشخص کنیم. برای مثال، ما از حروف بزرگ برای نام متغیر استفاده میکنیم و آن را به یک رشته ساده اختصاص میدهیم:
در اینجا از کوتیشنها استفاده کردهایم زیرا مقدار متغیر حاوی یک فضای خالی است. علاوه بر این، از کوتیشنهای تکی استفاده کردهایم چون علامت تعجب در شل bash یک کاراکتر خاص است که در غیر این صورت به تاریخچه bash گسترش مییابد.
ایجاد متغیرهای محیطی
حال بیایید متغیر شل خود را به یک متغیر محیطی تبدیل کنیم. برای این کار، باید متغیر را صادر (export) کنیم. دستور مربوطه به این صورت است:
حال اگر دوباره دستور printenv را اجرا کنیم، متغیر جدید ما به عنوان یک متغیر محیطی نمایش داده خواهد شد.
پاکسازی و حذف متغیرها
برای حذف یک متغیر شل یا محیطی، میتوانیم از دستور unset استفاده کنیم:
این دستور باعث میشود که متغیر دیگر تنظیم نشده و به هیچ عنوان در دسترس نباشد.
تنظیم متغیرهای محیطی در زمان ورود
بسیاری از برنامهها از متغیرهای محیطی برای تعیین نحوه عملکرد خود استفاده میکنند. شما نمیخواهید هر بار که یک نشست شل جدید باز میکنید، متغیرهای مهم را دوباره تنظیم کنید. برای این کار، باید متغیرها را به طور خودکار در فایلهای پیکربندی شل تعریف کنیم.
ملاحظات امنیتی برای متغیرهای محیطی
متغیرهای محیطی میتوانند اطلاعات حساس مانند کلیدهای API، گذرواژههای پایگاه داده و توکنهای احراز هویت را شامل شوند. بنابراین درک ملاحظات امنیتی برای حفاظت از سیستم و برنامههای شما بسیار مهم است.
بهترین شیوههای امنیتی:
-
هیچگاه اطلاعات حساس را در فایلهای پیکربندی که به کنترل نسخه ارسال میشوند، به صورت متن ساده ذخیره نکنید.
-
از مجوزهای مناسب برای فایلهای پیکربندی حاوی متغیرهای محیطی استفاده کنید.
-
از روشهای امن برای ارسال اعتبارنامهها مانند مدیران اعتبارنامه یا فایلهای پیکربندی رمزگذاری شده استفاده کنید.
رفع مشکلات رایج
هنگام کار با متغیرهای محیطی و شل، ممکن است با چندین مشکل رایج مواجه شوید. در اینجا راهحلهایی برای مشکلات متداول آورده شده است.
نتیجهگیری
متغیرهای محیطی و شل همیشه در نشستهای شل شما حضور دارند و میتوانند بسیار مفید باشند. این متغیرها راهی برای یک فرآیند والد برای تنظیم جزئیات پیکربندی برای فرآیندهای فرزند خود فراهم میکنند و روشی برای تنظیم گزینهها خارج از فایلها ارائه میدهند.

