کارایی در محیط خط فرمان تا حد زیادی به کاهش تایپ تکراری و دسترسی سریع به دستورات قبلی وابسته است. شل Bash ابزارهای قدرتمندی برای تاریخچه دستورات (Command History) و ایجاد نامهای مستعار (Aliases) در اختیار شما قرار میدهد تا گردش کارتان را سرعت ببخشید و از خطاهای تایپی جلوگیری کنید.
historyدستور history لیستی از دستوراتی که در جلسه فعلی (و جلسات قبلی) تایپ کردهاید را نمایش میدهد. این تاریخچه در یک فایل ذخیره میشود (معمولاً ~/.bash_history) و با بسته شدن ترمینال از بین نمیرود.
ساختار کلی:
history [option] [n]
نمایش کل تاریخچه:
history
خروجی نمونه:
1 ls 2 cd /var/log 3 cat syslog 4 history
نمایش ۱۰ دستور آخر:
history 10
پاک کردن تاریخچه (با گزینه -c):
history -c
تاریخچه جلسه فعلی را پاک میکند.
حذف یک دستور خاص از تاریخچه (با گزینه -d):
history -d 5
دستور شمارهی ۵ را از تاریخچه حذف میکند.
اجرای مجدد یک دستور از تاریخچه:
!123
دستور شمارهی ۱۲۳ را مجدداً اجرا میکند.
جستجو در تاریخچه با grep:
history | grep "docker"
تمام دستوراتی که شامل کلمهی docker هستند را نمایش میدهد.
مکان پیشفرض: ~/.bash_history
متغیرهای مرتبط:
HISTSIZE: تعداد دستوراتی که در حافظه (جلسه فعلی) نگه داشته میشوند.
HISTFILESIZE: تعداد دستوراتی که در فایل تاریخچه ذخیره میشوند.
echo $HISTSIZE # خروجی: 1000
History Expansion به شما اجازه میدهد که با استفاده از علامت تعجب (!) به دستورات قبلی ارجاع دهید و آنها را مجدداً اجرا کنید یا بخشهایی از آنها را در دستور جدید به کار ببرید.
| ساختار | توضیح | مثال |
|---|---|---|
!! | آخرین دستور اجرا شده را تکرار میکند. | !! |
!n | دستور شمارهی n در تاریخچه را اجرا میکند. | !100 |
!-n | دستور n تا آخر را اجرا میکند. | !-2 (دومین دستور آخر) |
!string | آخرین دستوری که با string شروع میشود را اجرا میکند. | !docker |
!?string | آخرین دستوری که شامل string است را اجرا میکند. | !?error? |
^old^new^ | در آخرین دستور، old را با new جایگزین کرده و اجرا میکند. | ^cat^less^ |
!!:s/old/new/ | در آخرین دستور، old را با new جایگزین کرده و اجرا میکند. | !!:s/foo/bar/ |
تکرار آخرین دستور:
ls -la # ... (خروجی) !! # ls -la دوباره اجرا میشود
اجرای دستور شمارهی ۱۲۳:
!123
اجرای آخرین دستوری که با docker شروع شده:
!docker # اگر آخرین دستور docker ps بوده باشد، اجرا میشود
جایگزینی در آخرین دستور:
echo "hello world" # خروجی: hello world ^hello^hi^ # معادل: echo "hi world" # خروجی: hi world
استفاده از آرگومانهای دستور قبلی:
# آرگومانهای دستور قبلی echo !:2 # آرگومان دوم دستور قبلی echo !:0 # نام خود دستور echo !:* # تمام آرگومانها echo !$ # آخرین آرگومان
اجرای دستور با افزودن آرگومان جدید:
ls /home !:0 /var # معادل: ls /var
برای جلوگیری از ذخیرهی برخی دستورات در تاریخچه، میتوانید از این ترفندها استفاده کنید:
یک فاصله قبل از دستور: شل دستوراتی که با فاصله شروع میشوند را در تاریخچه ذخیره نمیکند.
docker login # این دستور در تاریخچه ذخیره نمیشود (چون با فاصله شروع شده)
(این قابلیت باید با shopt -s histappend و HISTCONTROL=ignorespace فعال شود)
غیرفعال کردن موقت تاریخچه:
set +o history # غیرفعال کردن command # این دستور ذخیره نمیشود set -o history # فعال کردن مجدد
aliasدستور alias به شما اجازه میدهد که نامهای مستعار (Alias) برای دستورات طولانی یا پرکاربرد ایجاد کنید. این یکی از سادهترین و مؤثرترین راهها برای افزایش سرعت کار در خط فرمان است.
ساختار کلی:
alias [name[=value]...]
ایجاد یک Alias ساده:
alias ll='ls -alF' alias la='ls -A' alias l='ls -CF'
Alias برای دستورات با گزینههای ثابت:
alias grep='grep --color=auto' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'
در مثال بالا، rm همیشه با گزینهی -i (درخواست تأیید) اجرا میشود.
Alias با استفاده از چند دستور (با ; یا &&):
alias update='sudo apt update && sudo apt upgrade' alias ll='ls -la && echo "Done"'
Alias برای دستورات پیچیده:
alias myip='curl -s https://api.ipify.org' alias d='docker' alias dc='docker-compose' alias g='git'
Alias برای مسیرهای پرکاربرد:
alias projects='cd ~/Projects' alias logs='cd /var/log'
مشاهدهی لیست تمام Aliasهای تعریف شده:
alias
Aliasهایی که در ترمینال تعریف میشوند، فقط برای جلسهی فعلی معتبر هستند. برای دائمی کردن آنها، باید آنها را در فایلهای پیکربندی شل اضافه کنید:
~/.bashrc (برای Bash)
~/.zshrc (برای Zsh)
~/.bash_aliases (یک فایل جداگانه که اغلب از .bashrc فراخوانی میشود)
echo "alias ll='ls -alF'" >> ~/.bash_aliases source ~/.bashrc # برای اعمال تغییرات در جلسهی فعلی
unaliasدستور unalias برای حذف یک Alias استفاده میشود.
ساختار کلی:
unalias [-a] [name...]
حذف یک Alias خاص:
unalias ll
دیگر نمیتوانید از ll استفاده کنید (مگر اینکه دوباره تعریفش کنید).
حذف یک Alias بهطور موقت (برای یک بار استفاده):
\ll
استفاده از بکاسلش (\) قبل از نام Alias، آن را برای یک بار اجرا غیرفعال میکند و دستور اصلی اجرا میشود.
حذف همهی Aliasها (با گزینه -a):
unalias -a
تمام Aliasهای تعریف شده را حذف میکند.
اگر میخواهید یک دستور را بدون اعمال Alias اجرا کنید، راههای مختلفی وجود دارد:
استفاده از بکاسلش قبل از دستور:
\rm myfile.txt
rm اصلی اجرا میشود، نه Alias آن.
استفاده از نقلقول:
"rm" myfile.txt 'rm' myfile.txt
استفاده از مسیر کامل:
/usr/bin/rm myfile.txt
استفاده از command:
command rm myfile.txt
علاوه بر history و !، راههای دیگری نیز برای دسترسی سریع به دستورات قبلی وجود دارد:
کلید بالا (↑): آخرین دستور را در خط فرمان قرار میدهد. هر بار زدن، یک دستور قدیمیتر را نشان میدهد.
کلید پایین (↓): برعکس کلید بالا عمل میکند و دستورات جدیدتر را نشان میدهد.
با فشردن کلیدهای Ctrl+R، میتوانید یک جستجوی تعاملی در تاریخچه انجام دهید. با تایپ کردن، شل به دنبال دستوری میگردد که شامل متن تایپ شده باشد.
مراحل:
Ctrl+R را فشار دهید.
شروع به تایپ بخشی از دستور کنید.
شل آخرین دستور مطابق با آن را نمایش میدهد.
برای انتخاب و اجرا، Enter را فشار دهید.
برای ویرایش دستور پیدا شده، کلیدهای جهتنما را بزنید.
برای لغو جستجو، Ctrl+G یا Ctrl+C را فشار دهید.
(reverse-i-search)`dock': docker ps -a
| کلید ترکیبی | توضیح |
|---|---|
Ctrl+P | دستور قبلی (مثل کلید بالا). |
Ctrl+N | دستور بعدی (مثل کلید پایین). |
Alt+. | آخرین آرگومان دستور قبلی را وارد میکند. |
Ctrl+Alt+y | آرگومان اول دستور قبلی را وارد میکند (در برخی شلها). |
!$ و !^| ساختار | توضیح | مثال |
|---|---|---|
!$ | آخرین آرگومان دستور قبلی را جایگزین میکند. | mkdir newdir + cd !$ → cd newdir |
!^ | اولین آرگومان دستور قبلی را جایگزین میکند. | cp file1 file2 + rm !^ → rm file1 |
!:n | آرگومان nام دستور قبلی. | !:2 آرگومان دوم |
!* | تمام آرگومانهای دستور قبلی. |
ایجاد یک دایرکتوری و بلافاصله رفتن به آن:
mkdir project cd !$ # معادل: cd project
جایگزینی یک فایل در دستور قبلی:
cat file1.txt less !:1 # معادل: less file1.txt
تغییر پسوند فایل در دستور قبلی:
convert image.png image.jpg # حالا میخواهیم دستور را با یک فایل دیگر اجرا کنیم !:0 !:1 !:2:s/jpg/png/ # معادل: convert image.png image.png (اما این کار عاقلانه نیست!)
پیدا کردن و اجرای آخرین دستور با یک کلمهی کلیدی:
!?error? # آخرین دستوری که شامل "error" است را اجرا میکند
| مفهوم | دستور/نماد | توضیح |
|---|---|---|
| نمایش تاریخچه | history | لیست دستورات قبلی. |
| تکرار آخرین دستور | !! یا Ctrl+P + Enter | اجرای مجدد آخرین دستور. |
| تکرار دستور شمارهی n | !n | اجرای دستور n از تاریخچه. |
| جستجوی تعاملی | Ctrl+R | جستجوی معکوس در تاریخچه. |
| آخرین آرگومان | !$ یا Alt+. | استفاده از آخرین آرگومان دستور قبلی. |
| ایجاد Alias | alias name='command' | ایجاد نام مستعار برای دستورات. |
| حذف Alias | unalias name | حذف یک Alias. |
| غیرفعال کردن Alias | \command | اجرای دستور اصلی بدون Alias. |
| ذخیرهسازی دائمی | ~/.bashrc یا ~/.bash_aliases | فایلهای پیکربندی برای Aliasهای دائمی. |
تاریخچهی اشتراکی بین ترمینالها:
shopt -s histappend # تاریخچه را به فایل اضافه کن، نه بازنویسی PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
این تنظیمات باعث میشود که تاریخچه بین چند ترمینال باز بهروز باشد.
نادیده گرفتن دستورات تکراری در تاریخچه:
export HISTCONTROL=ignoredups # دستورات تکراری را ذخیره نکن export HISTCONTROL=ignorespace # دستورات با فاصله را ذخیره نکن export HISTCONTROL=ignoreboth # ترکیب هر دو
افزایش ظرفیت تاریخچه:
export HISTSIZE=5000 export HISTFILESIZE=10000
ذخیرهی تاریخچه با timestamp:
export HISTTIMEFORMAT="%F %T " # تاریخچه با زمان ذخیره شود history # خروجی: # 1 2024-07-27 10:30:15 ls # 2 2024-07-27 10:30:18 cd /var/log
تاریخچهی دستورات با اجرای زماندار (با ts):
history | ts "[%Y-%m-%d %H:%M:%S]"
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات