Bash shell là môi trường đầu cuối tiêu chuẩn có trong hầu hết các bản phân phối Linux, đi kèm với macOS và có sẵn để cài đặt trên Windows 10. Nó ghi nhớ các lệnh bạn nhập và lưu trữ chúng trong một tệp lịch sử. Bạn có thể biết một vài điều cơ bản về lịch sử bash, nhưng nó mạnh hơn rất nhiều so với những gì bạn có thể nhận ra.
Các phím tắt bàn phím
LIÊN QUAN: Các phím tắt tốt nhất cho Bash (hay còn gọi là Thiết bị đầu cuối Linux và macOS)
Để cuộn qua lịch sử bash của mình, bạn có thể sử dụng một số phím tắt hữu ích trong số bash. Nhấn các phím tắt này và các 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 để đi 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 để chuyển 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 đã lấy từ lịch sử của mình nếu bạn đã chỉnh sửa nó trên dòng hiện tại.
Bash cũng có một chế độ “gọi lạ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: Gọi 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ệnh trong lịch sử bash của bạn.
- 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 ra màn hình bằng cách chạy một lệnh:
history
Bạn sẽ thấy danh sách tất cả các lệnh trong lịch sử cơ sở của mình, cùng với một số ở bên trái của mỗi lệnh. Lệnh có “1” bên cạnh là lệnh cũ nhất trong lịch sử cơ sở của bạn, trong khi lệnh có số cao nhất là lệnh gần đây nhất.
LIÊN QUAN: Trở thành một người dùng năng lượng đầu cuối Linux với 8 thủ thuật này
Bạn có thể làm bất cứ điều gì bạn thích với đầu ra. Ví dụ: bạn có thể chuyển nó đến grep
lệnh để tìm kiếm lịch sử lệnh của bạn.
history | grep your_search
Bạn cũng có thể chuyển nó đến tail
lệnh chỉ xem một số lượng nhỏ các lệnh gần đây bạn đã chạy. Ví dụ: lệnh sau sẽ hiển thị 5 mục nhập 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à “tiếng nổ”. Chỉ cần nhập chúng tại lời nhắc và nhấn Enter để chạy chúng giống như bạn đang 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ó, hãy 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 mình. Đó là lệnh có “12” ở bên trái khi bạn chạy history
chỉ huy. Bạn sẽ gõ lệnh sau.
!12
Để chạy lại lệnh cuối cùng bạn đã chạy, hãy nhập như sau. Thao tác này có tác dụng tương tự như nhấn Mũi tên lên một lần để xem lệnh trước đó và sau đó nhấn Enter.
!!
Bạn cũng có thể tham chiếu đến một lệnh có số dòng trở lại nhất định. Ví dụ, !-2
sẽ chạy lệnh thứ hai đến lệnh cuối cùng mà bạn đã chạy. !!
có nghĩa giống như !-1
.
Việc mở rộng này hoạt động ở bất kỳ đâu trên đường truyền. Bạn có thể thêm bất cứ thứ gì bạn thích trước hoặc sau !!
hoặc bất kỳ biểu thức nào khác trong phần này. Ví dụ: bạn có thể nhập lệnh sau để chạy lại lệnh cuối cùng bạn đã chạy qua sudo
, cấp 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 một lệnh.
sudo !!
Hoặc, ví dụ, bạn có thể chạy lại lệnh trước đó và chuyển đầu ra của nó thành grep để tìm kiếm một số văn bản.
!! | grep text
Để tìm kiếm lệnh trong lịch sử của bạn và chạy lệnh đó, hãy nhập như sau. Thao tác này sẽ chạy lệnh cuối cùng khớp với văn bản bạn chỉ định:
!text
Vì vậy, nếu gần đây bạn đã chạy một 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 lịch sử của bạn, tìm lệnh gần đây nhất bắt đầu bằng “pi
“, Và ngay lập tức chạy nó:
!pi
Bạn có thể nối một :p
đối với bất kỳ mở rộng nào ở 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 rằng bạn đang chọn đúng lệnh trước khi chạy nó.
!12:p
!!:p
!text:p
Sử dụng lại các lập luận 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 cần 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ộ 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.
Điều này chỉ điền vào đối số cuối cùng. Vì vậy, nếu bạn chạy 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 để 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 điều này thành “ping google.com"
.
Để điền vào tất cả các đối số được sử dụng trong lệnh trước đó thay vì chỉ một đối số duy nhất, bạn sẽ sử dụng như sau:
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 đó.
Bạn có thể sử dụng thủ thuật tương tự mà bạn sử dụng để chạy các lệnh từ lịch sử của mình để lấy các đối số từ chúng. Chỉ cần sử dụng mẫu sau.
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 trong lịch sử để tìm lệnh cuối cùng bắt đầu bằng các chữ cái chúng ta nhập 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 kiế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
“.
Các thủ thuật khác hoạt động như bạn có thể mong đợi. Ví dụ: thay thế số bằng dấu hoa thị, được gọi là ký tự đại diện, khiến 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 số thứ cần được thay đổi. Điều này có thể hữu ích để 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 đó có dòng chữ”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ịch sử của bạn được lưu trữ và cách 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ử tài khoản người dùng của mình 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, nó sẽ 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 với 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 trong tài khoản người dùng của bạn:
history -c
Bash chỉ ghi nhớ một số lệnh giới hạn theo mặc định, ngăn không cho tệp lịch sử phát triển quá lớn. Số lượng mục lịch sử mà bash nhớ được kiểm soát bởi HISTSIZE
Biến đổi. 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 của lịch sử bash trên hệ thống của mình.
echo $HISTSIZE
Để đặt lịch sử của bạn thành 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 lịch sử nào trừ khi bạn chạy một lệnh như HISTSIZE=1000
để đặt nó trở lại một số mục nhất định.
Cách bỏ qua khoảng trắng 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 một 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 mình gọn gàng hơn một chút, chọn chạy các lệnh mà chúng không xuất hiện trong lịch sử của bạn.
Bash cũng cho phép bạn bỏ qua các lệnh trùng lặp có thể làm lộn xộn lịch sử của bạn. Để làm như vậy, hãy đặt HISTCONTROL
đến ignoredups.
HISTCONTROL=ignoredups
Để sử dụng cả hai ignorespace
và ignoredups
tính năng, thiết lập HISTCONTROL
biến thành ignoreboth.
HISTCONTROL=ignoreboth
Lưu ý rằng các biến bash mà bạn đặt sẽ chỉ tồn tại trong phiên hiện tại. Bạn sẽ cần thêm các giá trị này vào tệp .bashrc của tài khoản người dùng của mình để đặt các giá trị này tự động trong mỗi phiên bash mà bạn bắt đầu, nếu bạn muốn điều đó.
Bash shell là một công cụ phức tạp với nhiều tùy chọn hơn những công cụ này. Tham khảo các phần Nội dung Lịch sử Bash và Mở rộng Lịch sử trong sổ tay bash chính thức để biết thêm thông tin chi tiết và các thủ thuật nâng cao khác mà bạn có thể sử dụng.