لینوکس

فایل bashrc. در لینوکس چیست؟ توضیح کامل پیکربندی

مقدمه

فایل .bashrc، یک اسکریپت Shell خاص-کاربر است که شل Bash هر بار که نشست تعاملیِ غیر-Loginای را شروع می‌کند—مانند باز کردن پنجره Terminal جدید—می‌خواند و اجرا می‌کند. این فایل در دایرکتوری خانه شما در ~/.bashrc (که به /home/your_username/.bashrc بسط می‌یابد) زندگی می‌کند؛ و مکان استاندارد برای ذخیره Aliasها، توابع، متغیرهای محیطی و تنظیمات Promptهایی است که خط فرمان‌تان را شخصی‌سازی می‌کنند. اگر تا حالا با Terminal لینوکس کار کرده باشید، این اسکریپت کوچک، کلید کارآمدتر کردن آن است.

در این مقاله یاد می‌گیرید فایل .bashrc چیست، کجا پیدایش کنید و چطور امن ویرایشش کنید. می‌بینید Bash چگونه تصمیم می‌گیرد کدام فایلهای راه‌اندازی را بخواند؛ .bashrc چگونه با .bash_profile، .profile و .zshrc تفاوت دارد؛ و چطور Aliasهای صرفه‌جوی زمان بسازید، توابع Shell بنویسید، Prompt خودتان را سفارشی کنید و $PATH خودتان را مدیریت کنید. هم‌چنین فایل .bashrc نمونهٔ کامل و آماده-کپی و بخش عیب‌یابی برای بازیابی وقتی ویرایشی شل‌تان را می‌شکند دریافت می‌کنید.

نکات کلیدی

  • فایل .bashrc، اسکریپت شخصی Shell است که هر بار باز کردن Terminal تعاملیِ غیر-Login، محیط شما را خودکار پیکربندی می‌کند.
  • هدف اصلیش افزودن کارایی—from طریق Aliasهای صرفه‌جوی زمان، توابع قابل استفاده مجدد، متغیرهای محیطی و Prompt سفارشی است.
  • .bashrc توسط Shellهای تعاملیِ غیر-Login خوانده می‌شود؛ در حالی که .bash_profile (یا .profile) یک‌بار هنگام Login خوانده می‌شوند—which تمایز هسته‌ای بین این دو فایل است.
  • بیشتر پیکربندی‌های Login، صریحاً ~/.bashrc را از ~/.bash_profile Source می‌کنند تا تنظیمات‌تان در هر دو نشست Login و غیر-Login بارگذاری شود.
  • همیشه قبل از ویرایش، از فایلتان بکاپ بگیرید (cp ~/.bashrc ~/.bashrc.bak)؛ چون یک خطای سینتکس ساده می‌تواند شل‌تان را از شروع شدن باز بدارد.
  • بعد از ویرایش، source ~/.bashrc (میان‌برش ~/.bashrc . است) را اجرا کنید تا تغییرات بدون باز کردن Terminal جدید روی نشست فعلی اعمال شوند.
  • برای نام مستعار سادهٔ دستور از Alias استفاده کنید؛ اما وقتی به آرگومان، منطق شرطی یا چند قدم نیاز دارید به تابع سوییچ کنید.
  • هنگام افزودن به $PATH، همیشه مقدار موجود را شامل کنید (export PATH="$HOME/bin:$PATH") تا Path سیستمی را پاک نکنید.
  • Zsh به‌جای ~/.bashrc از ~/.zshrc استفاده می‌کند؛ اگر شل عوض کنید، Aliasها، توابع و Exportهایتان را مهاجرت می‌دهید—نه اینکه همان فایل را استفاده مجدد کنید.
  • اگر .bashrc خراب شما را قفل کند، با bash --norc (یا bash --noprofile --norc) شل تمیزی شروع کنید تا فایل را امن رفع کنید.

فایل bashrc. چیست؟

فایل .bashrc اسکریپت Shellای است که شل Bash هر وقت تعاملی شروع می‌شود اجرایش می‌کند. به بیان ساده، هر بار پنجره Terminal جدیدی باز می‌کنید، Bash دستورات درون این فایل را می‌خواند و اجرا می‌کند. این آن را به مکان ایده‌آلِ پیکربندی محیط شخصی لینوکسی‌تان تبدیل می‌کند.

به شما اجازه ذخیره و اعمال خودکار این‌ها را می‌دهد:

  • Aliasهای دستور: میان‌برهایی برای پرکاربردترین دستورات.
  • توابع Shell: دستورات سفارشی پیچیده‌تری که آرگومان می‌پذیرند.
  • Promptهای سفارشی: تغییر ظاهر و حس Prompt دستور.
  • متغیرهای محیطی: تنظیم Pathها و پیکربندیها برای برنامه‌های دیگر.

این فایل مخفی‌ای است که در دایرکتوری خانه کاربر (~/) قرار دارد؛ که دلیل عدم نمایشش با دستور ls ساده همین است. نقطهٔ ابتدای نام فایل، قرارداد دیرینهٔ Unix برای فایلهای پیکربندی «مخفی» است؛ و دلیل اینکه تنظیمات خاص-کاربرِ شل از روزهای اول Unix در Dotfileهایی مثل .bashrc زندگی کرده‌اند.

bashrc. کجا قرار دارد؟

فایل .bashrc در دایرکتوری خانه کاربرتان قرار دارد. مسیر کامل معمولاً /home/your_username/.bashrc است—which با میان‌بر ~/.bashrc به آن می‌رسید. چون نام فایل با نقطه شروع می‌شود، از فهرست دایرکتوری معمولی مخفی است؛ پس برای دیدنش فلگی لازم دارید.

