Làm cách nào để tìm kiếm lịch sử dòng lệnh của tôi cho các lệnh tôi đã sử dụng trước đây?


186

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:


271

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ó.


90

Nếu bạn chỉ muốn tìm kiếm lịch sử của mình, bạn có thể chỉ cần sử dụng history | grep ssh, thay thế ssh cho bất cứ điều gì bạn muốn tìm kiếm.


Tôi sử dụng phương pháp này, vì tôi liên kết để xem trong danh sách mọi lệnh khớp với bộ lọc của tôi.
Pisu

15

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


nếu bạn có quyền hạn gốc, bạn có thể chỉnh sửa / etc / inputrc soo, điều này sẽ hoạt động cho tất cả người dùng.
Wolfy

1
@doug, hmm .. Tôi có Ubuntu 15.04. Giải pháp này hoạt động nhưng làm rối các phím Ctrl + LeftArrow / Ctrl + RightArrow. Vấn đề trông giống như với việc tạo tệp .inputrc chứ không phải với các mục trong đó.
Ravi

Đừng quên rebind .inputrc hoặc đóng thiết bị đầu cuối
David Brossard

14

Nhấn Ctrl+ Rsẽ bắt đầu chế độ "đảo ngược i-search", gõ "ssh" sẽ tìm kiếm lịch sử của bạn cho các lệnh có chứa "ssh".


9

Đâ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_historytrong 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 -ilá cờ nếu bạn cần là trường hợp tìm kiếm không nhạy cảm.


history | grep sshsẽ 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.
iniravpatel

3

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.




1

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 ...


0

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 sshbạ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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.