ฉันจะบันทึกอินพุตและเอาต์พุตทั้งหมดในเซสชันเทอร์มินัลได้อย่างไร


46

ฉันจะเก็บบันทึกการทำงานทั้งหมดที่ทำผ่านเทอร์มินัลได้อย่างไร ตัวอย่างเช่นฉันต้องการบันทึกงานทั้งหมดที่ทำบนฐานข้อมูลผ่านทางเทอร์มินัล


สิ่งนี้สร้างขึ้นใน sudo ด้วย
Wilhelm Erasmus

ฉันได้เพิ่มคำตอบของคุณคุณสามารถตรวจสอบ
Mansur Ali

คำตอบ:


66

เมื่อคุณพร้อมที่จะเริ่มบันทึกไฟล์บันทึกให้พิมพ์:

script screen.log

ตอนนี้จนกว่าคุณจะหยุดสคริปต์อินพุตและเอาต์พุตทั้งหมดในเทอร์มินัลจะถูกเก็บไว้ใน screen.log เมื่อเสร็จแล้วให้พิมพ์:

exit

ไฟล์ screen.log ของคุณจะถูกเก็บไว้ในไดเรกทอรีท้องถิ่น หากคุณต้องการที่จะเปลี่ยนเส้นทางไปใช้ชื่อพา ธ ~/screen.logสัมบูรณ์เช่น สิ่งนี้จะทำสิ่งที่คุณต้องการอย่างแน่นอน

แหล่งที่มา: คู่มือ Ubuntu - วิธีการสั่งคำสั่งเทอร์มินัล


สวัสดีขอบคุณสำหรับการตอบกลับ แต่สิ่งนี้จะทำงานได้หรือไม่หากฉันเข้าสู่ฐานข้อมูล mysql จากเชลล์โดยใช้ลำดับต่อไปนี้: - 1) สคริปต์ screen.log 2) mysql -u <user> -p <database> 3) งานบางอย่างในฐานข้อมูล 4) ทางออก; ฉันเห็นว่าไฟล์ screen.log ถูกสร้างขึ้น แต่ไม่มีบันทึกสำหรับฐานข้อมูล ฉันจะแชร์ไฟล์โดยเร็ว ขอบคุณ Ankt
Ankit

2
มันควรทำงานกับทุกสิ่งที่ทำงานในคอนโซลที่อ่านจาก "อินพุตมาตรฐาน" (โดยปกติคือแป้นพิมพ์ของคุณ) และการเขียนไปยังเอาต์พุตมาตรฐาน (โดยปกติคือหน้าต่างเทอร์มินัลของคุณ) ดังนั้นควรรวมไคลเอนต์บรรทัดคำสั่ง mysql man page ( man script) แม้จะกล่าวถึงvi(บรรณาธิการ) ...
Izzy

10

คุณอาจต้องการที่จะลองAsciinema นอกจากเพียงแค่การอัดคุณยังสามารถแชร์และฝังเครื่องเล่นในบล็อกบทความของคุณหรือในการพูดคุยการประชุม


6

ฉันมีวิธีที่ดีกว่าในการใช้ syslog สำหรับบันทึกคำสั่งเชลล์ทุกคำสั่งนี้อาจแตกต่างกันไปตามการกระจาย linux แต่วิธีการจะยังคงเหมือนเดิม

คุณต้องทำตามขั้นตอนบางอย่าง:

ขั้นตอนที่ 1 (สร้างบริการ Syslog)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

ขั้นตอนที่ 2 (เปิด bashrc และป้อนคำสั่งด้านล่าง)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ste # 3 (เริ่มบริการ Syslog ใหม่)

# /etc/init.d/rsyslog

นี่คือตัวอย่างบันทึก:

Dec 7 22:13:00 validationdb2 mahasan: root @ export [13291]: tail -f /var/log/mysql/mysql.log [0]
7 ธ.ค. 22:13:09 น. validationdb2 mahasan: root @ export [13291]: ls -lh [0]
Dec 7 22:13:27 validationdb2 mahasan: root @ export [13291]: คำสั่งสัมผัส test [0]

ชั้นเชิงทะลึ่ง !!!
Tom H

สวัสดี Mansur คุณช่วยอธิบายสิ่งที่คุณกำลังทำกับคำสั่งเหล่านั้นมันยากที่จะเข้าใจอย่างน้อยก็ให้ฉัน
Jasser

ในขั้นตอนที่ 1 ฉันตั้งชื่อบริการสำหรับการบันทึกคำสั่งที่จะใช้โดยกระบวนการส่งบันทึกไปยัง "local6" จะเป็นจุดสิ้นสุดสำหรับบริการสำหรับการบันทึกในขั้นตอนที่ 2 ฉันกำลังตั้งค่าสิ่งที่ฉันต้องการจริง ๆ "PROMPT_COMMAND = 'RETRN_VAL = $?" ส่วนนี้จะบันทึกการป้อนข้อมูลของผู้ใช้และ "logger -p local6.debug" ซึ่งจะส่งไฟล์บันทึกไปยังบริการที่บันทึกข้อมูลด้วยกระบวนการช่วยเหลือ syslog
Mansur Ali
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.