وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

درک پیکربندی Bash Shell هنگام راه اندازی

0 15
زمان لازم برای مطالعه: 8 دقیقه


برای سال ها، پوسته Bash [1] بخشی جدایی ناپذیر از بسیاری از توزیع های لینوکس بوده است. در ابتدا بش به عنوان رسمی انتخاب شد GNU پوسته چون معروف بود، کاملاً پایدار بود و مجموعه‌ای از ویژگی‌های مناسب را ارائه می‌داد.

امروزه وضعیت تا حدودی متفاوت است – Bash هنوز در همه جا به عنوان یک بسته نرم افزاری وجود دارد، اما جایگزین های جایگزین در نصب استاندارد شده است. به عنوان مثال، پوسته Debian Almquist (Dash) از جمله این موارد است. [2] (برای دبیان GNU/Linux) یا Zsh [3] (برای GRML [5]). در توزیع های معروف اوبونتو، فدورا، Arch لینوکس و لینوکس مینت، Bash تاکنون پوسته استاندارد باقی مانده است.

درک راه اندازی Bash و دانستن روش پیکربندی صحیح آن بسیار مفید است. این شامل سفارشی سازی محیط پوسته شما می شود، به عنوان مثال، تنظیم متغیر $PATH، تنظیم ظاهر درخواست پوسته، و ایجاد نام مستعار. همچنین نگاهی خواهیم داشت به دو فایل bashrc. و .bash_profile که خوانده می شوند. روی استارت آپ. دانش مربوطه در آزمون 1 گواهینامه موسسه حرفه ای لینوکس آزمایش شده است [4].

مقایسه ورود تعاملی و پوسته دسته ای غیر تعاملی

به طور کلی یک پوسته دو حالت کار دارد. می تواند به عنوان یک پوسته ورود به سیستم تعاملی و به عنوان یک پوسته دسته ای غیر تعاملی اجرا شود. حالت عملیات راه اندازی Bash و اینکه کدام فایل های پیکربندی خوانده می شوند را مشخص می کند [7]. روش عملکرد را می توان به شرح زیر متمایز کرد [6] – پوسته ورود به سیستم تعاملی، پوسته غیر ورود به سیستم تعاملی، پوسته ورود به سیستم غیر تعاملی، و پوسته غیرتعاملی (دسته ای) غیر ورود به سیستم.

به بیان ساده، یک پوسته تعاملی برای کاربر می خواند و می نویسد terminal. در مقابل، یک پوسته غیر تعاملی با a مرتبط نیست terminal، مانند هنگام اجرای یک اسکریپت پوسته دسته ای. یک پوسته تعاملی می تواند لاگین یا غیر لاگین باشد.

پوسته ورود تعاملی

این حالت به ورود به رایانه شما اشاره دارد روی یک ماشین محلی با استفاده از a terminal که از tty1 تا tty4 متغیر است (بستگی دارد روی نصب شما – ممکن است ترمینال های بیشتری یا کمتری وجود داشته باشد). همچنین، این حالت ورود از راه دور به رایانه را پوشش می دهد، به عنوان مثال، از طریق پوسته ایمن (ssh) به شرح زیر:

$ ssh کاربر@سیستم از راه دور

$ ssh کاربر@از راه دور سیستم فرمان از راه دور

اولین فرمان به سیستم راه دور متصل می شود و فقط یک پوسته تعاملی را باز می کند. در مقابل، فرمان دوم به سیستم راه دور متصل می شود، دستور داده شده را در یک پوسته لاگین غیر تعاملی اجرا می کند و اتصال ssh را خاتمه می دهد. مثال زیر این موضوع را با جزئیات بیشتری نشان می دهد:

$ ssh localhost زمان کار

کاربر@localhostرمز عبور:

11:58:49 تا 23 روز، 11:41، 6 کاربر، میانگین بارگیری: 0,10, 0,14, 0,20

$

برای اینکه متوجه شوید با استفاده از پوسته ورود به رایانه خود وارد شده اید یا خیر، عبارت زیر را تایپ کنید echo فرمان در شما terminal:

$ echo $0

-bash

$

