Apakah ada cara untuk menonton perintah apa yang sedang dieksekusi di shell lain, saat dieksekusi? Kedua shell adalah bash, dan saya memiliki akses root, jika itu penting. Saya tidak dapat menginstal perangkat lunak tambahan, dan saya tidak ingin shell lain harus melakukan sesuatu yang istimewa seperti menjalankan layar.
Situasi: Saya jauh login ke mesin Linux, dan begitu juga rekan kerja. Saya ingin melihat perintah yang dia jalankan di cangkangnya. Saya tahu bahwa saya bisa menggunakan beberapa kombinasi watch
dan ps
untuk melihat perintah yang membutuhkan waktu lebih dari satu detik untuk dijalankan, tetapi saya tidak percaya itu akan membantu dengan perintah yang sangat singkat.
shell
monitoring
Tom Panning
sumber
sumber
kill
, dancd
jangan menelurkan sub-proses dan tidak akan pernah muncul dalam output ps.Jawaban:
Karena Anda root, Anda selalu bisa
strace -f -e execve -p her_bash_pid
. Hal-f
ini diperlukan karena cangkangnya akan melakukan proses baru sebelum prosesexec
, tetapi ini juga berarti Anda akan melihat apa saja yang dijalankan oleh proses anak.sumber
exec
.Jika rekan kerja Anda dapat mengubah beberapa pengaturan riwayat untuk bash shell mereka, maka Anda bisa mendapatkan informasi ini dari tail -f /home/user/.bash_history. Berikut adalah pengaturan yang Anda perlukan untuk .bash_history ditulis setelah setiap perintah, bukan pada saat shell keluar:
Saya akan menganggap sesi layar sebagai solusi "ideal".
sumber
Setelah riset cepat (dan beberapa pemikiran) saya bisa memberi Anda daftar opsi yang memungkinkan:
conspy
.screen
. Jika Anda hanya ingin membantu dan tidak memata-matai dia, ia mungkin bersedia menjalankan sesi di dalam layar. Anda kemudian dapat dengan mudah melampirkan ke sesi dengansudo -u herUsername screen -x
cat /dev/pts/X | tee /dev/pts/X
adalah hal pertama yang terlintas di pikiran saya. Tetapi setelah mencoba tidak benar-benar bekerja dan merupakan solusi yang sangat kotor. Setiap karakter hanya dicetak ke salah satu terminal terlampir (yang merupakan alasan untuk memanggiltee
juga). Ketika mencobanya saya bisa memata-matai setiap karakter kedua. Dengan sedikit imajinasi Anda bisa menebak apa yang dia lakukan ...sumber
Layar GNU adalah IMO pujian terbaik sejauh ini. Jika layar GNU (atau tmux) tidak tersedia, mintalah rekan kerja Anda menjalankan
script -f
.Dan kemudian Anda bisa menyaksikan apa yang dia lakukan dengan melakukan
tail -fn +0 /path/to/typescript
.sumber
Untuk berbagi terminal layar Unix, sehingga Anda dapat melihat input dan output rekan kerja Anda secara real-time, gunakan
screen
perintah Unix .Anda mengetikkan perintah
screen -d -m -S myscreenname
screen -x myscreenname
(Tentu saja ganti myscreenname dengan apa pun yang Anda inginkan nama layar menjadi).
Rekan kerja mengetik perintah
screen -x myscreenname
Untuk menyelesaikan dengan berbagi terminal Unix Anda, orang dapat mengetikkan perintah
exit
Fitur luar biasa dari layar adalah Anda dapat mengetik perintah dari terminal Unix dan rekan kerja dapat melihat output di layarnya. Ini adalah cara terbaik untuk melakukan administrasi pasangan dan mentor admin Unix junior.
sumber
Untuk menyelesaikan jawaban @ jordanm ... jika Anda berdua menggunakan akun pengguna yang sama, yaitu keluaran dari
sama untuk Anda dan rekan kerja Anda maka kami bisa bersenang-senang.
Kami dapat memungkinkan melihat perintah yang diminta di satu terminal agar tersedia secara instan di terminal lain
Jika Anda memanggil
history
terminal Anda, Anda melihat perintah sebelumnya. Secara default, bash menulis sejarahnya di akhir setiap sesi ke a~/.bash_history file
, menimpa file yang ada dengan versi yang diperbarui. Ini berarti bahwa jika Anda login dengan beberapa sesi bash, hanya yang terakhir yang keluar akan menyimpan riwayatnya.-------------------------------------------------- -----
Edit
~/.bashrc
dan tambahkan ke dalamnyadimana
history -a
ditambahkan ke~/.bash_history
file segera bukan pada akhir sesihistory -c
membersihkan riwayat sesi saat inihistory -r
membaca~/.bash_history
file yang telah kami tambahkan, kembali ke riwayat sesi kamiCatatan: yang
PROMPT_COMMAND
parameter berisi perintah yang dieksekusi sebelum setiap perintah baru yang cepat. jadi command1 hanya akan disimpan ke histori ketika command2 dieksekusiAnda mungkin juga ingin menampar stempel waktu di sebelah setiap perintah untuk kenyamanan saat melihat riwayat. Sekali lagi, edit
~/.bashrc
dan tambahkan AndaJuga peretasan yang bagus jika Anda ingin menggunakan banyak terminal dan ingin memiliki riwayat perintah Anda tersedia :)
Info lebih lanjut
sumber