จะค้นหาประวัติคำสั่งเชลล์ได้อย่างไรตั้งแต่สร้างเครื่อง?


23

ฉันสร้างเครื่องเสมือนของ Ubuntu เมื่อสองสามสัปดาห์ที่แล้วและได้ทำโปรเจ็กต์ต่อเนื่องตั้งแต่นั้นมา

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

ฉันจะhistoryรับคำสั่งให้กลับไปยังคำสั่งแรกที่ฉันพิมพ์หลังจากที่ฉันสร้างเครื่องได้อย่างไร
หรือมีสถานที่อื่นที่เก็บคำสั่งทั้งหมดใน Ubuntu หรือไม่


2
เท่าที่ฉันรู้ว่าคุณทำไม่ได้ คุณสามารถย้อนกลับไปได้เท่าที่มีการตั้งค่าบัฟเฟอร์ประวัติ หากคุณกำลังถามเกี่ยวกับแพคเกจที่คุณสามารถติดตั้งเพื่อบันทึกประวัติคำสั่งในอนาคตไม่แน่นอนบางทีคุณควรแก้ไขคำถามของคุณ
RobotHumans

คำตอบ:


26

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

อย่างไรก็ตามคุณสามารถดูรายการประวัติได้ที่นี่

/home/<YOUR_USERNAME>/.bash_history

คำถามที่เกี่ยวข้อง (สำหรับการจัดการประวัติเชลล์หลายรายการ):

เป็นไปได้ไหมที่จะเขียนถึง. bash_history ทันที?


3
ไม่เป็นความจริงที่บันทึกประวัติจากเทอร์มินัล / เชลล์หนึ่งรายการเท่านั้น เมื่อคุณเรียกใช้historyมันจะแสดงประวัติของเชลล์ปัจจุบันเป็นล่าสุดและประวัติจากเชลล์อื่น ๆ ทั้งหมด (รวมถึงเชลล์ในเซสชั่นก่อนหน้ารวมถึงข้ามวงจรไฟฟ้า) ก่อนหน้านั้น ทุกกรณีเปลือกบันทึกประวัติศาสตร์ของพวกเขาไป.bash_historyเมื่อออก ไม่มีอินสแตนซ์บันทึกไว้ที่นั่นโดยอัตโนมัติก่อนจุดนั้น
Eliah Kagan

6

ตามค่าเริ่มต้นไม่มีที่ที่คำสั่งทั้งหมดจะถูกบันทึกและเก็บไว้อย่างไม่มีกำหนดแม้ว่าจะ~/.bash_historyมีคำสั่งไม่กี่ครั้งที่ผ่านมา (หากคุณใช้bashซึ่งเป็นเชลล์เริ่มต้นใน Ubuntu)

หากคุณต้องการให้ทุกคำสั่งพิมพ์ลงในbashบันทึกอย่างถาวรคุณจะต้องตั้งค่าด้วยตนเอง ตัวอย่างเช่นคุณสามารถใส่~/.bashrcคำสั่งต่อไปนี้ในไฟล์ของคุณเพื่อบันทึกคำสั่งทั้งหมดที่พิมพ์ในbashเชลล์ลงในไฟล์~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

ด้านบนตั้งค่ากับดักDEBUGซึ่งจะถูกดำเนินการก่อนที่คำสั่งปกติจะถูกดำเนินการ ในตัวจะใช้ในการทดสอบว่าคำสั่งจะถูกพิมพ์ลงในเปลือกโต้ตอบหรือวิ่งผ่านสิ่งที่ต้องการcaller ~/.bashrcค่า${BASH_COMMAND}มีคำสั่งที่กำลังดำเนินการในปัจจุบัน


ฉันต้องการที่จะทราบว่าใน macOS เทคนิคนี้ยังupdate_terminal_cwdเข้าสู่ระบบไฟล์ประวัติซึ่งเป็นคำสั่งที่ผู้ใช้ไม่ได้ทำงาน แต่จะทำงานโดยอัตโนมัติ
Ashish Ahuja

5

บางสิ่งที่อาจเป็นที่สนใจของคุณคือวิธีค้นหาประวัติการสั่งซื้อก่อนหน้านี้ คุณสามารถย้อนกลับค้นหาประวัติของคุณในบรรทัดคำสั่งโดยกดCtrl+rแล้วพิมพ์ตัวอักษรที่คุณต้องการจับคู่ หากคุณมีคำสั่งที่ตรงกันมากกว่าหนึ่งคำให้กดCtrl+rอีกครั้ง Ctrl+gจะลาออกจากการค้นหาย้อนกลับกด

http://www.ice2o.com/bash_quick_ref.html


4

คุณสามารถย้อนกลับไปได้จนถึงขีด จำกัด ประวัติของคุณ เมื่อถึงจุดนั้นประวัติจะเริ่มถูกเขียนทับ อย่างไรก็ตามมันเป็นไปได้ที่จะมีประวัติขนาดใหญ่ขึ้นสำหรับอนาคต ใส่สิ่งนี้ใน. bashrc ของคุณและระบุค่า (ของฉันถูกตั้งไว้ที่ 1,000):

export HISTSIZE=1000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.