برای فهرست کردن همه فایلهای دایرکتوری خانه‌تان—including مخفی‌ها—از ls -a استفاده کنید:

ls -a

خروجی شامل Dotfileهای دایرکتوری خانه‌تان—with .bashrc در میان—است:

Output
.   .bash_history  .bashrc   .config    .local     .ssh
..  .bash_logout   .cache    .gnupg     .profile

در برخی نصب‌های مینیمال یا سروری، ممکن است فایل .bashrc هنوز وجود نداشته باشد. اگر ls -a را اجرا کردید و ندیدیدش، می‌توانید با دستور touch بسازیدش:

touch ~/.bashrc

وقتی فایل وجود داشت، می‌توانید بازش کنید و پیکربندی‌هایتان را اضافه کنید.

bashrc. کِی اجرا می‌شود؟

فایل .bashrc هر وقت Bash شل تعاملی‌ای را شروع کند—which Login نیست—اجرا می‌شود؛ که رایج‌ترین حالت روی دسکتاپ است: باز کردن پنجره یا تب Terminal جدید. طبق مرجع رسمی GNU Bash، شل تعاملیِ غیر-Login «دستورات را از ~/.bashrc می‌خواند و اجرا می‌کند—اگر آن فایل وجود داشته باشد».

نکته: نشست استاندارد SSH یعنی (ssh user@host) شل تعاملیِ Login باز می‌کند؛ که .bash_profile یا .profile را می‌خواند—not مستقیم .bashrc. تنظیمات .bashrc شما همچنان در نشستهای SSH اعمال می‌شوند؛ چون بیشتر توزیعها .bash_profile (یا .profile)ای عرضه می‌کنند که ~/.bashrc را خودکار Source می‌کند.

کاری که .bashrc نمی‌کند، اجرای خودکار برای شلهای Login (که به‌جایش .bash_profile یا .profile را می‌خوانند) یا اجرای غیر-تعاملی اسکریپت است. بخش بعدی دقیقاً توضیح می‌دهد Bash چگونه بین این فایلها انتخاب می‌کند.

فایلهای راه‌اندازی Bash چگونه کار می‌کنند

وقتی نشست Shellای را شروع می‌کنید، Bash به‌تصادف دنبال .bashrc نمی‌گردد. Bash ترتیب مشخصی را برای تصمیم‌گیری درباره کدام فایلهای پیکربندی دنبال می‌کند؛ و آن ترتیب به اینکه شل Login است یا غیر-Login و تعاملی است یا غیر-تعاملی بستگی دارد.

شلهای Login در مقابل غیر-Login

تمایز بین شلهای Login و غیر-Login تعیین می‌کند Bash کدام فایلها را بخواند؛ پس ارزشش را دارد قبل از ویرایش هر چیزی بفهمیدش:

  • شل تعاملیِ Login (مثلاً اتصال با SSH یا Login در Console متنی): Bash اول /etc/profile را می‌خواند؛ سپس به‌ترتیب دنبال ~/.bash_profile، ~/.bash_login و ~/.profile می‌گردد و فقط اولین موردی را که پیدا کند اجرا می‌کند.
  • شل تعاملیِ غیر-Login (مثلاً باز کردن پنجره Terminal جدید روی دسکتاپ): Bash ~/.bashrc را می‌خواند و اجرا می‌کند. این رایج‌ترین سناریو برای کاربران دسکتاپ لینوکس است.

نکته macOS: Terminal.app و iTerm2 روی macOS به‌طور پیش‌فرض شلهای Login باز می‌کنند؛ یعنی هنگام باز کردن پنجره Terminal، .bash_profile را می‌خوانند—to‌جای .bashrc. این برعکس بیشتر شبیه‌سازهای Terminal لینوکس (GNOME Terminal، Konsole و مشابه) است. اگر روی macOS از Bash استفاده می‌کنید، سفارشی‌سازی‌هایتان را در ~/.bash_profile بگذارید—یا ~/.bashrc را از آن Source کنید.

  • شل غیر-تعاملی (مثلاً اجرای اسکریپت): Bash به‌طور پیش‌فرض نه .bashrc و نه .bash_profile را می‌خواند. به‌جایش متغیر BASH_ENV را چک کرده و هر فایلی را که نام ببرد Source می‌کند.

وقتی شل تعاملیِ Login خارج می‌شود، Bash هم ~/.bash_logout را در صورت وجود می‌خواند؛ که مکان مفیدی برای دستورات پاک‌سازی است.

ترتیب اجرای فایلهای راه‌اندازی Bash

با کنار هم گذاشتن قوانین، ترتیب خواندن فایلها توسط Bash به نوع نشست بستگی دارد. زنجیره شماره‌دار زیر، نشست Login تعاملیِ معمول را—which مسیری است که اغلب مردم را سردرگم می‌کند—ردیابی می‌کند:

۱. /etc/profile اول اجرا می‌شود؛ و تنظیمات Loginِ در-سطح-سیستم را برای هر کاربری اعمال می‌کند.
۲. Bash سپس اولین فایلی را که در میان ~/.bash_profile، ~/.bash_login و ~/.profile پیدا کند می‌خواند.
۳. آن فایل Login معمولاً قطعه کوچکی شامل می‌شود که صریحاً ~/.bashrc را Source می‌کند (در پایین نشان داده شده)؛ پس تنظیمات تعاملی‌تان هم بارگذاری می‌شود.
۴. برای شل تعاملیِ غیر-Login، Bash قدمهای ۱ و ۲ را رد کرده و مستقیم ~/.bashrc را می‌خواند. بیشتر توزیعها هم ~/.bashrc دارند که فایل در-سطح-سیستم را برای پیش‌فرضهای مشترک Source می‌کند (/etc/bash.bashrc روی Debian/Ubuntu، /etc/bashrc روی RHEL/Fedora).

