วิธีดูคำสั่งที่ดำเนินการในเชลล์อื่น?


9

มีวิธีดูว่าคำสั่งใดที่ถูกดำเนินการในเชลล์อื่นในขณะที่พวกเขากำลังดำเนินการ? เปลือกทั้งสองเป็นทุบตีและฉันมีสิทธิ์เข้าถึงรูทหากเรื่องนั้นสำคัญ ฉันไม่สามารถติดตั้งซอฟต์แวร์พิเศษใด ๆ ได้และฉันไม่ต้องการให้เชลล์ตัวอื่นต้องทำอะไรเป็นพิเศษเช่นหน้าจอทำงาน

สถานการณ์: ฉันลงชื่อเข้าใช้เครื่อง Linux จากระยะไกลและเป็นผู้ร่วมงานด้วย ฉันต้องการดูคำสั่งที่เธอใช้ในเชลล์ของเธอ ฉันรู้ว่าฉันสามารถใช้การรวมกันของwatchและpsเพื่อดูคำสั่งใด ๆ ที่ใช้เวลานานกว่าหนึ่งวินาทีในการทำงาน แต่ฉันไม่เชื่อว่าจะช่วยให้มีคำสั่งสั้น ๆ


5
คำสั่ง builtin เช่นkillและcdไม่วางไข่กระบวนการย่อยและจะไม่ปรากฏในเอาต์พุตของ ps
จอร์แดน

@ จอร์แดนขอบคุณที่เป็นจุดที่ดี ถึงแม้จะมีเพียงคำสั่งที่ทำให้เกิดการแยก / exec ซึ่งอาจจะดีพอ
Tom Panning

คำตอบ:


7

strace -f -e execve -p her_bash_pidเนื่องจากคุณรากคุณสามารถเสมอ -fเป็นสิ่งจำเป็นเพราะเปลือกของเธอจะแยกกระบวนการใหม่ก่อนexecแต่นี้ยังหมายความว่าคุณจะเห็นอะไรที่กระบวนการที่เด็กดำเนินการเช่นกัน


ขอบคุณ grepping strace ของเอาต์พุตสำหรับ exec ทำให้อ่านได้ค่อนข้างดี ฉันแน่ใจว่าความจริงที่ว่าการติดตามลูก ๆ ของเด็ก ๆ จะทำให้ฉันสับสนในบางวัน แต่สำหรับตอนนี้ฉันคิดว่าฉันจะปลอดภัย เป็นเรื่องน่าละอายที่ไม่มีทางแยกออกจากกระบวนการโดยอัตโนมัติหลังจากที่เรียกใช้ exec
Tom Panning

มันเป็นโอเพนซอร์ส คุณสามารถเพิ่มฟีเจอร์นั้นได้ตลอดเวลาถ้าคุณต้องการมันจริงๆ :) หรือเพิ่มสคริปต์ที่ชาญฉลาดยิ่งขึ้นเล็กน้อยในการแยกวิเคราะห์เอาต์พุตของ strace ที่จะละเว้น PID เมื่อมันexecเป็น
จิมปารีส

5

หากเพื่อนร่วมงานของคุณสามารถแก้ไขการตั้งค่าประวัติบางอย่างสำหรับ bash shell ได้คุณสามารถรับข้อมูลนี้ได้จาก tail -f /home/user/.bash_history นี่คือการตั้งค่าที่คุณจะต้องใช้สำหรับ. bash_history ที่จะเขียนหลังจากแต่ละคำสั่งแทนที่จะใช้กับ shell exit:

export PROMPT_COMMAND="history -a"
shopt -s histappend

ฉันจะพิจารณาเซสชั่นหน้าจอว่าเป็นทางออกที่ "เหมาะ"


5

หลังจากการวิจัยอย่างรวดเร็ว (และการคิดบางอย่าง) ฉันสามารถให้รายการตัวเลือกที่เป็นไปได้ต่อไปนี้แก่คุณ:

  • อ่าน bash_history ของเธอ แต่โดยปกติจะเขียนเมื่อออกจากระบบเท่านั้น askubuntu.comมีโพสต์เกี่ยวกับการเปลี่ยนพฤติกรรมนั้น ( แก้ไข : @jordanmเห็นได้ชัดว่ามีความคิดเดียวกันและเร็วกว่าการโพสต์ ... )
  • ถ้าเธออยู่บนขั้วทางกายภาพ (/ dev / ttyX), conspyคุณสามารถใช้โปรแกรม
  • screenทำให้เธอใช้ หากคุณต้องการความช่วยเหลือและไม่สอดแนมเธอเธออาจเต็มใจที่จะเปิดใช้งานเซสชันของเธอภายในหน้าจอ จากนั้นคุณสามารถแนบไปกับเซสชันของเธอโดยsudo -u herUsername screen -x
  • คุณสามารถเขียนสคริปต์ shell wrapper ที่บันทึกคำสั่งลงใน logfile ที่คุณเลือก คุณต้องตั้งค่าเชลล์ของเธอเป็นสคริปต์นั้น (นี่เป็นเพียงความคิดมันอาจจะใช้งานได้หรือไม่ก็ได้)
  • การใช้cat /dev/pts/X | tee /dev/pts/Xเป็นสิ่งแรกที่อยู่ในใจของฉัน แต่หลังจากลองไม่ได้ผลจริงๆและเป็นวิธีที่สกปรกมาก อักขระทุกตัวจะถูกพิมพ์ไปยังเทอร์มินัลที่เชื่อมต่อเท่านั้น (ซึ่งเป็นเหตุผลสำหรับการโทรteeด้วย) เมื่อลองใช้มันฉันสามารถสอดแนมตัวละครทุกวินาที ด้วยจินตนาการเล็กน้อยคุณสามารถเดาได้ว่าเธอทำอะไรอยู่ ...

ผิด: conspy ใช้งานไม่ได้กับ ttys
Zibri

3

หน้าจอ GNU คือ IMO สิ่งที่น่ายกย่องที่สุด ถ้าหน้าจอ GNU (หรือ tmux) script -fไม่สามารถใช้ได้มีเพื่อนร่วมงานของคุณทำงานได้

tail -fn +0 /path/to/typescriptและจากนั้นคุณสามารถดูสิ่งที่เธอทำโดยการทำ


0

ในการแชร์เทอร์มินัลหน้าจอ Unix เพื่อให้คุณสามารถเห็นอินพุตและเอาต์พุตของเพื่อนร่วมงานแบบเรียลไทม์ให้ใช้screenคำสั่งUnix

  1. คุณและผู้ร่วมงานล็อกอินเป็นผู้ใช้ Unix คนเดียวกันใน ssh
  2. คุณพิมพ์คำสั่ง

    screen -d -m -S myscreenname

    screen -x myscreenname

    (แน่นอนแทนที่ชื่อ myscreen ด้วยสิ่งที่คุณต้องการให้ชื่อหน้าจอเป็น)

  3. ผู้ร่วมงานพิมพ์คำสั่ง

    screen -x myscreenname

  4. ในการเสร็จสิ้นการแชร์เทอร์มินัล Unix ของคุณบุคคลใดบุคคลหนึ่งสามารถพิมพ์คำสั่งได้

    exit

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


0

หากต้องการคำตอบของ @jordanmให้สมบูรณ์... หากคุณทั้งคู่ใช้บัญชีผู้ใช้เดียวกันนั่นคือเอาท์พุทจาก

echo $HOSTNAME
echo $USER 

เหมือนกันสำหรับคุณและเพื่อนร่วมงานของคุณจากนั้นเราก็สามารถมีความสนุกสนาน

เราสามารถเปิดใช้งานการดูคำสั่งที่เรียกใช้ในเทอร์มินัลหนึ่งเพื่อให้สามารถใช้ได้ในอีกเทอร์มินัล

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

-------------------------------------------------- -----

แก้ไขของคุณ~/.bashrcและเพิ่มเข้าไป

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

ที่ไหน

history -aต่อท้าย~/.bash_historyไฟล์ทันทีแทนที่จะสิ้นสุดเซสชัน

history -c ล้างประวัติเซสชันปัจจุบัน

history -rอ่าน~/.bash_historyไฟล์ที่เราผนวกเข้ามาแล้วกลับเข้าสู่ประวัติเซสชันของเรา

หมายเหตุ:พารามิเตอร์มีคำสั่งว่าจะดำเนินการก่อนที่แต่ละรับคำสั่งใหม่ ดังนั้นcommand1จะถูกบันทึกไว้ในประวัติเมื่อcommand2ถูกดำเนินการเท่านั้นPROMPT_COMMAND

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

export HISTTIMEFORMAT="%d/%m/%y %T "

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

ข้อมูลเพิ่มเติม

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