آموزشچگونه

آموزش خط فرمان: قسمت سی و یکم، محیط (The Environment)

Print Friendly, PDF & Email

همانطور که قبلاً اشاره کردیم، شل (Shell) یک بدنه از اطلاعات را در طی نشست شل (Shell) با نام محیط (Environment) نگهداری می‌کند. داده‌هایی که در داخل محیط ذخیره شده است به وسیله برنامه‌ها به منظور تعیین واقعیت‌های پیکربندی استفاده می‌شوند.

در حالی که بیشتر برنامه‌ها به مقادیری که در داخل محیط ذخیره می‌شوند نگاه می‌کنند تا رفتار خود را تطبیق دهند. با دانستن این موضوع، ما می‌توانیم از محیط به منظور شخصی‌سازی محیط شل (Shell) استفاده کنیم.

چه چیز در داخل محیط لینوکس ذخیره شده است؟

شل (Shell) دو نوع اساسی از داده را در داخل محیط (Environment) ذخیره می‌کند. هر چند که در بش (Bash) انواع تا حد زیادی غیرقابل تشخیص هستند. این دو نوع شامل متغیرهای محیط (Environment Variables) و متغیرهای شل (Shell Variables) هستند. متغیرهای شل (Shell) بیت‌هایی از داده هستند که در بش (Bash) قرار گرفته‌اند و مابقی، متغیرهای محیط هستند.

علاوه بر متغیرها، شل (Shell) همچنین داده‌های برنامه‌ریزی با نام‌های Aliases و Shell Functions را ذخیره می‌کند. به یاد دارید Aliasها و توابع را توضیح داده‌ایم. در ادامه با محیط (Environment) در لینوکس بیشتر آشنا خواهیم شد.

بررسی محیط (Environment)

به منظور مشاهده اینکه چه چیزی در محیط (Environment) ذخیره شده است، ما می‌توانیم از فرمان‌های set یا printenv استفاده کنیم. فرمان set هر دو نوع متغیرهای محیط و شل را به شما نشان خواهد داد در حالی که فرمان printenv فقط متغیرهای محیط را نشان می‌دهد. از آنجایی که لیست محتویات محیط نسبتاً طولانی است، بهتر است که با کمک less آن‌ها را نمایش دهیم:

نتیجه به صورت زیر خواهد بود:

آنچه ما می‌بینیم لیستی از متغیرهای محیط و مقادیر آن‌ها می‌باشد. برای مثال متغیری با نام USER را می‌بینیم که در این مورد خاص دارای مقدار me که کاربر فعلی است را به خود اختصاص داده است. فرمان printenv نیز می‌تواند یک متغیر خاص را لیست کند:

زمانی که فرمان set بدون گزینه و آرگومان به کار می‌رود، متغیرهای شل (Shell) و محیط هر تابع دیگر تعریف شده را نشان می‌دهد.

بر خلاف فرمان printenv خروجی آن بر اساس حروف الفبا دسته‌بندی شده است. همچنین ممکن است که محتوای یک متغیر را به صورت جداگانه با فرمان echo نمایش دهیم:

یکی از عناصر محیط که هیچ‌کدام از فرمان‌های set و printenv آن را نشان نمی‌دهد alias ها هستند. برای مشاهده آن‌ها فرمان alias را بدون هیچ آرگومانی وارد می‌کنیم:

برخی از متغیرهای جذاب

محیط حاوی برخی از متغیرها می‌باشد و بر اساس نوع محیطی که در آن قرار گرفته‌اید ممکن است متفاوت باشد. برخی از این متغیرها در جدول زیر به همراه توضیح کامل آورده شده‌اند. اگر برخی از این فرمان‌ها برای شما موجود نبود نگران نباشید چون که بر اساس توزیع‌های مختلف آن‌ها تفاوت دارند.

محیط چگونه برقرار شده است

زمانی که ما به سیستم Login می‌کنیم، برنامه Bash آغاز شده و برخی از اسکریپت‌های پیکربندی را با نام startup files اجرا می‌کند که محیط پیش‌فرض (Environment) که بین کاربران به اشتراک گذاشته است را تعریف می‌کند. این کار با بارگذاری فایل‌های استارت‌آپ پوشه home که محیط شخصی کاربر ما را تعریف می‌کند، ادامه می‌یابد.

شل‌های لاگین و بدون لاگین (Login, Non-login)

دو نوع نشست شل (Shell) وجود دارد. نشست لاگین شل (Login Shell Session) و نشست بدون لاگین (Non-login Shell Session) یک نشست لاگین شل، نشستی است که در آن از ما درخواست نام کاربری و رمز عبور می‌شود. برای مثال زمانی که ما یک نشست کنسول مجازی را آغاز می‌کنیم یک نشست لاگین شل را آغاز کرده‌ایم. یک نشست بدون لاگین شل، معمولاً زمانی رخ می‌دهد که ما یک نشست ترمینال را در رابط گرافیکی، باز می‌کنیم. لاگین شل (Login Shell) فایل‌های استارت‌آپ (Start Up) همانگونه که در جدول زیر می‌بینید می‌خواند:

نشست‌های بدون لاگین شل (Non-login Shell Session) فایل‌های استارت‌آپ را همانگونه که در جدول زیر نمایش داده شده‌اند می‌خواند:

