Bagaimana cara mencari riwayat baris perintah saya untuk perintah yang saya gunakan sebelumnya?

186

Selain melihat riwayat, apakah ada cara untuk memfilter riwayat saya?

Katakanlah saya ingin mencari perintah yang dimulai dengan "ssh"?

Blankman
sumber

Jawaban:

271

Tekan Ctrl+ Rdan ketik ssh. Ctrl+ Rakan memulai pencarian dari perintah terbaru ke yang lama (pencarian terbalik). Jika Anda memiliki lebih dari satu perintah yang dimulai dengan ssh, Tekan Ctrl+ Rlagi dan lagi hingga Anda menemukan kecocokan.

Setelah menemukan kecocokan, Anda dapat menekan Enteruntuk menjalankan perintah atau kursor kiri / kanan untuk hanya memilih teks perintah.

Tidak ada opsi membalikkan default untuk Ctrl+ Runtuk membalikkan arah pencarian tetapi di sini Anda akan menemukan beberapa saran tentang itu.

Pangeran John Wesley
sumber
90

Jika Anda hanya ingin mencari riwayat Anda, Anda bisa menggunakan history | grep ssh, mengganti ssh untuk apa pun yang ingin Anda cari.

ssmy
sumber
Saya menggunakan metode ini, karena saya menautkan untuk melihat daftar setiap perintah yang cocok dengan filter saya.
Pisu
15

Saya melakukan sedikit variasi di atas, bekerja dengan baik untuk saya (jika Anda mengacu pada sejarah bash Anda

Di folder rumah saya, saya membuat file bernama

.inputrc

Di dalam pergi ini

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Catatan: di atas sepertinya tidak berfungsi lagi di 14.04 jadi ini melakukan hal yang sama -

"\e[A":history-search-backward
"\e[B":history-search-forward

Kemudian mengetik banyak dari perintah sebelumnya saya ingin & menggunakan tombol halaman atas / halaman dn mencari sejarah, selalu dimulai dengan halaman atas

doug
sumber
jika Anda memiliki izin root, Anda dapat mengedit / etc / inputrc soo ini akan bekerja untuk semua pengguna.
Wolfy
1
@doug, hmm .. Saya sudah Ubuntu 15.04. Solusi ini berfungsi tetapi mengacaukan tombol Ctrl + LeftArrow / Ctrl + RightArrow. Masalahnya seperti membuat file .inputrc dan tidak dengan entri di dalamnya.
Ravi
Jangan lupa untuk menyalin .inputrc atau menutup terminal
David Brossard
14

Menekan Ctrl+ Rakan memulai mode "reverse-i-search", mengetik "ssh" akan mencari riwayat Anda untuk perintah yang mengandung "ssh".

Sergey
sumber
9

Berikut adalah metode lain menggunakan perintah klasik (lebih cenderung bekerja lintas distro). Command history disimpan dalam file .bash_historydi direktori home Anda, sehingga Anda dapat melakukan ini:

grep "ssh" ~/.bash_history

Jangan lupa -ibenderanya jika Anda membutuhkan pencarian case-sensitive.

DisgruntledGoat
sumber
history | grep sshhanya akan menunjukkan sesi sementara ssh jadi saya akan pergi untuk jawaban ini.
iniravpatel
3

Saya menemukan fungsi berikut di suatu tempat di Internet dan telah menggunakannya dengan sangat baik. Letakkan ini di ~/.bashrc:

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}

Sekarang kembali memuat shell Anda: exec bash. Anda sekarang memiliki perintah baru, yang dapat Anda gunakan seperti ini:

hgrep ssh

Ini akan menampilkan daftar perintah yang cocok dari riwayat Anda. Untuk menjalankan perintah, ketik !diikuti dengan nomor perintah. Ini sebuah contoh:

~:$ 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

Saya menyukai pendekatan ini lebih baik daripada Ctrl+ Rkarena memungkinkan pencarian yang jauh lebih fleksibel, dan saya dapat melihat banyak hasil sekaligus.

Scott Severance
sumber
2

Letakkan ini di ~/.bashrc:

alias hgrep = 'history | grep --color = auto '

contoh:

haji messaoud
sumber
1

Riwayatnya baik tetapi terbatas - Saya lebih suka mengatur lingkungan bash saya sehingga saya mencatat semua perintah yang pernah saya jalankan, selain direktori tempat mereka dijalankan. Lalu saya menjalankan perintah untuk mendaftar semua perintah Saya telah menjalankan di direktori saat ini, yang saya dapat pipa untuk grep dll - itu disebut 'piring' lihat:

https://github.com/wolfwoolford/dish

Jika Anda ingin memotong ke pengejaran, cukup masukkan ini di .bashrc Anda ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

Ada juga perintah yang sangat berguna yang Anda dapatkan secara gratis yang disebut 'dishg' - atau hidangan global - yang mencetak setiap perintah yang pernah dijalankan, terlepas dari direktori. Jelas ini hanya berguna ketika digunakan dengan grep dan ekor dll ...

Saya telah menggunakannya selama bertahun-tahun dan ini benar-benar hal pertama yang saya instal setiap kali saya menyiapkan kotak baru. Log perintah yang Anda jalankan ke file teks dalam direktori tersembunyi (~ / .dish) .. Saya tidak pernah memiliki masalah dengan ruang disk ...

David Woolford
sumber
0

Ingin menulis ini sebagai komentar untuk @ssmy tetapi tidak dapat memformat dalam komentar untuk bekerja sama.

Setelah mencari melalui sejarah dengan history | grep sshAnda kemudian dapat menjalankan perintah yang Anda inginkan dengan mengetikkan nomor yang diawali dengan tanda seru, misalnya !42.

Contoh:

$ sejarah | grep ssh
  5 ssh [email protected]
 13 ssh [email protected]
 42 ssh [email protected]
$! 42
pembuat magik
sumber