Come vedere i comandi eseguiti in un'altra shell?


9

C'è un modo per vedere quali comandi vengono eseguiti in un'altra shell, mentre vengono eseguiti? Entrambe le shell sono bash e ho accesso root, se questo è importante. Non riesco a installare alcun software aggiuntivo e non voglio che l'altra shell debba fare qualcosa di speciale come la schermata di esecuzione.

Situazione: ho effettuato l'accesso remoto a una macchina Linux, così come un collega. Mi piacerebbe vedere i comandi che sta eseguendo nella sua shell. So che potrei usare una combinazione di watche psvedere qualsiasi comando che impiega più di un secondo per essere eseguito, ma non credo che sarebbe di aiuto con comandi molto brevi.


5
comandi integrati come kill, e cdnon generano sottoprocessi e non apparirebbero mai nell'output ps.
Giordania,

@jordanm Grazie, è un buon punto. Anche con solo i comandi che causano un fork / exec, probabilmente sarebbe abbastanza buono.
Tom Panning,

Risposte:


7

Dato che sei root, puoi sempre strace -f -e execve -p her_bash_pid. Il -fè necessario perché la sua shell fork di un nuovo processo davanti alla exec, ma questo significa anche che vedrete tutto ciò che i processi figli eseguono pure.


Grazie, l'output di strace grepping per exec lo rende abbastanza leggibile. Sono sicuro che il fatto che continui a seguire figli di bambini mi confonderà un giorno, ma per ora penso che sarò al sicuro. È un peccato che non ci sia modo di staccarsi automaticamente da un processo dopo aver chiamato exec.
Tom Panning,

È open source; puoi sempre aggiungere quella funzione se ne hai davvero bisogno. :) Oppure aggiungi uno script leggermente più intelligente analizzando l'output di strace che ignora un PID una volta che lo execè.
Jim Paris,

5

Se il tuo collega può modificare alcune impostazioni della cronologia per la sua shell bash, puoi ottenere queste informazioni da tail -f /home/user/.bash_history. Ecco le impostazioni necessarie per scrivere .bash_history dopo ogni comando, anziché all'uscita della shell:

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

Considererei una sessione su schermo una soluzione "ideale".


5

Dopo una rapida ricerca (e qualche riflessione) posso darti il ​​seguente elenco di possibili opzioni:

  • leggi la sua storia di bash. Ma di solito è scritto solo al logout. askubuntu.com ha un post sul cambiamento di quel comportamento ( modifica : @jordanm apparentemente aveva la stessa idea ed era più veloce nel pubblicare ...).
  • Se fosse su un terminale fisico (/ dev / ttyX), potresti usare il programma conspy.
  • Falla usare screen. Se vuoi solo aiutarla e non spiarla, potrebbe essere disposta a eseguire la sua sessione all'interno dello schermo. Quindi puoi semplicemente collegarti alla sua sessione disudo -u herUsername screen -x
  • È possibile scrivere uno script wrapper shell che registra i comandi in un file di registro di propria scelta. Dovresti impostare la sua shell su quello script (questa è solo un'idea, potrebbe o potrebbe non funzionare).
  • L'utilizzo è cat /dev/pts/X | tee /dev/pts/Xstata la prima cosa che mi è venuta in mente. Ma dopo il tentativo non funziona davvero ed è una soluzione molto sporca. Ogni personaggio è stampato solo su uno dei terminali collegati (che è anche il motivo della chiamata tee). Quando lo provavo, potevo spiare ogni secondo personaggio. Con un po 'di immaginazione potresti indovinare cosa sta facendo ...

sbagliato: conspy non funziona con ttys
Zibri

3

Lo schermo GNU è l'IMO il miglior encomio finora. Se lo schermo GNU (o tmux) non è disponibile, fai funzionare il tuo collega script -f.

E poi puoi vedere cosa sta facendo facendo tail -fn +0 /path/to/typescript.


0

Per condividere un terminale schermo Unix, in modo da poter vedere gli input e l'output del tuo collega in tempo reale, usa il screencomando Unix .

  1. Tu e il collega accedete come lo stesso utente Unix in ssh
  2. Si digita il comando

    screen -d -m -S myscreenname

    screen -x myscreenname

    (Ovviamente sostituisci myscreenname con qualunque cosa tu voglia che sia il nome dello schermo).

  3. Il collega digita il comando

    screen -x myscreenname

  4. Per finire con la condivisione dei terminali Unix, entrambe le persone possono digitare il comando

    exit

La grande caratteristica dello schermo è che puoi digitare i comandi dal tuo terminale Unix e il collega può vedere l'output sul suo schermo. È un modo eccellente per amministrare la coppia e fare da mentore agli amministratori Unix junior.


0

Per completare la risposta di @ jordanm ... se entrambi state utilizzando lo stesso account utente, ovvero l'output di

echo $HOSTNAME
echo $USER 

è lo stesso per te e il tuo collega, quindi possiamo divertirci un po '.

Possiamo abilitare la visualizzazione dei comandi invocati in un terminale per essere immediatamente disponibili in un altro

Se invochi historynel tuo terminale vedi i tuoi comandi precedenti. Per impostazione predefinita, bash scrive la sua cronologia alla fine di ogni sessione in un ~/.bash_history file, sovrascrivendo il file esistente con una versione aggiornata. Ciò significa che se si è effettuato l'accesso con più sessioni bash, solo l'ultima a uscire avrà la cronologia salvata.

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

Modifica il tuo ~/.bashrce aggiungilo ad esso

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

dove

history -aaggiunge il ~/.bash_historyfile immediatamente anziché alla fine della sessione

history -c cancella la cronologia della sessione corrente

history -rlegge il ~/.bash_historyfile a cui abbiamo aggiunto, di nuovo nella cronologia delle sessioni

Nota: il PROMPT_COMMANDparametro contiene comandi eseguiti prima di ogni nuovo prompt dei comandi. così command1 verrà salvato nella cronologia solo quando command2 viene eseguito

Potresti anche voler dare uno schiaffo a un timestamp accanto a ciascun comando per comodità quando visualizzi la cronologia. Ancora una volta, modifica il tuo ~/.bashrce aggiungi

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

Anche un bel trucco se ti piace usare più terminali e ti piace avere la tua cronologia dei comandi disponibile :)

Ulteriori informazioni

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.