بیشتر توزیعها ~/.bash_profile یا ~/.profileای عرضه می‌کنند که صریحاً چک می‌کند و ~/.bashrc را اجرا می‌کند—which محیط شما را بین نشستهای Login و غیر-Login یکپارچه می‌کند. قطعه معمول به این شکل است:

# درون ~/.bash_profile: اگر ~/.bashrc وجود دارد بارگذاری‌اش کن
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

بدون این قطعه، Aliasها و توابعی که در .bashrc گذاشتید در نشست Login مربوط به SSH در دسترس نمی‌بودند؛ که منبع مکرر سردرگمی است.

bashrc. در مقابل bash_profile. و profile.: تفاوت‌های کلیدی

نقطه سردرگمی بزرگی، بحث .bashrc در مقابل .bash_profile است—with .profile که گزینه سومی اضافه می‌کند. جدول زیر فایلهای اصلی پیکربندی را مقایسه می‌کند تا تصمیم بگیرید هر تنظیم به کجا تعلق دارد:

فایلنوع شلکِی اجرا می‌شودمورد استفاده معمول
/etc/bash.bashrc (Debian/Ubuntu) یا /etc/bashrc (RHEL/Fedora)در-سطح-سیستمشل تعاملیِ غیر-Loginِ هر کاربرAliasها و توابع پیش‌فرض برای همه کاربران سیستم.
~/.bashrcخاص-کاربرشلهای تعاملیِ غیر-Login یک کاربرفایل اصلی برای Aliasها، توابع و سفارشی‌سازیهای Prompt شخصی.
~/.bash_profileخاص-کاربرشل Login یک کاربرمتغیرهای محیطی و دستوراتی که باید یک‌بار به‌ازای هر نشست اجرا شوند.
~/.profileخاص-کاربرجایگزینِ ~/.bash_profileنسخه عمومی‌تری که شلهای دیگر—نه فقط Bash—می‌توانند استفاده کنند.

برای سفارشی‌سازیهای روزمرهٔ Terminal مثل Aliasها و تنظیمات Prompt، ~/.bashrc فایل درست برای ویرایش است. برای متغیرها و دستوراتی که فقط لازم است یک‌بار هنگام Login تنظیم شوند، از ~/.bash_profile یا ~/.profile استفاده کنید.

نحوه باز کردن و ویرایش bashrc.

قبل از هر تغییری، باید بکاپ بسازید. یک خطای سینتکس ساده در .bashrc می‌تواند جلوی درست شروع شدن Terminalتان را بگیرد؛ پس بکاپ، تور امنیتی شماست.

اولین قدم ساخت آن بکاپ با دستور cp است:

cp ~/.bashrc ~/.bashrc.bak

اگر تا حالا به مشکل خوردید، می‌توانید این بکاپ را بازیابی کرده و به شل کارکردنی برگردید.

با nano

nano ویرایشگری کاربرپسند است که به‌طور پیش‌فرض روی بیشتر توزیعها نصب است. فایل را با دستور زیر باز کنید:

nano ~/.bashrc

ویرایش‌هایتان را اعمال کنید؛ سپس Ctrl+O و بعد Enter را برای ذخیره و Ctrl+X برای خروج بزنید. چون nano میان‌برهای کیبوردش را در پایین صفحه نشان می‌دهد، اگر به ویرایش فایلها از خط فرمان تازه‌کارید انتخاب خوبی است.

با vim

اگر vim (یا vi سبک‌تر) را ترجیح می‌دهید، فایل را به همان شکل باز کنید:

vim ~/.bashrc

i را برای ورود به حالت درج بزنید، تغییرات‌تان را اعمال کنید؛ سپس Esc بزنید، :wq تایپ کرده و Enter بزنید تا فایل نوشته و خارج شوید. از هر ویرایشگری که با آن راحت هستید استفاده کنید؛ محتوای فایل فارغ از نحوه ویرایش یکسان است.

وقتی ویرایش‌هایتان را ذخیره کردید، فوراً اثر نمی‌کنند—which در بخش reload کردن .bashrc در پایین پوشش داده شده.

نحوه افزودن Alias به bashrc.

Aliasها میان‌برهای سفارشی برای دستورات طولانی‌ترند. برای کاهش غلط‌های تایپی و ذخیره ضربه‌های کلید روی دستوراتی که مکرر اجرا می‌کنید عالی‌اند.

سینتکس Alias

سینتکس Alias یعنی alias name='command'—بدون فاصله اطراف علامت =. بخش قبل از علامت مساوی، میان‌بر جدیدی است که تایپ می‌کنید؛ و بخش کوتیشن‌شده، دستوری است که Bash به‌جایش اجرا می‌کند. کوتیشن کردن دستور، دستورات چندکلمه‌ای و کاراکترهای خاص را دست‌نخورده نگه می‌دارد.

مثال‌های Alias عملی

اینجا چند Alias مفید که می‌توانید به فایل .bashrc اضافه کنید آمده:

# --- Aliasهای سفارشی من ---

# ls خوانا-برای-انسان با همه فایلها و حجمها
alias ll='ls -lha'

# grep دیداری‌تر و مفیدتر
alias grep='grep --color=auto'

# میان‌بر پاک کردن Terminal
alias c='clear'

# به‌روزرسانی و ارتقای پکیج‌ها (برای Debian و Ubuntu)
alias update='sudo apt update && sudo apt upgrade -y'

