کارایی در محیط خط فرمان تا حد زیادی به کاهش تایپ تکراری و دسترسی سریع به دستورات قبلی وابسته است. شل 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
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ها
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 در حین اجرا
اگر میخواهید یک دستور را بدون اعمال Alias اجرا کنید، راههای مختلفی وجود دارد:
-
استفاده از بکاسلش قبل از دستور:
\rm myfile.txtrmاصلی اجرا میشود، نه Alias آن. -
استفاده از نقلقول:
"rm" myfile.txt 'rm' myfile.txt
-
استفاده از مسیر کامل:
/usr/bin/rm myfile.txt
-
استفاده از
command:command rm myfile.txt
Reusing Previous Commands
علاوه بر history و !، راههای دیگری نیز برای دسترسی سریع به دستورات قبلی وجود دارد:
۱. کلیدهای جهتنما (Arrow Keys)
-
کلید بالا (
↑): آخرین دستور را در خط فرمان قرار میدهد. هر بار زدن، یک دستور قدیمیتر را نشان میدهد. -
کلید پایین (
↓): برعکس کلید بالا عمل میکند و دستورات جدیدتر را نشان میدهد.
۲. جستجوی معکوس در تاریخچه (Reverse-i-search)
با فشردن کلیدهای 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]"
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات