Các phím tắt bàn phím
Để cuộn qua lịch sử bash của bạn, bạn có thể sử dụng một vài phím tắt hữu ích của bash. Nhấn các phím tắt và lệnh bạn đã sử dụng trước đó sẽ xuất hiện tại dấu nhắc.
- Mũi tên lên hoặc là Ctrl + P: Chuyển đến lệnh trước trong lịch sử của bạn. Nhấn phím nhiều lần để quay lại qua các lệnh bạn đã sử dụng.
- Mũi tên xuống hoặc là Ctrl + N: Chuyển đến lệnh tiếp theo trong lịch sử của bạn. Nhấn phím nhiều lần để đi tiếp qua các lệnh bạn đã sử dụng.
- Alt + R: Hoàn nguyên mọi thay đổi đối với lệnh bạn đã kéo từ lịch sử của mình nếu bạn đã chỉnh sửa lệnh đó trên dòng hiện tại.
Bash cũng có chế độ "thu hồi" đặc biệt mà bạn có thể sử dụng để tìm kiếm các lệnh bạn đã chạy trước đó, thay vì cuộn qua từng lệnh một.
- Ctrl + R: Nhớ lại lệnh cuối cùng khớp với các ký tự bạn cung cấp. Nhấn phím tắt này và bắt đầu nhập để tìm kiếm lịch sử bash của bạn cho một lệnh.
- Ctrl + O: Chạy lệnh bạn tìm thấy bằng Ctrl + R.
- Ctrl + G: Để chế độ tìm kiếm lịch sử mà không cần chạy lệnh.
Xem Lịch sử Bash của bạn
Bạn có thể in toàn bộ lịch sử bash của mình vào màn hình bằng cách chạy một lệnh duy nhất:
history
Bạn sẽ thấy danh sách tất cả các lệnh trong lịch sử bash của mình, cùng với một số ở bên trái mỗi lệnh. Lệnh có “1” bên cạnh nó là lệnh cũ nhất trong lịch sử bash của bạn, trong khi lệnh có số cao nhất là số gần đây nhất.
grep
lệnh để tìm kiếm lịch sử lệnh của bạn.
history | grep your_search
tail
để chỉ xem một số lượng nhỏ các lệnh gần đây bạn đã chạy. Ví dụ, lệnh sau đây sẽ hiển thị 5 mục cuối cùng trong lịch sử của bạn.
history | tail -5
Chạy lệnh từ lịch sử của bạn
Bash có thể nhanh chóng "mở rộng" các lệnh trước đó, hoặc mở rộng chúng và sửa đổi chúng. Tính năng này được gọi là "mở rộng lịch sử" và sử dụng dấu chấm than, được gọi là "bang". Chỉ cần nhập chúng vào lời nhắc và nhấn Enter để chạy chúng như bạn sẽ chạy bất kỳ lệnh nào khác.
Để chạy một lệnh cụ thể từ lịch sử của bạn theo số của nó, sử dụng lệnh sau:
!#
Ví dụ: giả sử bạn muốn chạy lệnh thứ 12 từ lịch sử bash của bạn. Đó là lệnh có dấu “12” ở bên trái của nó khi bạn chạy
history
chỉ huy. Bạn gõ lệnh sau đây.
!12
!!
Bạn cũng có thể tham khảo một lệnh một số dòng nhất định. Ví dụ,
!-2
sẽ chạy lệnh thứ hai đến lệnh cuối cùng bạn đã chạy.
!!
có nghĩa giống như
!-1
!!
hoặc bất kỳ biểu thức nào khác trong phần này. Ví dụ, bạn có thể gõ lệnh sau để chạy lại lệnh cuối cùng bạn đã chạy qua
sudo
cho nó đặc quyền root. Điều này đặc biệt hữu ích nếu bạn quên thêm
sudo
trước khi chạy lệnh.
sudo !!
Hoặc, ví dụ, bạn có thể chạy lại lệnh trước đó và đặt đầu ra của nó thành grep để tìm kiếm một số văn bản.
!! | grep text
!text
Vì vậy, nếu gần đây bạn đã chạy lệnh bắt đầu bằng
ping
bạn có thể chạy lệnh sau để tìm kiếm nó. Thao tác này sẽ tìm kiếm ngược lại thông qua lịch sử của bạn, xác định lệnh gần đây nhất bắt đầu bằng “
pi
“, Và ngay lập tức chạy nó:
!pi
:p
với bất kỳ mở rộng ở trên và bash sẽ in lệnh đến thiết bị đầu cuối mà không cần chạy nó. Điều này hữu ích nếu bạn muốn xác nhận bạn đang chọn đúng lệnh trước khi bạn chạy nó.
!12:p
!!:p
!text:p
Sử dụng lại các đối số từ lịch sử của bạn
Bash cũng cho phép bạn chạy một lệnh mới, nhưng sử dụng các đối số từ các lệnh trước đó trong lịch sử của bạn. Điều này có thể giúp bạn nhanh chóng sử dụng lại các đối số dài hoặc phức tạp mà không phải nhập lại chúng.
command !$
Ví dụ: giả sử bạn đã chạy lệnh
touch /home/chris/some_long_file_name_you_dont_want_to_type_again
. Bây giờ bạn muốn chạy lệnh
nano /home/chris/some_long_file_name_you_dont_want_to_type_again
. Thay vì gõ toàn bộ điều từ đầu, bạn có thể chạy:
nano !$
Các
!$
sẽ làm cho bash tự động điền vào đối số cuối cùng từ lệnh trước của bạn.
ping google.com -c 4
và sau đó chạy
ping !$
điều này sẽ chỉ mở rộng thành “
ping 4
“.
Để khắc phục tình trạng này, bạn có thể sử dụng thủ thuật sau đây để mở rộng đối số đầu tiên trên dòng, thay vì đối số cuối cùng:
command !^
Vì vậy, nếu bạn chạy
ping google.com -c 4
và sau đó chạy
ping !^
bash sẽ mở rộng này thành “
ping google.com'
command !*
Vì vậy, nếu bạn chạy
ping !*
thay vào đó, bash sẽ tự động điền vào tất cả các đối số bạn đã sử dụng trong lệnh trước đó.
command !abc:#
Ví dụ, chúng tôi chạy lệnh
sudo hostname ubuntu
sớm hơn. Nếu chúng ta chạy lệnh sau, bash sẽ tìm kiếm ngược lại thông qua lịch sử để tìm lệnh cuối cùng bắt đầu bằng các chữ cái chúng ta gõ và điền vào đối số mà chúng ta chỉ định. Vì vậy, nếu chúng ta chạy
echo !su:2
bash sẽ tìm lại để tìm lệnh cuối cùng bắt đầu bằng “
su
”Và điền vào đối số thứ hai của nó, đó là“
ubuntu
“.
Thủ thuật khác hoạt động như bạn mong đợi. Ví dụ, thay thế số bằng dấu hoa thị, được gọi là ký tự đại diện, làm cho bash điền vào tất cả các đối số từ lệnh:
command !abc:*
Chạy lại lệnh trước và sửa đổi nó
Bash cũng cho phép bạn chạy lại lệnh trước và chỉ định một thứ cần được thay đổi. Điều này có thể hữu ích cho việc sửa lỗi đánh máy trong một lệnh. Ví dụ, lệnh sau sẽ chạy lại lệnh trước đó, thay thế văn bản “
abc
"Trong đó với văn bản"
xyz
“.
^abc^xyz
Ví dụ: nếu bạn vô tình chạy
ping gogle.com
sau đó bạn có thể chạy
^gog^goog
và bash sẽ chạy lệnh
ping google.com
thay thế.
Nơi lưu trữ lịch sử của bạn, và làm thế nào để xóa nó
Bash shell lưu trữ lịch sử các lệnh bạn đã chạy trong tệp lịch sử của tài khoản người dùng của bạn tại ~ /.bash_history theo mặc định. Ví dụ: nếu tên người dùng của bạn là bob, bạn sẽ tìm thấy tệp này tại /home/bob/.bash_history.
Bởi vì lịch sử của bạn được lưu trữ trong một tập tin, nó vẫn tồn tại giữa các phiên. Bạn có thể chạy một số lệnh, đăng xuất, quay lại vào ngày hôm sau và các lệnh đó sẽ vẫn nằm trong tệp lịch sử của bạn đã sẵn sàng để xem và sử dụng. Mỗi tài khoản người dùng có tệp lịch sử riêng của nó với một lịch sử lệnh riêng biệt.
Để xóa lịch sử bash của bạn, bạn có thể chạy lệnh sau. Thao tác này sẽ xóa nội dung của tệp.bash_history của tài khoản người dùng của bạn:
history -c
HISTSIZE
biến. Mặc định thường là 500 hoặc 1000 mục nhập. Bạn có thể chạy lệnh sau để xem kích thước lịch sử bash trên hệ thống của bạn.
echo $HISTSIZE
Để đặt lịch sử của bạn về 0, hãy chạy lệnh sau.
HISTSIZE=0
Đối với phiên hiện tại, bash sẽ không lưu trữ bất kỳ mục nhập lịch sử nào trừ khi bạn chạy lệnh như
HISTSIZE=1000
để đặt lại cho một số mục nhất định.
Cách bỏ qua không gian và trùng lặp
Bash cho phép bạn bỏ qua các mục lịch sử bắt đầu bằng dấu cách nếu bạn đặt
HISTCONTROL
biến thành
ignorespace.
HISTCONTROL=ignorespace
Nhập dấu cách trước lệnh trước khi chạy nó trong bash shell và lệnh sẽ chạy bình thường, nhưng sẽ không xuất hiện trong lịch sử của bạn nếu bạn đã bật biến này. Điều này cho phép bạn giữ lịch sử của bạn sạch hơn một chút, chọn chạy các lệnh mà không có chúng xuất hiện trong lịch sử của bạn.
HISTCONTROL
đến
ignoredups.
HISTCONTROL=ignoredups
ignorespace
và
ignoredups
tính năng, đặt
HISTCONTROL
biến thành
ignoreboth.
HISTCONTROL=ignoreboth
Lưu ý rằng các biến bash bạn đặt sẽ chỉ tồn tại cho phiên hiện tại. Bạn sẽ cần phải thêm các tệp này vào tệp.bashrc của tài khoản người dùng của bạn để tự động đặt các giá trị này trong mỗi phiên bash bạn bắt đầu, nếu bạn thích điều đó.