از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
درک پیکربندی Bash Shell هنگام راه اندازی
سرفصلهای مطلب
برای سال ها، پوسته 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 را خاتمه می دهد. مثال زیر این موضوع را با جزئیات بیشتری نشان می دهد:
کاربر@localhostرمز عبور:
11:58:49 تا 23 روز، 11:41، 6 کاربر، میانگین بارگیری: 0,10, 0,14, 0,20
$
برای اینکه متوجه شوید با استفاده از پوسته ورود به رایانه خود وارد شده اید یا خیر، عبارت زیر را تایپ کنید echo فرمان در شما terminal:
-bash
$
برای پوسته ورود به سیستم، خروجی با یک “-” شروع می شود که با نام پوسته شروع می شود که نتیجه آن “-” است.bash” در مورد ما. برای یک پوسته غیر لاگین، خروجی فقط نام پوسته است. مثال زیر این مورد را برای دو دستور نشان می دهد echo $0، و uptime به عنوان پارامتر رشته به ssh داده می شود:
کاربر@localhostرمز عبور:
bash
11:58:49 تا 23 روز، 11:41، 6 کاربر، میانگین بارگیری: 0,10, 0,14, 0,20
$
به عنوان جایگزین، از دستور داخلی shopt استفاده کنید [8] به شرح زیر است:
login_shell off
$
برای پوسته غیر ورود، دستور “off” را برمیگرداند و برای پوسته ورود به سیستم، “روی”.
در مورد پیکربندی برای این نوع پوسته، سه فایل در نظر گرفته شده است. اینها /etc/profile، ~/.profile و ~/.bash_profile هستند. برای توضیح دقیق این فایل ها به ادامه مطلب مراجعه کنید.
پوسته تعاملی بدون ورود به سیستم
این حالت باز کردن یک جدید را توصیف می کند terminalبرای مثال xterm یا Gnome Terminal و اجرای یک پوسته در آن. در این حالت دو فایل /etc/bashrc و ~/.bashrc خوانده می شوند. برای توضیح دقیق این فایل ها به ادامه مطلب مراجعه کنید.
پوسته غیر تعاملی بدون ورود به سیستم
این حالت هنگام اجرای یک اسکریپت پوسته استفاده می شود. اسکریپت پوسته در زیر پوسته خود اجرا می شود. به عنوان غیر تعاملی طبقه بندی می شود مگر اینکه از کاربر ورودی بخواهد. پوسته فقط برای اجرای اسکریپت باز می شود و بلافاصله پس از پایان اسکریپت آن را می بندد.
پوسته ورود غیر تعاملی
این حالت شامل ورود به رایانه از راه دور، برای مثال، از طریق Secure Shell (ssh) می شود. اسکریپت پوسته local-script.sh ابتدا به صورت محلی اجرا می شود و خروجی آن به عنوان ورودی ssh استفاده می شود.
شروع ssh بدون هیچ دستور دیگری یک پوسته ورود را شروع می کند روی سیستم از راه دور در صورتی که دستگاه ورودی (stdin) ssh نباشد terminal، ssh یک پوسته غیر تعاملی را راه اندازی می کند و خروجی اسکریپت را به عنوان دستوراتی که باید اجرا شوند تفسیر می کند. روی سیستم از راه دور مثال زیر دستور uptime را اجرا می کند روی سیستم از راه دور:
شبه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 اجرا می شوند.
صریح@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].
تصویر: config-path.png
متن: ارزیابی process برای پیکربندی Bash
فایل های پیکربندی مختلف توضیح داده شده است
برای فایل هایی که در زیر توضیح داده شده است، قوانین کلی وجود ندارد روی کدام گزینه در کدام فایل ذخیره شود (به جز گزینه های جهانی در مقابل گزینه های محلی). علاوه بر این، ترتیب خواندن فایلهای پیکربندی با انعطافپذیری در ذهن طراحی شده است، به طوری که تغییر پوستهای که استفاده میکنید تضمین میکند که همچنان میتوانید از سیستم لینوکس خود استفاده کنید. به همین دلیل چندین فایل در حال استفاده هستند که یک چیز را پیکربندی می کنند.
/etc/profile
این فایل توسط پوسته Bourne (sh) و همچنین پوسته های سازگار Bourne مانند Bash، Ash و Ksh استفاده می شود. این شامل ورودی های پیش فرض برای متغیرهای محیطی برای همه کاربرانی است که به صورت تعاملی وارد می شوند. به عنوان مثال، این روی $PATH و طراحی سریع برای کاربران عادی و همچنین کاربری با نام “root” تاثیر می گذارد. مثال زیر بخشی از /etc/profile را از دبیان نشان می دهد GNU/لینوکس.
# دایرکتوری های مشترک برای فایل های اجرایی برای همه کاربران
مسیر=“/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 محلی شما خوانده می شود.
. ~/.bashrc
فی
اگر فایل ~/.bash_profile وجود داشته باشد، Bash از خواندن ~/.bash_login (یا ~/.profile) صرفنظر می کند.
~/.bash_login
دو فایل ~/.bash_profile و ~/.bash_login مشابه هستند.
~/.پروفایل
اکثر توزیع های لینوکس از این فایل به جای ~/.bash_profile استفاده می کنند. برای مکان یابی فایل محلی .bashrc و گسترش متغیر $PATH استفاده می شود.
اگر [ -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
متشکرم
نویسنده مایل است از مشاوره جرولد روپرشت در هنگام نوشتن این مقاله تشکر کند.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-31 05:05:04