شخصی‌سازی خط فرمان لینوکس با ‎.bashrc‎

آنچه در این مطلب می‌خوانید:

شخصی‌سازی خط فرمان لینوکس با .bashrc: از PS1 و alias تا Git و SSH Agent

فایل .bashrc یکی از مهم‌ترین فایل‌های تنظیمات در Bash است و اجازه می‌دهد ترمینال را دقیقاً مطابق سلیقه و نیازهای مدیریتی خودتان تنظیم کنید؛
از تغییر Prompt و ساخت alias گرفته تا تعریف تابع‌های سفارشی و تنظیمات حرفه‌ای مثل Git-aware Prompt.

اگر این تنظیمات را روی یک VPS یا Dedicated Server انجام می‌دهید، برای تهیه سرویس می‌توانید صفحات زیر را ببینید:
سرور مجازی | سرور مجازی لینوکس ایران

پیش‌نیازها

  • دسترسی به یک سیستم لینوکسی (ترجیحاً روی KVM VPS یا Dedicated Server)
  • آشنایی پایه با دستورات لینوکس

گام ۱: فایل .bashrc دقیقاً چیست؟

.bashrc یک اسکریپت شِل است که معمولاً هنگام اجرای شِل‌های interactive (مثل وقتی یک ترمینال جدید باز می‌کنید) اجرا می‌شود.
نکته فنی: برای login shellها معمولاً فایل‌هایی مثل .bash_profile یا .profile اجرا می‌شوند و در بسیاری از توزیع‌ها همان‌جا.bashrc هم source می‌شود.

مسیر رایج این فایل: ~/.bashrc

گام ۲: قبل از تغییرات، بکاپ بگیرید

برای جلوگیری از دردسر، یک نسخه پشتیبان بسازید:

cp ~/.bashrc ~/.bashrc.bak

گام ۳: باز کردن .bashrc برای ویرایش

با هر ویرایشگری راحتید (مثل nano یا vim) فایل را باز کنید:

nano ~/.bashrc

گام ۴: امن‌سازی اولیه (فقط برای شِل interactive)

یکی از اشتباهات رایج این است که تنظیمات .bashrc در شِل‌های non-interactive هم اجرا شوند.
ابتدای فایل، این خط را بگذارید تا فقط در حالت interactive ادامه دهد:

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

گام ۵: شخصی‌سازی Prompt با PS1

متن ابتدای هر خط فرمان با متغیر PS1 کنترل می‌شود. نمونه‌ی ساده (رنگ سبز):

PS1='\[\e[32m\]\u@\h:\w\$\[\e[0m\] '

معنی بخش‌ها

  • \u نام کاربری
  • \h نام میزبان (hostname)
  • \w مسیر پوشه جاری
  • \[\e[32m\] رنگ سبز (ANSI 32)
  • \$ برای root علامت # و برای کاربر عادی $
  • \[\e[0m\] ریست رنگ

کدهای رنگی پرکاربرد

  • Green: \[\e[32m\]
  • Red: \[\e[31m\]
  • Blue: \[\e[34m\]
  • Reset: \[\e[0m\]

نمونه ترکیبی (نام کاربر قرمز، مسیر سبز):

PS1='\[\e[31m\]\u@\h:\[\e[32m\]\w\$\[\e[0m\] '

نکته: وجود \[ \] باعث می‌شود Bash طول کاراکترهای نامرئی (رنگ‌ها) را درست حساب کند و نمایش/Wrap به‌هم نریزد.

گام ۶: ساخت aliasهای کاربردی

برای کوتاه‌کردن دستورهای پرتکرار، این موارد را نزدیک انتهای فایل اضافه کنید:

alias ll='ls -la'
alias gs='git status'
alias update='sudo apt update && sudo apt upgrade -y'
  • ll: اجرای ls -la
  • gs: میانبر git status
  • update: اجرای همزمان apt update و apt upgrade

گام ۷: افزودن متغیرهای محیطی (مثل PATH)

اگر اسکریپت‌های شخصی دارید، می‌توانید مسیرشان را به PATH اضافه کنید:

export PATH="$PATH:$HOME/my_scripts"

با این کار Bash در اجرای دستورها، پوشه ~/my_scripts را هم بررسی می‌کند.

گام ۸: تعریف تابع‌های سفارشی

تابع‌ها مثل alias هستند، با این تفاوت که می‌توانند ورودی بگیرند و چند دستور را اجرا کنند.

نمونه: ساخت پوشه و ورود به همان پوشه با یک دستور:

mkcd() {
  mkdir -p "$1" && cd "$1"
}

استفاده:

mkcd new_directory

گام ۹: اعمال تغییرات (Reload)

برای اعمال فوری تغییرات در همین ترمینال:

source ~/.bashrc

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

گام ۱۰: تست سریع

  • یک ترمینال جدید باز کنید و ببینید Prompt جدید نمایش داده می‌شود یا نه.
  • ll را اجرا کنید و خروجی ls -la را ببینید.
  • mkcd test_dir را اجرا کنید تا تابع را تست کنید.

تنظیمات پیشرفته در .bashrc

۱) شرط‌گذاری (Conditional) برای root و کاربر عادی

if [ "$USER" = "root" ]; then
  PS1='\[\e[31m\]\u@\h:\w\$\[\e[0m\] '  # Red prompt for root
else
  PS1='\[\e[32m\]\u@\h:\w\$\[\e[0m\] '  # Green prompt for normal users
fi

۲) فعال‌سازی Bash Completion برای Git

اگر پکیج bash-completion نصب باشد، معمولاً مسیر زیر وجود دارد:

if [ -f /usr/share/bash-completion/completions/git ]; then
  . /usr/share/bash-completion/completions/git
fi

۳) شخصی‌سازی History

افزایش حجم History:

HISTSIZE=10000
HISTFILESIZE=20000

نادیده گرفتن دستورهای تکراری:

HISTCONTROL=ignoredups

۴) عنوان پویا برای ترمینال (بدون خراب‌کردن PS1)

نسخه‌های ساده‌ای که PS1 را بازنویسی می‌کنند ممکن است رنگ‌ها/فرمت شما را از بین ببرند.
این روش با PROMPT_COMMAND فقط عنوان پنجره را آپدیت می‌کند:

case "$TERM" in
  xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${PWD}\007"'
    ;;
esac

۵) «alias با آرگومان» (به‌کمک تابع)

مثلاً برای git commit با پیام چندکلمه‌ای:

gc() {
  git commit -m "$*"
}

استفاده:

gc "My commit message"

۶) رفتار زمان‌محور (Time-Based) برای گردش‌کار