# گرفتن IP عمومی‌تان (سرویس بیرونی را صدا می‌زند؛ با Endpoint مورد علاقه‌تان جایگزین کنید)
alias myip='curl ifconfig.me; echo'

بعد از افزودن این خطوط، فایل را ذخیره و از آن خارج شوید؛ سپس source ~/.bashrc را برای Reload اجرا کنید. حالا به‌جای ls -lha می‌توانید ll تایپ کنید.

نحوه تنظیم و Export کردن متغیرهای محیطی

می‌توانید از .bashrc برای تنظیم متغیرهای محیطی—مانون ویرایشگر متنی مورد علاقه‌تان—و گسترش $PATH که فهرست دایرکتوریهایی است که Shell برای دستورات قابل اجرا جستجو می‌کند، استفاده کنید.

Export کردن متغیر

کلیدواژه export متغیری را علامت‌گذاری می‌کند تا برنامه‌هایی که از Shell راه می‌اندازید آن را به ارث ببرند. بدون export، متغیر فقط در شل فعلی موجود بوده و به پروسههای فرزند پاس نمی‌شود:

# --- متغیرهای محیطی ---
export EDITOR='nano'  # nano را ویرایشگر پیش‌فرض متنی بگذار

بعد از Source کردن فایل، هر برنامه‌ای که به متغیر EDITOR احترام بگذارد (مانند git هنگام باز کردن پیام Commit) از nano استفاده می‌کند.

تغییر متغیر PATH

برای قابل-اجرا بودن دایرکتوری اسکریپتهای سفارشی از همه‌جا، آن را به $PATH اضافه کنید. کلید، شامل کردن مقدار موجود $PATH است تا آن را گسترش بدهید—نه جایگزین کنید:

# افزودن دایرکتوری اسکریپتهای سفارشی به PATH
export PATH="$HOME/bin:$PATH"

قرار دادن $HOME/bin در جلو یعنی اسکریپتهای سفارشی‌تان قبل از دستورات سیستمیِ هم‌نام پیدا می‌شوند؛ قرار دادنش در انتها (یعنی export PATH="$PATH:$HOME/bin") به دستورات سیستمی اولویت می‌دهد. به هر شکل، همیشه $PATH را شامل کنید تا دایرکتوریهای موجود را پاک نکنید.

سفارشی کردن Bash Prompt با PS1

می‌توانید ظاهر Terminalتان را هم با ویرایش فایل .bashrc تغییر بدهید. Prompt شما با متغیر خاصی به نام PS1 تعریف می‌شود؛ که می‌توانید برای نمایش رنگها و اطلاعات مفید—which Terminal را خواناتر می‌کند—سفارشی‌اش کنید.

مثال زیر، PS1 رنگی است که نام کاربری، نام هاست، دایرکتوری فعلی و شاخه Git را وقتی درون مخزن Git هستید نشان می‌دهد:

# --- Prompt سفارشی (PS1) ---

# تابع پارس کردن شاخه فعلی git (حالت detached HEAD را هم مدیریت می‌کند)
parse_git_branch() {
    git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null
}

# تنظیمات prompt
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[0;31m\]\$(parse_git_branch)\[\033[00m\]\$ "

پیچیده به نظر می‌رسد؛ اما فقط رنگها و کاراکترهای خاص Bash را ترکیب می‌کند:

  • \u: نام کاربری شما.
  • \h: نام هاست.
  • \w: مسیر کامل دایرکتوری فعلی.
  • \[\033[...m\]: کدهای رنگی که Bash به‌عنوان کاراکترهای غیر-چاپی تفسیر می‌کند.
  • \$(parse_git_branch): فراخوانی تابع بالا که شاخه فعلی Git را چاپ می‌کند (یا Hash کوتاه Commit وقتی در حالت detached HEAD است).

بعد از اجرای source ~/.bashrc، Prompt شما از user@host:~$ ساده به خطی رنگارنگ و اطلاعاتی تبدیل می‌شود.

برای کنترل پیشرفته‌تر Prompt، Bash متغیر PROMPT_COMMAND را هم فراهم می‌کند. وقتی تنظیم شود، Bash مقدارش را درست قبل از چاپ هر Prompt به‌عنوان دستور اجرا می‌کند. این آن را برای به‌روزرسانی نوار عنوان، همگام‌سازی History بین نشستها یا تزریق مقادیر داینامیکی—which توالیهای Escape مربوط به PS1 نمی‌توانند مستقیم بیان کنند—مفید می‌سازد:

# اجرای دستوری قبل از نمایش هر prompt
export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

نحوه افزودن توابع به bashrc.

در حالی که Aliasها برای جایگزینی‌های ساده دستور خوب‌اند، برای وظایف پیچیده‌تر کم می‌آورند. اینجاست که توابع Shell ضروری می‌شوند؛ چون توابع می‌توانند آرگومان بپذیرند و چند دستور را با منطق شرطی اجرا کنند.

مثال ۱: ساخت و ورود به دایرکتوری (mkcd)

این صرفه‌جوی زمان کلاسیکی است. به‌جای اجرای mkdir directory_name و سپس cd directory_name، این تابع هر دو را در یک قدم انجام می‌دهد:

# --- توابع سفارشی من ---

# دایرکتوری می‌سازد و فوراً واردش می‌شود
mkcd ()
{
    mkdir -p -- "$1" && cd -P -- "$1"
}

هر بخش تابع نقشی مشخص دارد:

  • mkdir -p -- "$1": دایرکتوری را می‌سازد. $1 اولین آرگومانی است که به تابع پاس می‌دهید (نام دایرکتوری)؛ و فلگ -p در صورت نیاز دایرکتوریهای والد را می‌سازد.
  • &&: AND منطقی؛ پس cd فقط اگر mkdir موفق باشد اجرا می‌شود.
  • cd -P -- "$1": وارد دایرکتوری تازه-ساخته می‌شود.

سپس می‌توانید با یک دستور، دایرکتوری بسازید و واردش شوید:

mkcd new-project

مثال ۲: استخراج هر آرشیوی (extract)

سینتکس خط فرمان برای Decompress کردن فرمتهای آرشیو مثل .zip، .tar.gz یا .tar.bz2 از ابزاری به ابزار متفاوت است. به‌جای به یاد سپردن هر variant، می‌توانید همه را در تابع منفردی به نام extract بپیچید. تابع نام فایل پاس‌شده را بازرسی کرده و از دستور case برای اجرای برنامه استخراج درست با فلگهای درست استفاده می‌کند:

# تابع استخراج جهانی
extract ()
{
    if [ -f "$1" ] ; then
        case "$1" in
            *.tar.bz2)   tar xvjf "$1"    ;;
            *.tar.gz)    tar xvzf "$1"    ;;
            *.tar.xz)    tar xvJf "$1"    ;;
            *.bz2)       bunzip2 "$1"     ;;
            *.rar)       unrar x "$1"     ;;
            *.gz)        gunzip "$1"      ;;
            *.tar)       tar xvf "$1"    ;;
            *.tbz2)      tar xvjf "$1"    ;;
            *.tgz)       tar xvzf "$1"    ;;
            *.zip)       unzip "$1"      ;;
            *.7z)        7z x "$1"        ;;
            *)           echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}

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

