Cách sử dụng Lịch sử Bash của bạn trong Linux hoặc macOS Terminal
Shell bash là môi trường thiết bị đầu cuối tiêu chuẩn có trong hầu hết các bản phân phối Linux, có trong 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 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 nhiều so với bạn có thể nhận ra.
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. Bấm phím nhiều lần để đi ngược 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 của các ứng dụng khác 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 cái 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: Rời khỏi chế độ tìm kiếm lịch sử mà không 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 lên màn hình bằng cách chạy một lệnh duy nhất:
lịch sử
Bạn sẽ thấy một danh sách tất cả các lệnh trong lịch sử bash của bạn, cùng với một số ở bên trái của mỗi lệnh. Lệnh có lệnh 1 1 bên cạnh đó là lệnh lâu đời nhất trong lịch sử bash của bạn, trong khi lệnh có số cao nhất là gần đây nhất.
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ể dẫn nó đến grep
lệnh để tìm kiếm lịch sử lệnh của bạn.
lịch sử | grep your_search
Bạn cũng có thể dẫn nó đến đuôi
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 cuối trong lịch sử của bạn.
lịch sử | đuôi -5
Chạy các 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 biết đến như là bản mở rộng lịch sử của Wikipedia và sử dụng dấu chấm than, được biết đến với tên là bang bang. Chỉ cần nhập chúng tại dấu nhắc và nhấn Enter để chạy chúng giống như bạn 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 với một trò chơi 12 số 12 ở bên trái của nó khi bạn chạy lịch sử
chỉ huy. Bạn muốn gõ lệnh sau.
!12
Để chạy lại lệnh cuối cùng bạn đã chạy, gõ như sau. Điều 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 khảo một lệnh một số dòng nhất định trở lại. 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 tương tự như !-1
.
Bản mở rộng này hoạt động ở bất cứ đâu trên đường dây. Bạn có thể thêm bất cứ điều 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
, cho nó 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à chuyển đầu ra của nó sang grep để tìm kiếm một số văn bản.
!! | văn bản grep
Để tìm kiếm một lệnh trong lịch sử của bạn và chạy nó, hãy gõ như sau. Điều này sẽ chạy lệnh cuối cùng phù hợp với văn bản bạn chỉ định:
!bản văn
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ó. Điều này sẽ tìm kiếm ngược trong lịch sử của bạn, xác định vị trí lệnh gần đây nhất bắt đầu bằng cáchsố Pi
Sau đó, và ngay lập tức chạy nó:
!số Pi
Bạn có thể nối thêm : p
đến bất kỳ bản mở rộng nào ở trên và bash sẽ in lệnh tới thiết bị đầu cuối mà không 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
!văn bản: p
Sử dụng lại các lý lẽ 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.
lệnh! $
Ví dụ: giả sử bạn đã chạy lệnh chạm / nhà / chris / some_long_file_name_you_dont_want_to_type_again
. Bây giờ bạn muốn chạy lệnh nano / nhà / 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ỉ lấp đầy trong các đố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! $
, cái này sẽ mở rộng raping 4
Cúc.
Để khắc phục tình trạng này, bạn có thể sử dụng mẹo sau để mở rộng đối số đầu tiên trên dòng, thay vì cuối cùng:
lệnh! ^
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 đến thành phố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ố, bạn sẽ sử dụng như sau:
chỉ huy !*
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 cùng một mẹo bạn sử dụng để chạy các lệnh từ lịch sử của bạn để nhận các đối số từ chúng. Chỉ cần sử dụng mẫu sau.
lệnh! abc: #
Ví dụ, chúng tôi đã chạy lệnh tên máy chủ sudo Ubuntu
sớm hơn. Nếu chúng ta chạy lệnh sau, bash sẽ tìm kiếm ngược 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 nhập và điền vào đối số chúng ta chỉ định. Vì vậy, nếu chúng ta chạy tiếng vang! su: 2
, Bash sẽ tìm kiếm lại để tìm lệnh cuối cùng bắt đầu vớisu
Nghiêng và điền vào đối số thứ hai của nó, đó làubfox
Cúc.
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:
lệnh! 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 cái gì đó nên được thay đổi. Điều này có thể hữu ích để sửa lỗi chính tả trong một lệnh. Ví dụ: lệnh sau sẽ chạy lại lệnh trước đó, thay thế văn bảnabc
Mùi trong đó với văn bảnXYZ
Cúc.
^ abc ^ xyz
Ví dụ: nếu bạn vô tình chạy ping gogle.com
, sau đó bạn có thể chạy ^ goo ^ goog
và bash sẽ chạy lệnh ping google.com
thay thế.
Lịch sử của bạn được lưu trữ ở đâu và làm thế nào để xóa nó
Shell bash lưu trữ lịch sử của các lệnh bạn đã chạy trong tệp lịch sử 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, 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à những lệnh đó sẽ vẫn có 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.
Để 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 tệp .bash_history của tài khoản người dùng của bạn:
lịch sử -c
Bash chỉ nhớ một số lệnh giới hạn theo mặc định, ngăn tệp lịch sử phát triển quá lớn. Số lượng ghi nhớ lịch sử bash được kiểm soát bởi LỊCH SỬ
biến. Mặc định thường là 500 hoặc 1000 mục. 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 bạn.
tiếng vang $ LỊCH SỬ
Để đặt lịch sử của bạn về 0, hãy chạy lệnh sau.
LỊCH SỬ = 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ư LỊCH SỬ = 1000
để đặt nó trở lại một số mục nhất định.
Làm thế nào để 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 khoảng trắng nếu bạn đặt LỊCH SỬ
biến thành bỏ qua.
HISTCONTROL = bỏ qua
Nhập một khoảng trắng 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 sạch sẽ hơn một chút, chọn chạy các lệnh mà 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, thiết lập LỊCH SỬ
đến bỏ qua.
HISTCONTROL = bỏ qua
Sử dụng cả bỏ qua
và bỏ qua
tính năng, thiết lập LỊCH SỬ
biến thành bỏ qua.
HISTCONTROL = ignboth
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 thêm chúng vào tệp .bashrc của tài khoản người dùng để 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 đó.
Shell bash là một công cụ phức tạp với nhiều tùy chọn hơn các tùy chọn này. Tham khảo các phần Mở rộng Lịch sử và Mở rộng Lịch sử của Bash trong hướng dẫn bash chính thức thông tin chi tiết hơn và các thủ thuật nâng cao khác mà bạn có thể sử dụng.