شخصیسازی خط فرمان لینوکس با .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 -lags: میانبرgit statusupdate: اجرای همزمان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 باعث میشوند مدیریت سرور و توسعه روزمره روانتر شود.