gpull() {
  HOUR=$(date +"%H")
  if [ "$HOUR" -lt 12 ]; then
    git pull origin main
  else
    git pull origin development
  fi
}

شاخه‌های main و development را مطابق پروژه خودتان تغییر دهید.

۷) trap در شِل interactive (با احتیاط)

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

trap "rm -f /tmp/my_temp_file" EXIT

۸) نمایش شاخه Git در Prompt (Git-aware Prompt)

این نسخه از git rev-parse استفاده می‌کند و معمولاً پایدارتر است:

parse_git_branch() {
  git rev-parse --abbrev-ref HEAD 2>/dev/null
}

PS1='\u@\h:\w $(parse_git_branch)\$ '

۹) اجرای خودکار SSH Agent (کم‌دردسرتر)

اگر هر بار ترمینال باز می‌کنید و می‌خواهید Agent آماده باشد، بهتر است قبل از ssh-add بررسی کنید کلیدی لود شده یا نه:

if [ -z "$SSH_AUTH_SOCK" ]; then
  eval $(ssh-agent -s) >/dev/null
fi

ssh-add -l >/dev/null 2>&1 || ssh-add ~/.ssh/id_rsa

۱۰) تکمیل حروف بدون حساسیت به بزرگی/کوچکی + جستجوی هوشمند History

برای case-insensitive completion بهتر است از تنظیمات Readline استفاده کنید (نه فقط nocaseglob):

bind "set completion-ignore-case on"

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

عیب‌یابی .bashrc

اگر بعد از تغییرات، خطا یا رفتار عجیب دیدید:

۱) بررسی سینتکس بدون اجرا

bash -n ~/.bashrc

۲) اجرای Bash بدون فایل‌های پروفایل (برای تست محیط خام)

bash --noprofile --norc

۳) دیباگ سبک (فقط موقت)

اگر لازم شد، یک پیام دیباگ بگذارید؛ اما یادتان باشد در هر ترمینال چاپ می‌شود و بهتر است بعداً حذفش کنید:

echo "Loading .bashrc..."

جمع‌بندی

با شخصی‌سازی .bashrc می‌توانید تجربه ترمینال را سریع‌تر، امن‌تر و حرفه‌ای‌تر کنید:

Prompt واضح‌تر، aliasهای کاربردی، تابع‌های اختصاصی و امکانات پیشرفته‌ای مثل Git-aware Prompt و Bash Completion باعث می‌شوند مدیریت سرور و توسعه روزمره روان‌تر شود.

مطالعه این مطالب را هم توصیه میکنیم

خدمات مورد نیاز شما را با کیفیتی که انتظار دارید و قیمتی که انتظار ندارید.

آیا این مطلب برای شما مفید بود؟
پارس آپتایم | ارائه‌دهنده VPS و میزبانی وب