ฉันจะค้นหาประวัติบรรทัดคำสั่งของฉันสำหรับคำสั่งที่ฉันใช้ก่อนหน้าได้อย่างไร


186

นอกเหนือจากการดูประวัติแล้วมีวิธีการกรองประวัติของฉันหรือไม่?

หากฉันต้องการค้นหาคำสั่งที่ขึ้นต้นด้วย "ssh"

คำตอบ:


271

กดCtrl+ และประเภทR + จะเริ่มค้นหาจากคำสั่งล่าสุดเป็นคำสั่งเก่า (ย้อนกลับค้นหา) หากคุณมีมากกว่าหนึ่งคำสั่งซึ่งเริ่มต้นด้วยกด+ อีกครั้งและอีกครั้งจนกว่าคุณจะพบการแข่งขันsshCtrlRsshCtrlR

เมื่อคุณพบการจับคู่คุณสามารถกดEnterเพื่อรันคำสั่งหรือเคอร์เซอร์ซ้าย / ขวาเพื่อเลือกข้อความของคำสั่ง

ไม่มีตัวเลือกย้อนกลับเริ่มต้นสำหรับCtrl+ Rเพื่อกลับทิศทางการค้นหา แต่ที่นี่คุณจะพบคำแนะนำบางอย่างเกี่ยวกับเรื่องนี้


90

หากคุณเพียงแค่ต้องการค้นหาประวัติของคุณคุณสามารถใช้history | grep sshแทนสิ่งที่คุณต้องการค้นหา


ฉันใช้วิธีนี้เพราะฉันเชื่อมโยงเพื่อดูรายการทุกคำสั่งที่ตรงกับตัวกรองของฉัน
Pisu

15

ฉันทำสิ่งต่าง ๆ ข้างต้นเล็กน้อยใช้งานได้ดีสำหรับฉัน (ถ้าคุณหมายถึงประวัติทุบตีของคุณ

ในโฟลเดอร์บ้านของฉันฉันสร้างไฟล์ชื่อ

.inputrc

ข้างในนี้

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

หมายเหตุ: ข้างต้นดูเหมือนจะไม่ทำงานอีกต่อไปใน 14.04 ดังนั้นสิ่งนี้ทำสิ่งเดียวกัน -

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

จากนั้นพิมพ์คำสั่งก่อนหน้านี้จำนวนมาก แต่ฉันต้องการ & ใช้ปุ่มหน้าขึ้น / หน้า dn ค้นหาประวัติโดยเริ่มต้นด้วยหน้าขึ้นเสมอ


หากคุณมีสิทธิ์การใช้งานรูทคุณสามารถแก้ไข / etc / inputrc soo ซึ่งจะทำงานสำหรับผู้ใช้ทั้งหมด
Wolfy

1
@doug, hmm .. ฉันมี Ubuntu 15.04 โซลูชันนี้ใช้งานได้ แต่จะทำให้คีย์ Ctrl + LeftArrow / Ctrl + RightArrow สับสน ปัญหาดูเหมือนกับการสร้างไฟล์. inputrc และไม่ได้อยู่ในรายการ
Ravi

อย่าลืมที่จะ rebutininputrc หรือปิดอาคาร
David Brossard

14

การกดCtrl+ Rจะเริ่มต้นโหมด "reverse-i-search" การพิมพ์ "ssh" จะค้นหาประวัติคำสั่งของคุณซึ่งมี "ssh"


9

นี่เป็นอีกวิธีหนึ่งที่ใช้คำสั่งแบบคลาสสิก (มีแนวโน้มที่จะทำงานข้าม distros) ประวัติคำสั่งถูกเก็บไว้ในไฟล์.bash_historyในโฮมไดเร็กตอรี่ของคุณ, ดังนั้นคุณสามารถทำได้:

grep "ssh" ~/.bash_history

อย่าลืม-iค่าสถานะหากคุณต้องการค้นหาแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่


history | grep sshจะแสดงเฉพาะเซสชันของชั่วคราวดังนั้นฉันจะไปหาคำตอบนี้
iniravpatel

3

ฉันพบฟังก์ชั่นต่อไปนี้ที่ใดที่หนึ่งบนอินเทอร์เน็ตและใช้มันเพื่อผลลัพธ์ที่ยอดเยี่ยม ใส่สิ่งนี้ใน~/.bashrc:

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

exec bashตอนนี้อีกครั้งโหลดเปลือกของคุณ: ตอนนี้คุณมีคำสั่งใหม่ซึ่งคุณสามารถใช้ดังนี้

hgrep ssh

มันจะแสดงรายการคำสั่งที่ตรงกันจากประวัติของคุณ หากต้องการเรียกใช้คำสั่งให้พิมพ์!ตามด้วยหมายเลขคำสั่ง นี่คือตัวอย่าง:

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

ฉันชอบวิธีนี้ดีกว่าCtrl+ Rเพราะมันช่วยให้การค้นหามีความยืดหยุ่นมากขึ้นและฉันสามารถเห็นผลลัพธ์หลายรายการพร้อมกัน




1

ประวัติดี แต่ จำกัด - ฉันต้องการตั้งค่าสภาพแวดล้อมทุบตีของฉันเพื่อให้ฉันบันทึกคำสั่งทั้งหมดที่ฉันเคยเรียกใช้นอกเหนือจากไดเรกทอรีที่พวกเขาเรียกใช้แล้วฉันเรียกใช้คำสั่งเพื่อแสดงรายการคำสั่งทั้งหมด ฉันทำงานในไดเรกทอรีปัจจุบันซึ่งฉันสามารถไปที่ grep เป็นต้น - เรียกว่า 'dish' ดู:

https://github.com/wolfwoolford/dish

หากคุณต้องการที่จะตัดการไล่ล่าเพียงแหล่งที่มานี้ใน. bashrc ของคุณ ( https://github.com/wolfwoolford/dish/blob/master/dishrc )

นอกจากนี้ยังมีคำสั่งที่มีประโยชน์มากที่คุณจะได้รับฟรีที่เรียกว่า 'dishg' หรือจานทั่วโลก - ซึ่งพิมพ์คำสั่งทุกคำสั่งที่เรียกใช้โดยไม่คำนึงถึงไดเรกทอรี เห็นได้ชัดว่าอันนี้มีประโยชน์เฉพาะเมื่อใช้กับ grep และหาง ฯลฯ ...

ฉันใช้มันมาหลายปีแล้วและมันเป็นสิ่งแรกที่ฉันติดตั้งเมื่อใดก็ตามที่ฉันติดตั้งกล่องใหม่ มันบันทึกคำสั่งที่คุณพบในไฟล์ข้อความในไดเรกทอรีที่ซ่อนอยู่ (~ / .dish) .. ฉันไม่เคยมีปัญหาเรื่องพื้นที่ดิสก์ ...


0

ต้องการเขียนสิ่งนี้เป็นความคิดเห็นถึง@ssmyแต่ไม่สามารถรับการจัดรูปแบบในความคิดเห็นที่ให้ความร่วมมือ

หลังจากการค้นหาผ่านทางประวัติศาสตร์กับคุณแล้วคุณสามารถดำเนินการคำสั่งที่คุณต้องการโดยการพิมพ์หมายเลขของมันใช้ได้กับเครื่องหมายอัศเจรีย์เช่นhistory | grep ssh!42

ตัวอย่าง:

$ ประวัติ | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$! 42
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.