extract my_files.zip
extract my_other_files.tar.gz

نحوه کنترل History شل

می‌توانید کنترل کنید شل‌تان چند دستور را به یاد بسپارد—which وقتی دستورات طولانی را استفاده مجدد می‌کنید مفید است.

دو متغیر اصلی HISTSIZE و HISTFILESIZE هستند:

  • HISTSIZE: تعداد دستوراتی که حین نشست در حافظه نگه داشته می‌شوند.
  • HISTFILESIZE: تعداد دستوراتی که هنگام خروج در فایل History یعنی (~/.bash_history) ذخیره می‌شوند.
# --- کنترل History ---
export HISTSIZE=10000
export HISTFILESIZE=10000

# نادیده گرفتن دستورات تکراری در history
export HISTCONTROL=ignoredups

تنظیم مفید دیگر shopt -s histappend است. به‌طور پیش‌فرض، Bash هنگام پایان نشست ~/.bash_history را بازنویسی می‌کند. تنظیم histappend باعث می‌شود هر نشست به فایل اضافه شود—to‌جای بازنویسی؛ پس History چند پنجره Terminal حفظ می‌شود—نه اینکه History یک پنجره، بقیه را پاک کند:

# به‌جای بازنویسی فایل history هنگام خروج شل، به آن اضافه کن
shopt -s histappend

Reload کردن bashrc. بدون ری‌استارت Terminal

وقتی .bashrc را ویرایش می‌کنید، تغییرات‌تان خودکار روی نشست فعلی اعمال نمی‌شوند؛ چون فایل فقط وقتی شل جدیدی شروع شود اجرا می‌شود. دو راه برای اعمال فوری تغییرات دارید.

استفاده از دستور source

دستور source فایل را در نشست شل فعلی‌تان می‌خواند و اجرا می‌کند؛ که روش استاندارد اعمال تغییرات .bashrc بدون وقفه در روند کاری‌تان است:

source ~/.bashrc

بعد از اجرای این، هر Alias، تابع و متغیری که اضافه کردید در نشستی که از قبل در آن هستید در دسترس است.

استفاده از میان‌بر نقطه (.)

Bash دستور کوتاه‌تر و معادری هم فراهم می‌کند: نقطه منفردی که به‌دنبالش مسیر فایل می‌آید. دقیقاً مثل source رفتار می‌کند:

. ~/.bashrc

هر دو دستور فایل را در-جای خودش دوباره اجرا می‌کنند. کدام را که راحت‌تر به یاد می‌آورید انتخاب کنید؛ نتیجه یکسان است.

مثال کامل و آماده-کپی bashrc.

برای جمع‌بندی همه‌چیز، اینجا .bashrc کاملِ توضیح‌دارِ قابل تطبیق آمده. تنظیمات را در بخشهای برچسب‌گذاری‌شدهٔ واضحی گروه‌بندی کرده—which کنترل History، Aliasها، متغیرهای محیطی، $PATH، Prompt و توابع را پوشش می‌دهد:

# ~/.bashrc: پیکربندی شروع عملی

# --- کنترل History ---
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTCONTROL=ignoredups:erasedups   # نادیده گرفتن و یکتاسازی دستورات تکراری
shopt -s histappend                        # به فایل history اضافه کن؛ بازنویسی نکن

# --- Aliasها ---
alias ll='ls -lha'                         # فهرست تفصیلی و خوانا
alias grep='grep --color=auto'             # هایلایت موارد
alias c='clear'                            # پاک کردن صفحه
alias update='sudo apt update && sudo apt upgrade -y'  # به‌روزرسانی Debian/Ubuntu

# --- متغیرهای محیطی ---
export EDITOR='nano'                       # ویرایشگر پیش‌فرض

# --- PATH ---
export PATH="$HOME/bin:$PATH"              # اولویت به اسکریپتهای ~/bin