برای پوسته ورود به سیستم، خروجی با یک “-” شروع می شود که با نام پوسته شروع می شود که نتیجه آن “-” است.bash” در مورد ما. برای یک پوسته غیر لاگین، خروجی فقط نام پوسته است. مثال زیر این مورد را برای دو دستور نشان می دهد echo $0، و uptime به عنوان پارامتر رشته به ssh داده می شود:

$ ssh localhost “echo $0; زمان کار”

کاربر@localhostرمز عبور:

bash

11:58:49 تا 23 روز، 11:41، 6 کاربر، میانگین بارگیری: 0,10, 0,14, 0,20

$

به عنوان جایگزین، از دستور داخلی shopt استفاده کنید [8] به شرح زیر است:

$ خرید login_shell

login_shell off

$

برای پوسته غیر ورود، دستور “off” را برمی‌گرداند و برای پوسته ورود به سیستم، “روی”.

در مورد پیکربندی برای این نوع پوسته، سه فایل در نظر گرفته شده است. اینها /etc/profile، ~/.profile و ~/.bash_profile هستند. برای توضیح دقیق این فایل ها به ادامه مطلب مراجعه کنید.

پیشنهاد می‌کنیم بخوانید:  Bash Until Loops

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

این حالت باز کردن یک جدید را توصیف می کند terminalبرای مثال xterm یا Gnome Terminal و اجرای یک پوسته در آن. در این حالت دو فایل /etc/bashrc و ~/.bashrc خوانده می شوند. برای توضیح دقیق این فایل ها به ادامه مطلب مراجعه کنید.

پوسته غیر تعاملی بدون ورود به سیستم

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

./local-script.sh

پوسته ورود غیر تعاملی

این حالت شامل ورود به رایانه از راه دور، برای مثال، از طریق Secure Shell (ssh) می شود. اسکریپت پوسته local-script.sh ابتدا به صورت محلی اجرا می شود و خروجی آن به عنوان ورودی ssh استفاده می شود.

./local-script.sh | ssh کاربر@سیستم از راه دور

شروع ssh بدون هیچ دستور دیگری یک پوسته ورود را شروع می کند روی سیستم از راه دور در صورتی که دستگاه ورودی (stdin) ssh نباشد terminal، ssh یک پوسته غیر تعاملی را راه اندازی می کند و خروجی اسکریپت را به عنوان دستوراتی که باید اجرا شوند تفسیر می کند. روی سیستم از راه دور مثال زیر دستور uptime را اجرا می کند روی سیستم از راه دور:

$ echo “تایم آپدیت” | ssh localhost

شبهterminal اختصاص داده نخواهد شد زیرا stdin a نیست terminal.

صریح@localhostرمز عبور:

برنامه های همراه با دبیان GNU/سیستم لینوکس نرم افزار رایگان هستند.

شرایط توزیع دقیق برای هر برنامه در توضیح داده شده است

