پرش به محتویات

Customize and use the shell environment

هدف درس

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

دانش مورد نیاز

  • تنظیم متغیرهای محیطی (مثلاً PATH) در زمان ورود یا هنگام ساقه‌زدن یک شل جدید
  • نوشتن تابع‌های Bash برای توالی دستورات پرکاربرد
  • نگهداری فایل‌های اسکل (skeleton) برای حساب‌های کاربری جدید
  • تعیین مسیر جستجوی فرمان با ترتیب صحیح دایرکتوری‌ها

کلیدواژه‌ها

/etc/profile, /etc/bash.bashrc, ~/.bash_profile, ~/.profile, ~/.bashrc, env, export, alias, function, BASH_ENV, PATH, source


متغیرهای محیطی

متغیرهای محیطی اطلاعات و پیکربندی‌هایی هستند که به شل و برنامه‌ها می‌گویند چگونه رفتار کنند. برای نمایش همهٔ متغیرهای محیطی از env یا printenv استفاده کنید.

تنظیم ساده:

NAME=Jadi
DESC='A programmer who enjoys cycling'
echo $NAME

منتشر کردن (export) متغیر تا در زیرشل‌ها نیز قابل‌دسترسی باشد:

export PATH=$PATH:/usr/local/mybin
export NAME=Jadi

برای حذف متغیر از محیط از unset استفاده کنید:

unset NAME

نکته عملی: هنگام تعریف PATH از اضافه کردن دایرکتوری‌های ناایمن مانند . در ابتدا خودداری کنید؛ ممکن است باعث اجرای دستورات مخرب شود.


دستور set و گزینه‌های مفید

دستور set برای تغییر گزینه‌های شل استفاده می‌شود؛ نمونه‌ها:

  • set -e : خروج از شل در صورت بازگشت غیر‌صفر اولین دستور در یک pipeline
  • set -n : خواندن اسکریپت بدون اجرا (syntax check)

بارگذاری / انتشار تنظیمات (source)

برای اعمال تغییرات یک فایل پیکربندی در شل جاری از source یا کوتاه . استفاده کنید:

. /etc/profile.d/custom.sh

اگر فایل را بدون source اجرا کنید، در یک زیرشل اجرا می‌شود و تغییری در شل جاری ایجاد نخواهد شد.


alias و توابع (functions)

برای میانبر دستورات از alias استفاده کنید:

alias ll='ls -alF'

توابع برای توالی‌های پیچیده‌تر مناسب‌اند:

backup() {
  tar -czf "$1-$(date +%Y%m%d).tgz" "$1"
}

توابع را در ~/.bashrc یا فایل پروفایل مناسب قرار دهید.


انواع شل‌ها و فایل‌های مربوطه

بسته به نوع راه‌اندازی شل (login vs interactive vs non-interactive) فایل‌های مختلف بارگذاری می‌شوند:

  • Login shell: /etc/profile, then ~/.bash_profile or ~/.bash_login or ~/.profile, and often ~/.bashrc at the end.
  • Interactive non-login shell (e.g., new terminal): /etc/bash.bashrc (یا /etc/bashrc) and ~/.bashrc.
  • Non-interactive shell (scripts): BASH_ENV متغیر محیطی را بررسی می‌کند و اگر به فایلی اشاره کند آن را بارگذاری می‌کند.

همچنین /etc/skel مجموعهٔ فایل‌هایی است که هنگام ساخت حساب جدید به خانهٔ کاربر کپی می‌شود.


نکات عملی

  • قرار دادن منطق سنگین یا کدهای کند در ~/.bashrc باعث کند شدن باز شدن ترمینال می‌شود — به جای آن توابع تنبل بارگذاری (lazy-loading) یا فایل‌های جداگانه استفاده کنید.
  • هنگام ویرایش فایل‌های سیستمی (/etc/profile, /etc/profile.d/*) از ایجاد متغیرهای مخرب یا تغییرات ناامن بپرهیزید. همیشه قبل از reboot یا تغییرات مهم آن‌ها را در یک جلسهٔ تست بررسی کنید.

چک‌لیست جابجایی (deployment)

  1. تغییرات را در یک حساب غیر‌حساس تست کنید (یا یک ترمینال جدید باز کنید).
  2. از اضافه‌شدن مسیرهای ناامن به PATH جلوگیری کنید.
  3. در صورت نیاز، فایل‌ها را در /etc/profile.d/ گذاشته و از حقوق دسترسی صحیح اطمینان حاصل کنید.

تمرین‌ها

  1. ~/.bashrc خود را بررسی کنید و یک alias و یک function مناسب اضافه کنید؛ سپس با source ~/.bashrc آن را بارگذاری کنید.
  2. یک اسکریپت نمونه بنویسید که با BASH_ENV اجرا شود و متغیری را در آن تنظیم کند؛ تفاوت رفتار را بین اجرای مستقیم و execution در شل بخوانید.

نکات کلیدی برای آزمون

  • بدانید چگونه PATH را به‌درستی تنظیم و منتشر (export) کنید.
  • تفاوت فایل‌های پیکربندی login و non-login را توضیح دهید (مثلاً ~/.bash_profile در مقابل ~/.bashrc).
  • بدانید source چه تفاوتی با اجرای مستقیم یک فایل دارد.