Ngoài việc xem lịch sử, có cách nào để lọc lịch sử của tôi không?
Nói rằng tôi muốn tìm kiếm một lệnh bắt đầu bằng "ssh"?
Ngoài việc xem lịch sử, có cách nào để lọc lịch sử của tôi không?
Nói rằng tôi muốn tìm kiếm một lệnh bắt đầu bằng "ssh"?
Câu trả lời:
Nhấn Ctrl+ Rvà gõ ssh
. Ctrl+ Rsẽ bắt đầu tìm kiếm từ lệnh gần đây nhất đến lệnh cũ (tìm kiếm ngược). Nếu bạn có nhiều lệnh bắt đầu bằng ssh
, bấm Ctrl+ Rnhiều lần cho đến khi bạn tìm thấy kết quả khớp.
Khi bạn đã tìm thấy kết quả khớp, bạn có thể nhấn Enterđể thực hiện lệnh hoặc con trỏ trái / phải để chỉ chọn văn bản của lệnh.
Không có tùy chọn đảo ngược mặc định cho Ctrl+ Rđể đảo ngược hướng tìm kiếm nhưng ở đây bạn sẽ tìm thấy một số đề xuất về nó.
Tôi thực hiện một biến thể nhỏ ở trên, hoạt động tốt với tôi (nếu bạn đang đề cập đến lịch sử bash của bạn
Trong thư mục nhà của tôi, tôi tạo một tập tin có tên
.inputrc
Bên trong đi này
"\e[5~": history-search-backward
"\e[6~": history-search-forward
Lưu ý: ở trên dường như không hoạt động nữa trong 14.04, vì vậy điều này cũng làm điều tương tự -
"\e[A":history-search-backward
"\e[B":history-search-forward
Sau đó, nhập nhiều lệnh trước đó tôi muốn và sử dụng các nút dn trang / trang tìm kiếm lịch sử, luôn bắt đầu với trang lên
Đây là một phương pháp khác sử dụng các lệnh cổ điển (nhiều khả năng hoạt động trên các bản phát hành). Lịch sử lệnh được lưu trữ trong tệp .bash_history
trong thư mục chính của bạn, vì vậy bạn có thể làm điều này:
grep "ssh" ~/.bash_history
Đừng quên -i
lá cờ nếu bạn cần là trường hợp tìm kiếm không nhạy cảm.
history | grep ssh
sẽ chỉ hiển thị ssh phiên tạm thời vì vậy tôi sẽ đi cho câu trả lời này.
Tôi tìm thấy chức năng sau đây ở đâu đó trên Internet và đã sử dụng nó rất hiệu quả. Đặt cái này trong ~/.bashrc
:
hgrep () {
history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}
Bây giờ tải lại vỏ của bạn : exec bash
. Bây giờ bạn có một lệnh mới, mà bạn có thể sử dụng như vậy:
hgrep ssh
Nó sẽ cho bạn thấy một danh sách các lệnh phù hợp từ lịch sử của bạn. Để chạy một lệnh, gõ !
theo số lệnh. Đây là một ví dụ:
~:$ hgrep scp
207 tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .
421 tn scp scott-laptop __HOST__:Scott\ Severance.asc .
422 tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .
468 tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
469 tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
470 scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207
Tôi thích cách tiếp cận này tốt hơn Ctrl+ Rvì nó cho phép tìm kiếm linh hoạt hơn nhiều và tôi có thể thấy nhiều kết quả cùng một lúc.
Nếu bạn sử dụng shell trong Emacs ( M-x shell
), bạn có thể sử dụng M-r
(nó tương đương với Ctrl+ Rtrong một thiết bị đầu cuối ).
Lịch sử là tốt nhưng có giới hạn - Tôi thích thiết lập môi trường bash của mình để tôi ghi nhật ký tất cả các lệnh tôi đã từng chạy, ngoài thư mục mà chúng đã chạy. Sau đó, tôi chạy một lệnh để liệt kê tất cả các lệnh Tôi đã chạy trong thư mục hiện tại, mà tôi có thể chuyển sang grep, v.v. - nó được gọi là 'món ăn' xem:
https://github.com/wolfwoolford/dish
Nếu bạn muốn cắt theo đuổi, chỉ cần nguồn này trong .bashrc của bạn ( https://github.com/wolfwoolford/dish/blob/master/dishrc )
Ngoài ra còn có một lệnh thực sự hữu ích mà bạn nhận được miễn phí gọi là 'Dishg' - hoặc món ăn toàn cầu - in ra mọi lệnh từng chạy, bất kể thư mục. Rõ ràng cái này chỉ hữu ích khi được sử dụng với grep và tail, v.v ...
Tôi đã sử dụng nó trong nhiều năm và đó là điều đầu tiên tôi cài đặt bất cứ khi nào tôi thiết lập một hộp mới. Nó ghi nhật ký các lệnh bạn chạy vào các tệp văn bản trong một thư mục ẩn (~ / .dish) .. Tôi chưa bao giờ gặp vấn đề với không gian đĩa ...
Muốn viết bài này dưới dạng bình luận cho @ssmy nhưng không thể lấy định dạng trong bình luận để hợp tác.
Sau khi tìm kiếm thông qua lịch sử với history | grep ssh
bạn sau đó có thể thực hiện lệnh bạn muốn bằng cách gõ số của nó prepended với một dấu chấm than, ví dụ !42
.
Thí dụ:
$ lịch sử | grep ssh 5 ssh me@someserver.net 13 ssh me@someotherserver.net 42 ssh me@thisone.com $ 42