فایل های فردی در /usr/share/doc/*/copyright.

دبیان GNU/لینوکس تا حدی کاملاً بدون ضمانت ارائه می شود

توسط قانون قابل اجرا مجاز است.

شما نامه جدیدی دارید

11:58:49 تا 23 روز، 11:41، 6 کاربر، میانگین بارگیری: 0,10, 0,14, 0,20

$

جالب اینجاست که ssh از a نبودن stdin شاکی است terminal و پیام روز (motd) را نشان می دهد که در فایل پیکربندی جهانی /etc/motd ذخیره شده است. به منظور کوتاه کردن terminal خروجی، گزینه “sh” را به عنوان پارامتر دستور ssh، مانند شکل زیر اضافه کنید. نتیجه این است که ابتدا یک پوسته باز می شود و دو دستور بدون نمایش motd اجرا می شوند.

$ echo “تایم آپدیت” | ssh localhost ش

صریح@localhostرمز عبور:

12:03:39 تا 23 روز، 11:46، 6 کاربر، میانگین بارگیری: 0.07، 0.09، 0.16

$$

در مرحله بعد، ما نگاهی به فایل های پیکربندی مختلف برای Bash خواهیم داشت.

فایل های راه اندازی Bash

حالت‌های مختلف Bash تعیین می‌کنند که کدام فایل‌های پیکربندی خوانده شوند روی استارت آپ:

  • پوسته ورود به سیستم تعاملی
    • /etc/profile: اگر وجود داشته باشد، دستورات فهرست شده در فایل را اجرا می کند.
    • ~/.bash_profile، ~/.bash_login، و ~/.profile (به ترتیب). دستورات اولین فایل قابل خواندن یافت شده از لیست را اجرا می کند. هر کاربر می تواند مجموعه ای از این فایل ها را داشته باشد.
  • پوسته غیر ورود به سیستم تعاملی
    • /و غیره/bash.bashrc: پیکربندی جهانی Bash. در صورت وجود آن فایل دستورات را اجرا می کند و قابل خواندن است. فقط در دبیان موجود است GNU/لینوکس، اوبونتو و Arch لینوکس.
    • ~/.bashrc: پیکربندی محلی Bash. در صورت وجود آن فایل دستورات را اجرا می کند و قابل خواندن است.

شاید دیدن این به عنوان یک نمودار مفید باشد. در حین تحقیق عکس زیر را پیدا کردیم که خیلی دوستش داریم [9].

درک پیکربندی Bash Shell هنگام راه اندازی
تصویر: config-path.png
متن: ارزیابی process برای پیکربندی Bash

فایل های پیکربندی مختلف توضیح داده شده است

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

/etc/profile

این فایل توسط پوسته Bourne (sh) و همچنین پوسته های سازگار Bourne مانند Bash، Ash و Ksh استفاده می شود. این شامل ورودی های پیش فرض برای متغیرهای محیطی برای همه کاربرانی است که به صورت تعاملی وارد می شوند. به عنوان مثال، این روی $PATH و طراحی سریع برای کاربران عادی و همچنین کاربری با نام “root” تاثیر می گذارد. مثال زیر بخشی از /etc/profile را از دبیان نشان می دهد GNU/لینوکس.

setuserpath(){

پیشنهاد می‌کنیم بخوانید:  چگونه یک فرمان را در Bash بدون تاخیر غیر ضروری زمان بندی کنیم

# دایرکتوری های مشترک برای فایل های اجرایی برای همه کاربران

مسیر=“/usr/local/bin:/usr/bin:/bin”

# تست برای کاربر ریشه برای افزودن برای برنامه های مدیریت سیستم

اگر [ `id -u` -eq 0 ]; سپس

مسیر=“/usr/local/sbin:/usr/sbin:/sbin:$PATH

دیگر

مسیر=“/usr/local/games:/usr/games:$PATH

فی

export مسیر

}

setuserpath()

# PS1 رشته خط فرمان اولیه است

اگر [ $PS1 ]; سپس

اگر [ $BASH ] && [ $BASH != “/bin/sh” ]; سپس

# پرونده bash.bashrc از قبل PS1 پیش فرض را تنظیم کرده است.

# PS1=’\h:\w\$ ‘

اگر [ -f /etc/bash.bashrc ]; سپس

. /و غیره/bash.bashrc

فی

دیگر

اگر [ `id -u` -eq 0 ]; سپس

PS1=‘#’

دیگر

PS1=‘$’

فی

فی

فی

فایل های پیکربندی بیشتر را می توان در دایرکتوری /etc/profile.d ذخیره کرد. به محض خواندن /etc/profile، آنها در پیکربندی Bash وارد می شوند.

~/.bash_profile

این فایل پیکربندی محلی زمانی که Bash به عنوان یک پوسته ورود تعاملی فراخوانی می شود خوانده و اجرا می شود. این شامل دستوراتی است که باید فقط یک بار اجرا شوند، مانند سفارشی کردن متغیر محیطی $PATH.

کاملاً معمول است که ~/.bash_profile را فقط با خطوطی مانند زیر منبع فایل .bashrc پر کنید. این بدان معناست که هر بار که وارد سیستم می شوید terminal، محتوای پیکربندی Bash محلی شما خوانده می شود.

اگر [ -f ~/.bashrc ]; سپس

. ~/.bashrc

فی

اگر فایل ~/.bash_profile وجود داشته باشد، Bash از خواندن ~/.bash_login (یا ~/.profile) صرفنظر می کند.

~/.bash_login

دو فایل ~/.bash_profile و ~/.bash_login مشابه هستند.

~/.پروفایل

اکثر توزیع های لینوکس از این فایل به جای ~/.bash_profile استفاده می کنند. برای مکان یابی فایل محلی .bashrc و گسترش متغیر $PATH استفاده می شود.

# در صورت اجرا bash

اگر [ -n $BASH_VERSION ]; سپس

# در صورت وجود bashrc

اگر [ -f $HOME/.bashrc” ]; سپس

. $HOME/.bashrc”

فی

فی

# PATH را تنظیم کنید تا در صورت وجود، سطل خصوصی کاربر را نیز شامل شود

اگر [ -d $HOME/bin” ] ; سپس

مسیر=$HOME/صندوقچه:$PATH

فی

به طور کلی، ~/.profile توسط همه پوسته ها خوانده می شود. اگر ~/.bash_profile یا ~/.bash_login وجود داشته باشد، Bash این فایل را نخواهد خواند.

/و غیره/bash.bashrc و ~/.bashrc

این فایل شامل پیکربندی Bash است و نام های مستعار محلی، محدودیت های تاریخچه ذخیره شده در .bash_history (در زیر را ببینید) و تکمیل Bash را مدیریت می کند.

# خطوط تکراری یا خطوطی که با فاصله شروع می شوند را در تاریخ قرار ندهید.

# دیدن bash(1) برای گزینه های بیشتر

HISTCONTROL=هر دو را نادیده بگیرید

# به فایل تاریخچه اضافه کنید، آن را بازنویسی نکنید

خرید -s هیستاپوند

# برای تنظیم طول تاریخچه، به HISTSIZE و HISTFILESIZE مراجعه کنید bash(1)

HISTSIZE=1000

HISTFILESIZE=2000

چه چیزی را در کدام فایل پیکربندی کنیم

همانطور که تاکنون آموخته اید، برای پیکربندی Bash نه یک فایل، بلکه گروهی از فایل ها وجود دارد. این فایل‌ها فقط به دلایل تاریخی وجود دارند – به‌ویژه روش تکامل پوسته‌های مختلف و قرض گرفتن ویژگی‌های مفید از یکدیگر. همچنین، هیچ قانون سختگیرانه ای وجود ندارد

تعریف کنید که کدام فایل برای حفظ یک قطعه مشخص از تنظیمات است. اینها توصیه هایی است که ما برای شما داریم (بر اساس روی TLDP [10]):

  • تمام تنظیماتی که می‌خواهید برای همه محیط‌های کاربران خود اعمال کنید باید در /etc/profile باشند.
  • همه نام های مستعار و توابع جهانی باید در /etc/bashrc ذخیره شوند.
  • فایل ~/.bash_profile فایل پیکربندی ترجیحی برای پیکربندی محیط های کاربر به صورت جداگانه است. در این فایل، کاربران می توانند گزینه های پیکربندی اضافی اضافه کنند یا تنظیمات پیش فرض را تغییر دهند.
  • همه نام‌های مستعار و توابع محلی باید در ~/.bashrc ذخیره شوند.

همچنین، به خاطر داشته باشید که لینوکس به گونه ای طراحی شده است که بسیار انعطاف پذیر باشد: اگر هیچ یک از فایل های راه اندازی نام برده در بالا وجود نداشته باشد. روی سیستم شما، شما می توانید آن را ایجاد کنید.

پیوندها و مراجع

  • [1] GNU باش، https://www.gnu.org/software/bash/
  • [2] پوسته Debian Almquist (Dash)، http://gondor.apana.org.au/~herbert/dash/
  • [3] Zsh، https://www.zsh.org/
  • [4] گواهینامه موسسه حرفه ای لینوکس (LPIC)، سطح 1، https://www.lpice.eu/en/our-certifications/lpic-1
  • [5] GRML، https://grml.org/
  • [6] متمایز کردن ورود به سیستم تعاملی و پوسته غیرتعاملی بدون ورود، AskUbuntu، https://askubuntu.com/questions/879364/differentiate-interactive-login-and-non-interactive-non-login-shell
  • [7] Bash Startup Files، https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html#Bash-Startup-Files
  • [8] فروشگاه ساخته شده، https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
  • [9] مقدمه یونیکس — سفارش بارگیری فایل های راه اندازی Bash، https://medium.com/@youngstone89/unix-introduction-bash-startup-files-loading-order-562543ac12e9
  • [10] لینوکس Documentation پروژه (TLDP)، https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_01.html

متشکرم

نویسنده مایل است از مشاوره جرولد روپرشت در هنگام نوشتن این مقاله تشکر کند.

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-31 05:05:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید