Làm thế nào để xem các lệnh được thực thi trong shell khác?


9

Có cách nào để xem những lệnh nào đang được thực thi trong shell khác, khi chúng được thực thi không? Cả hai shell đều bash, và tôi có quyền truy cập root, nếu điều đó quan trọng. Tôi không thể cài đặt bất kỳ phần mềm bổ sung nào và tôi không muốn lớp vỏ kia phải làm bất cứ điều gì đặc biệt như màn hình chạy.

Tình huống: Tôi đã đăng nhập từ xa vào máy Linux và đồng nghiệp cũng vậy. Tôi muốn xem các lệnh cô ấy đang chạy trong vỏ của mình. Tôi biết rằng tôi có thể sử dụng một số kết hợp watchpsđể xem bất kỳ lệnh nào mất nhiều thời gian hơn một giây để chạy, nhưng tôi không tin rằng điều đó sẽ giúp với các lệnh rất ngắn.


5
các lệnh dựng sẵn như kill, và cdkhông sinh ra các quy trình con và sẽ không bao giờ xuất hiện trong đầu ra ps.
jordanm

@jordanm Cảm ơn, đó là một điểm tốt. Ngay cả với chỉ các lệnh gây ra một fork / exec, điều đó có thể là đủ tốt.
Tom Panning

Câu trả lời:


7

Vì bạn đã root, bạn luôn có thể strace -f -e execve -p her_bash_pid. Điều -fnày là cần thiết bởi vì lớp vỏ của cô ấy sẽ rẽ nhánh một quy trình mới trước đó exec, nhưng điều này cũng có nghĩa là bạn sẽ thấy bất cứ điều gì mà quá trình con thực hiện là tốt.


Cảm ơn, grepping đầu ra của strace cho exec làm cho nó khá dễ đọc. Tôi chắc chắn rằng việc nó cứ theo dõi trẻ em sẽ khiến tôi bối rối vào một ngày nào đó, nhưng bây giờ tôi nghĩ tôi sẽ an toàn. Thật xấu hổ khi không có cách nào để tự động tách ra khỏi một quy trình sau khi nó gọi exec.
Tom Panning

Đó là nguồn mở; bạn luôn có thể thêm tính năng đó nếu bạn thực sự cần nó. :) Hoặc thêm một tập lệnh thông minh hơn một chút để phân tích cú pháp đầu ra strace mà bỏ qua một lần PID exec.
Jim Paris

5

Nếu đồng nghiệp của bạn có thể sửa đổi một số cài đặt lịch sử cho vỏ bash của họ, thì bạn có thể lấy thông tin này từ đuôi -f /home/user/.bash_history. Dưới đây là cài đặt bạn sẽ cần cho .bash_history được viết sau mỗi lệnh, thay vì trên shell exit:

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

Tôi sẽ coi một phiên màn hình là một giải pháp "lý tưởng".


5

Sau khi nghiên cứu nhanh (và suy nghĩ một chút) tôi có thể cung cấp cho bạn danh sách các tùy chọn có thể sau:

  • đọc bash_history của cô. Nhưng nó thường chỉ được viết khi đăng xuất. Askubfox.com có một bài viết về việc thay đổi hành vi đó ( chỉnh sửa : @jordanm rõ ràng có cùng ý tưởng và nhanh hơn để đăng ...).
  • Nếu cô ấy ở trên một thiết bị đầu cuối vật lý (/ dev / ttyX), bạn có thể sử dụng chương trình conspy.
  • Làm cho cô ấy sử dụng screen. Nếu bạn chỉ muốn hỗ trợ và không theo dõi cô ấy, cô ấy có thể sẵn sàng chạy phiên của mình trong màn hình. Sau đó, bạn có thể chỉ cần đính kèm vào phiên của cô ấy bằng cáchsudo -u herUsername screen -x
  • Bạn có thể viết một tập lệnh trình bao bọc ghi nhật ký các lệnh vào một tệp dữ liệu bạn chọn. Bạn sẽ phải đặt shell của cô ấy theo kịch bản đó (Đây chỉ là một ý tưởng, nó có thể hoặc không thể hoạt động).
  • Sử dụng cat /dev/pts/X | tee /dev/pts/Xlà điều đầu tiên tôi nghĩ đến. Nhưng sau khi thử không thực sự hiệu quả và là một giải pháp rất bẩn. Mỗi ký tự chỉ được in đến một trong các thiết bị đầu cuối đính kèm (đó là lý do để gọi teelà tốt). Khi dùng thử tôi có thể theo dõi từng nhân vật thứ hai. Với một chút tưởng tượng, bạn có thể đoán được cô ấy định làm gì ...

sai: conspy không hoạt động với ttys
Zibri

3

Màn hình GNU là IMO khen thưởng tốt nhất cho đến nay. Nếu màn hình GNU (hoặc tmux) không khả dụng, hãy để đồng nghiệp của bạn chạy script -f.

Và sau đó bạn có thể xem những gì cô ấy đang làm bằng cách làm tail -fn +0 /path/to/typescript.


0

Để chia sẻ thiết bị đầu cuối màn hình Unix, để bạn có thể thấy đầu vào và đầu ra của đồng nghiệp trong thời gian thực, hãy sử dụng screenlệnh Unix .

  1. Bạn và đồng nghiệp đăng nhập với cùng một người dùng Unix trong ssh
  2. Bạn gõ lệnh

    screen -d -m -S myscreenname

    screen -x myscreenname

    (Tất nhiên thay thế myscreenname bằng bất cứ thứ gì bạn muốn tên màn hình).

  3. Đồng nghiệp gõ lệnh

    screen -x myscreenname

  4. Để kết thúc với việc chia sẻ các thiết bị đầu cuối Unix của bạn, một trong hai người có thể nhập lệnh

    exit

Tính năng tuyệt vời của màn hình là bạn có thể nhập các lệnh từ thiết bị đầu cuối Unix của mình và đồng nghiệp có thể thấy đầu ra trên màn hình của cô ấy. Đó là một cách tuyệt vời để làm quản trị viên cặp và quản trị viên cơ sở Unix.


0

Để hoàn thành câu trả lời của @ jordanm ... nếu cả hai bạn đang sử dụng cùng một tài khoản người dùng, tức là đầu ra từ

echo $HOSTNAME
echo $USER 

là giống nhau cho bạn và đồng nghiệp của bạn sau đó chúng tôi có thể có một số niềm vui.

Chúng tôi có thể cho phép xem các lệnh được gọi trong một thiết bị đầu cuối sẽ có sẵn ngay lập tức trong một thiết bị khác

Nếu bạn gọi historytrong terminal, bạn sẽ thấy các lệnh trước đó. Theo mặc định, bash ghi lịch sử của nó vào cuối mỗi phiên vào một ~/.bash_history file, ghi đè lên tệp hiện có bằng một phiên bản cập nhật. Điều này có nghĩa là nếu bạn đã đăng nhập bằng nhiều phiên bash, chỉ có phiên cuối cùng để thoát sẽ lưu lịch sử của nó.

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

Chỉnh sửa của bạn ~/.bashrcvà thêm vào nó

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

Ở đâu

history -abổ sung để ~/.bash_historynộp ngay lập tức thay vì vào cuối phiên

history -c xóa lịch sử phiên hiện tại

history -rđọc ~/.bash_historytệp mà chúng tôi đã thêm vào, quay lại lịch sử phiên của chúng tôi

Lưu ý: các PROMPT_COMMANDtham số chứa các lệnh được thực thi trước mỗi lệnh mới nhắc. vì vậy lệnh1 sẽ chỉ được lưu vào lịch sử khi lệnh2 được thực thi

Bạn cũng có thể muốn đặt dấu thời gian bên cạnh mỗi lệnh để thuận tiện khi xem lịch sử. Một lần nữa, chỉnh sửa ~/.bashrcvà nối của bạn

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

Đây cũng là một bản hack hay nếu bạn muốn sử dụng nhiều thiết bị đầu cuối và muốn có lịch sử các lệnh của mình :)

Thêm thông tin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.