# --- Prompt سفارشی (PS1) ---
parse_git_branch() {
    git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null
}
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[0;31m\]\$(parse_git_branch)\[\033[00m\]\$ "

# --- توابع ---
mkcd () {
    mkdir -p -- "$1" && cd -P -- "$1"      # دایرکتوری بساز و واردش شو
}

بعد از ذخیره فایل، با source ~/.bashrc اعمالش کنید. هر بخشی را که لازم ندارید می‌توانید حذف کنید؛ کامنتها روشن می‌کنند هر بلاک چه می‌کند.

bashrc. در مقابل zshrc.: اگر از Zsh استفاده کنید چه تغییر می‌کند؟

Zsh (یعنی شل Z) به شل پیش‌فرض چند سیستم مدرن—including macOS از ریلیز Catalina و Kali Linux از نسخه 2020.4—تبدیل شده است. اگر شل پیش‌فرض‌تان را به Zsh تغییر بدهید، Bash خواندن .bashrc را متوقف کرده و Zsh به‌جایش ~/.zshrc را می‌خواند.

خبر خوب این است که دو فایل همان هدف را خدمت می‌کنند و بیشتر پیکربندی‌تان با تغییر اندک منتقل می‌شود:

  • Aliasها مستقیم کپی می‌شوند؛ چون سینتکس alias name='command' در هر دو شل یکسان است.
  • متغیرهای محیطی و دستورات export هم به همان شکل کار می‌کنند؛ پس خطوط $PATH و EDITOR شما بدون تغییر منتقل می‌شوند.
  • توابع معمولاً همان‌طور کار می‌کنند؛ هرچند Zsh قابلیتهای اضافی و سینتکس Promptِ کمی متفاوتی دارد.
  • Prompt، اصلی‌ترین چیز متفاوت است: Zsh از توالیهای Escape خودش یعنی PROMPT (یا PS1) استفاده می‌کند؛ پس PS1 پیچیدهٔ Bash اغلب نیاز به تنظیم دارد.

در عمل، سوییچ کردن شل یعنی مهاجرت Aliasها، توابع و Exportهایتان از .bashrc به .zshrc—نه استفاده مجدد از همان فایل. اگر هر دو شل را نگه می‌دارید، تنظیمات مشترک (مثل Aliasها و Exportها) را در فایل جداگانه‌ای نگه داشته و از فایل راه‌اندازی هر شل Source کنید تا فقط در یک مکان ویرایششان کنید.

بهترین روشها برای bashrc. تمیز

پیروی از این بهترین روشهای .bashrc شما را از دردسرهای آینده نجات می‌دهد:

  • همیشه اول بکاپ بسازید: قبل از تغییرات بزرگ، cp ~/.bashrc ~/.bashrc.bak را اجرا کنید.
  • از کامنتها استفاده کنید: از نماد # برای یادداشت‌هایی که توضیح می‌دهند کدتان چه می‌کند استفاده کنید.
  • سازمان‌یافته نگهش دارید: پیکربندی‌هایتان را در بخشهای برچسب‌گذاری‌شده گروه‌بندی کنید (مثلاً # Aliasها و # توابع).
  • تغییرات را امن تست کنید: قبل از Source کردن فایل در نشست فعلی، Terminal جدیدی باز کنید—which فایل به‌روزشده را در شل تازه‌ای بارگذاری می‌کند. اگر شکست خورد، آن پنجره را ببندید تا به شل کارکردنیِ قدیمی برگردید.
  • از Version Control استفاده کنید: برای راه‌اندازیهای پیچیده، پیگیری .bashrc و Dotfileهای دیگر با Git را—which مدیریت و بازگردانی تغییرات را ممکن می‌کند—در نظر بگیرید.

عیب‌یابی مسائل رایج bashrc.

ویرایش .bashrc گاهی شلی را می‌شکند؛ اما هر مشکل رایج رفع روشنی دارد. زیربخشهای زیر مسائلی را که به احتمال زیاد با آن‌ها روبه‌رو می‌شوید پوشش می‌دهند.

شل بعد از ویرایش bashrc. شروع نمی‌شود

خطای سینتکسی—مانند کوتیشن جاافتاده یا آکولاد نامتوازن—می‌تواند باعث شود Bash هنگام Source کردن ~/.bashrc شکست بخورد؛ که ممکن است Terminalهای جدید را غیرقابل استفاده کند. برای بازیابی، شلی را شروع کنید که همه فایلهای راه‌اندازی را رد می‌کند تا فایل خراب را از محیط تمیزی ویرایش کنید:

bash --noprofile --norc

این هم ~/.bash_profile و هم ~/.bashrc را رد می‌کند؛ که امن‌ترین روش بازیابی جهانی است—فارغ از اینکه کدام فایل خطا دارد. اگر مطمئنید مشکل فقط در ~/.bashrc است و شل Login شما دست‌نخورده است، bash --norc به‌تنهایی کافی است:

bash --norc

از آن شل تمیز، ~/.bashrc را باز کنید، خطا را رفع کنید (یا بکاپ‌تان را با cp ~/.bashrc.bak ~/.bashrc بازیابی کنید) و دوباره Source کنید. اگر فقط دسترسی خط-فرمانی دارید و هیچ Shellای را نمی‌توانید راه بیندازید، به حالت Recovery بوت کنید یا از File Managerی با نمایش فایلهای مخفی برای جایگزینی فایل با بکاپ‌تان استفاده کنید.

تغییرات اثر نمی‌کنند

اگر Alias یا متغیر جدیدتان کار نمی‌کند، علت معمول این است که فایل را ویرایش کرده اما هرگز Reload نکرده‌اید. فایل فقط وقتی شلی شروع می‌شود اجرا می‌شود؛ پس نشست فعلی همچنان پیکربندی قدیمی را نگه داشته. تغییرات‌تان را با این دستور اعمال کنید:

source ~/.bashrc

اگر تنظیم همچنان ظاهر نمی‌شود، تأیید کنید فایل درست را ویرایش کرده‌اید (شل تعاملیِ غیر-Login یعنی ~/.bashrc را می‌خواند—not ~/.bash_profile)؛ و برای غلط تایپی در نام متغیر یا Alias چک کنید.

تست سینتکس قبل از Source کردن

برای گرفتن خطاها قبل از اثرگذاری‌شان روی نشست‌تان، از Bash بخواهید فایل را در حالت بررسی-سینتکس بخواند—which فایل را بدون اجرا پارس می‌کند:

bash -n ~/.bashrc

اگر دستور چیزی چاپ نکرد، سینتکس معتبر است. اگر خطایی گزارش کرد، شماره خط تقریبی را می‌گوید تا قبل از Source کردن رفعش کنید. می‌توانید امن‌تر هم با باز کردن پنجره Terminal کاملاً جدیدی تست بگیرید: شل جدید تغییرات‌تان را بارگذاری می‌کنند؛ و اگر چیزی بشکند، شل فعلی‌تان دست‌نخورده می‌ماند.

برای تحلیل عمیق‌تر فراتر از سینتکس پایه، shellcheck، Linter استاندارد-جامعه برای اسکریپتهای Shell است. فقط خطاهای سینتکس را نمی‌گیرد؛ بلکه اشتباهات منطقی رایج، دامهای کوتیشن و مسائل قابلیت-انتقال را هم—which bash -n از دست می‌دهد—می‌گیرد:

shellcheck ~/.bashrc

shellcheck در مخازن پکیج بیشتر توزیعها موجود است (sudo apt install shellcheck روی Debian/Ubuntu، sudo dnf install ShellCheck روی Fedora/RHEL).

اشتباهات رایج برای اجتناب

چند اشتباه تکرارشونده، عامل بیشتر دردسرهای .bashrc هستند؛ پس ارزشش را دارد از قبل با آن‌ها آشنا باشید:

  • فراموش کردن Source: ویرایشها تا وقتی source ~/.bashrc را اجرا نکنید یا Terminal جدیدی باز نکنید اعمال نمی‌شوند. این رایج‌ترین غفلت است.
  • پاک کردن $PATH: هرگز export PATH="$HOME/bin" را به‌تنهایی ننویسید. همیشه مسیر موجود را با export PATH="$HOME/bin:$PATH" شامل کنید؛ وگرنه بیشتر دستورات Terminalتان را می‌شکنید.
  • خطاهای سینتکس: کوتیشن جاافتاده (') یا آکولاد (}) می‌تواند کل اسکریپت را بشکند. اگر Terminalتان بعد از ویرایش از کار افتاد، بکاپ‌تان را بازیابی کنید.
  • استفاده از Alias برای منطق پیچیده: اگر «Alias» شما لازم دارد آرگومان بپذیرد یا چند قدم اجرا کند، به‌جایش از تابع استفاده کنید.

سوالات متداول

۱. فایل bashrc. در لینوکس چه می‌کند؟

فایل .bashrc، اسکریپت Shell خاص-کاربری است که هر بار Terminal تعاملیِ غیر-Login جدیدی باز می‌کنید اجرا می‌شود. مکان استاندارد برای Aliasها، توابع Shell، Promptهای سفارشی و متغیرهای محیطی است.

۲. فایل bashrc. در لینوکس کجا قرار دارد؟

در ~/.bashrc—which به /home/your_username/.bashrc بسط می‌یابد. چون نامش با نقطه شروع می‌شود، برای دیدنش ls -a لازم دارید.

۳. چطور بعد از ویرایش bashrc. تغییرات را اعمال کنم؟

در Terminal فعلی‌تان source ~/.bashrc (یا ~/.bashrc .) را اجرا کنید؛ یا Terminal را ببندید و دوباره باز کنید. فایل فقط وقتی شل جدیدی شروع شود اجرا می‌شود؛ پس ویرایشها تا Reload کردن اثری ندارند.

۴. چه چیزهایی می‌توانم به bashrc. اضافه کنم؟

طیف گسترده‌ای از پیکربندیها—including:

  • Aliasها: میان‌برهایی برای دستورات طولانی‌تر؛ مانند alias ll='ls -lha'.
  • توابع: دستورات سفارشی پیچیده‌تری که آرگومان می‌گیرند.
  • متغیرهای محیطی: با دستور export برای تنظیم متغیرهایی مثل PATH یا EDITOR.
  • سفارشی‌سازی PS1: برای تغییر ظاهر و اطلاعات Prompt دستور.
  • دستورات راه‌اندازی: دستوراتی که می‌خواهید هنگام باز شدن Terminal خودکار اجرا شوند.

۵. تفاوت bashrc. و bash_profile. چیست؟

.bashrc برای شلهای تعاملیِ غیر-Login (هر پنجره Terminal جدید) اجرا می‌شود—which آن را برای Aliasها و تنظیمات Prompt ایده‌آل می‌کند؛ در حالی که .bash_profile برای شلهای Login (مانند نشست SSH) اجرا شده و برای چیزهایی است که فقط لازم است یک‌بار به‌ازای هر نشست تنظیم شوند—مثل متغیرهای محیطی. بیشتر سیستمها منطقی در .bash_profile شامل می‌کنند که صریحاً .bashrc را Source می‌کند؛ که دلیل کار کردن Aliasهایتان بعد از Login با SSH است.

۶. چطور bashrc. را بازیابی کنم اگر Terminal خراب شد؟

اگر با cp ~/.bashrc ~/.bashrc.bak بکاپ گرفتید، می‌توانید با اجرای cp ~/.bashrc.bak ~/.bashrc از هر شل کارکردنی بازیابی‌اش کنید. اگر فایل خراب جلوی شروع Bash را می‌گیرد، شل تمیزی با bash --norc (یا bash --noprofile --norc) راه بیندازید، فایل را رفع یا بازیابی کنید؛ سپس دوباره Source کنید.

۷. تفاوت bashrc. و zshrc. چیست؟

هر دو فایل برای شلهای مربوطه‌شان همان هدف را دارند: .bashrc یعنی Bash را پیکربندی می‌کند و .zshrc یعنی Zsh را. اگر شل پیش‌فرض‌تان را به Zsh تغییر بدهید (که حالا روی macOS و توزیعهایی مثل Kali Linux پیش‌فرض است)، Aliasها، توابع و Exportهایتان را از .bashrc به .zshrc مهاجرت می‌دهید. Aliasها و دستورات export معمولاً بدون تغییر منتقل می‌شوند؛ اما سینتکس Prompt بین دو شل متفاوت است.

۸. باید از bash_profile. استفاده کنم یا bashrc.؟

از .bashrc برای Aliasها، توابع و رفتار شلی که روی نشستهای Shell تعاملی اعمال می‌شود استفاده کنید؛ و از .bash_profile (یا .profile) برای متغیرهای محیطی و تغییرات PATH که باید یک‌بار هنگام Login تنظیم شوند. بسیاری از راه‌اندازیها .bashrc را از .bash_profile Source می‌کنند تا پیکربندی یکجا شود—و فقط یک فایل برای تنظیمات تعاملی نگه دارید.

۹. چرا بعد از ویرایش لازم است source ~/.bashrc اجرا کنم؟

تغییرات .bashrc خودکار روی نشست شل فعلی اثر نمی‌گذارند؛ چون فایل فقط وقتی شل جدیدی شروع شود اجرا می‌شود. اجرای source ~/.bashrc یا ~/.bashrc . فایل را در نشست فعلی دوباره اجرا می‌کند—بدون نیاز به پنجره Terminal جدید؛ پس Aliasها و متغیرهای جدیدتان فوراً در دسترس می‌شوند.

۱۰. آیا bashrc. خراب می‌تواند جلوی باز شدن Terminal را بگیرد؟

بله. خطای سینتکس در .bashrc می‌تواند باعث شود Bash هنگام راه‌اندازی شکست بخورد؛ که ممکن است Terminal را غیرقابل استفاده کند. برای بازیابی، Shellای را باز کنید که فایلهای راه‌اندازی‌تان را رد می‌کند یعنی bash --noprofile --norc؛ سپس فایل را ویرایش و رفع کنید. هم‌چنین می‌توانید به شل Recovery بوت کنید یا از ویرایشگر متنی بیرون از Terminal استفاده کنید؛ سپس در صورت داشتن، بکاپ‌تان را بازیابی کنید.

۱۱. آیا bashrc. برای همه انواع شل خوانده می‌شود؟

نه. فایل .bashrc فقط توسط شلهای Bashِ تعاملیِ غیر-Login خوانده می‌شود. توسط شلهای Login (که .bash_profile یا .profile را می‌خوانند) یا شلهای غیر-تعاملی مثل اسکریپتها خوانده نمی‌شود. برای در دسترس کردن متغیری در اسکریپتها، از فایل Login مناسب Exportش کنید یا BASH_ENV را به فایلی اشاره بدهید.

۱۲. چطور دایرکتوری‌ای به PATH در bashrc. اضافه کنم؟

خطی اضافه کنید که دایرکتوری را به $PATH موجود پیش یا پس بندد؛ سپس فایل را Reload کنید. مثلاً برای افزودن /your/directory، این را در ~/.bashrc بگذارید:

export PATH="$PATH:/your/directory"

سپس source ~/.bashrc را برای اعمال فوری تغییر اجرا کنید. همیشه $PATH را در مقدار شامل کنید تا مسیر موجود را گسترش بدهید—نه بازنویسی کنید.

۱۳. آیا bashrc. به‌طور پیش‌فرض روی همه توزیعهای لینوکس وجود دارد؟

ب بیشتر توزیعهای مبتنی بر Debian (اوبونتو، Debian) هنگام ساخت حساب کاربری جدید، فایل .bashrc پیش‌فرضی می‌سازند. روی نصبهای مینیمال یا سروری ممکن است وجود نداشته باشد. می‌توانید با اجرای touch ~/.bashrc دستی بسازیدش و سپس در صورت نیاز پیکربندی اضافه کنید.

نتیجه‌گیری

در این مقاله، فایل .bashrc را از کارکرد پایهاش تا نقشش به‌عنوان ابزار سفارکی‌سازی قدرتمند کاوش کردید. یاد گرفتید فایل کجا زندگی می‌کند، Bash چگونه تصمیم می‌گیرد کدام فایلهای راه‌اندازی را بخواند و .bashrc چگونه با .bash_profile، .profile و .zshrc تفاوت دارد. هم‌چنین دیدید چطور فایل را امن ویرایش و Reload کنید، Aliasهای عملی بسازید، توابع قابل استفاده مجدد بنویسید، Prompt خودتان را سفارشی کنید، $PATH را مدیریت کنید و وقتی ویرایشی شل‌تان را می‌شکند بازیابی کنید.

با عملی کردن این تکنیکها، می‌توانید محیط خط-فرمانی بسازید که واقعاً مال خودتان باشد. تسلط بر فایل .bashrc، قدم کلیدی در تبدیل Terminal لینوکسی‌تان به فضای کاری کارآمدتر و بهره‌ورتر است.

نوشته های مشابه

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

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

دکمه بازگشت به بالا