علاوه بر خواندن فایل‌های استارت‌آپ بالا، شل‌های بدون لاگین محیط خود را از پروسه والد به ارث می‌برند که معمولاً یک لاگین شل (Login Shell) است. به سیستم خود نگاهی بیندازید و ببینید که کدامیک از این فایل‌های استارت‌آپ را دارید.

به یاد داشته باشید که اکثر اسامی فایل‌هایی که در بالا لیست شده است با یک نقطه شروع می‌شود؛ به این معنی که این فایل‌ها مخفی هستند و برای نمایش آن‌ها بایستی از گزینه –a به همراه ls استفاده کنید.

فایل ~/.bashrc احتمالاً مهمترین فایل استارت‌آپ از نقطه نظر کاربران عادی است. به این دلیل که تقریباً همیشه خوانده می‌شود. شل‌های بدون لاگین (Non-login Shells) به صورت پیش‌فرض آن را می‌خواند و بیشتر فایل‌ها برای لاگین شل‌ها به شیوه‌ای نوشته شده‌اند تا ~/.bashrc را بخوانند.

فایل استارت آپ (Startup File)

اگر نگاهی به درون یک فایل عادی .bash_profile (که از یک توزیع CentOS4 گرفته شده) بیندازیم، مشابه تصویر زیر را مشاهده می‌کنیم:

خطوطی که با علامت # داخل فایل شروع می‌شوند توضیح (Comment) هستند و این خطوط توسط شل (Shell) خوانده نمی‌شود. این خطوط به منظور خواناتر شدن توسط انسان قرار داده شده‌اند.

اولین کد جالب در خط چهار اتفاق می‌افتد:

که if compound command یا فرمان شرطی ترکیبی نامیده می‌شود که در دروس اسکریپت‌نویسی آن را به تفصیل توضیح خواهیم داد ولی برای درک موضوع آن را برای شما ترجمه می‌کنیم. این خط یعنی اینکه اگر فایل ~/.bashrc موجود باشد، فایل ~/.bashrc را بخوان.

اتفاق بعدی که در فایل استارت‌آپ ما رخ می‌دهد به متغیر PATH مرتبط است.

تعجب نمی‌کنید که شل (Shell) از کجا فرمان‌های ما را هنگامی که آن‌ها را در خط فرمان وارد می‌کنیم پیدا می‌کند؟! برای مثال زمانی که ما ls را وارد می‌کنیم، آیا شل (Shell) کل سیستم ما را برای پیدا کردن /bin/ls می‌گردد؟ خیر، به جای آن شل (Shell) لیستی از پوشه‌هایی که حاوی متغیرهای PATH هستند را جستجو می‌کند و در نتیجه ls را به راحتی پیدا می‌کند.

متغیرهای PATH اغلب (نه همیشه اوقات، بسته به نوع توزیعی که از آن استفاده می‌کنیم) توسط فایل استارت‌آپ در مسیر /etc/profile با استفاده از کد زیر تنظیم می‌شود:

PATH به منظور اضافه کردن دایرکتوری $HOME/bin به آخر لیست تغییر داده شده است. این یک ثال از بسط پارامتری است، که در دروس قبلی آن را تغییر دادیم.

با اضافه کردن رشته $HOME/bin به انتهای محتویات متغیر PATH دایرکتوری $HOME/bin هنگامی که یک فرمان وارد می‌شود، به انتهای لیست پوشه‌ها اضافه می‌شود.

به این معنی که زمانی که می‌خواهیم پوشه‌ای را در داخل دایرکتوری home خود برای ذخیره برنامه‌های شخصی ایجاد کنیم، شل (Shell) آماده تطبیق دادن است. همه کاری که باید کرد این است که آن را bin نامگذاری کنیم و بقیه مهیاست.

فرمان export به شل (Shell) می‌گوید که محتویات PATH را برای پروسه‌های فرزند فراهم کن.

تغییر محیط (Modifying the Environment)

از آنجایی که ما می‌دانیم که فایل‌های استارت‌آپ کجا هستند و چه محتویاتی دارند، می‌توانیم آن‌ها را تغییر داده تا محیط خود را شخصی‌سازی کنیم.

چه فایل‌هایی را بایستی تغییر دهیم؟

به عنوان یک قانون کلی، برای اضافه کردن دایرکتوری‌ها به PATH خود و یا تعریف متغیرهای جدید محیطی، این تغییرات را در .bash_profile (و یا معادل آن بسته به نوع توزیع لینوکس – برای مثال .profile در توزیع اوبونتو) قرار دهید.

برای کارهای دیگر، تغییرات را در داخل .bashrc قرار دهید. تغییرات خود را به فایل‌ها در دایرکتوری home خودتان محدود کنید، مگر آن که مدیر سیستم باشید و می‌خواهید تغییرات پیش‌فرض را برای همه کاربران تغییر دهید. ممکن است که فایل‌هایی مثل profile موجود در /etc را تغییر دهید و در بسیاری موارد این تغییر معقول است ولی برای شروع بهتر است این تغییرات را ایجاد نکنید.

منبع: کتاب The Linux Command Line نوشته William E. Shotts

Related Articles

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Close