Gibt es eine Möglichkeit zu beobachten, welche Befehle in einer anderen Shell ausgeführt werden, während sie ausgeführt werden? Beide Shells sind Bash, und ich habe Root-Zugriff, wenn das wichtig ist. Ich kann keine zusätzliche Software installieren und möchte nicht, dass die andere Shell etwas Besonderes wie den Bildschirm ausführen muss.
Situation: Ich bin remote an einem Linux-Computer angemeldet, ebenso ein Mitarbeiter. Ich würde gerne die Befehle sehen, die sie in ihrer Shell ausführt. Ich weiß, dass ich eine Kombination von watch
und verwenden könnte ps
, um Befehle anzuzeigen, deren Ausführung länger als eine Sekunde dauert, aber ich glaube nicht, dass dies bei sehr kurzen Befehlen helfen würde.
shell
monitoring
Tom Panning
quelle
quelle
kill
und erzeugencd
keine Unterprozesse und würden niemals in der ps-Ausgabe erscheinen.Antworten:
Da du root bist, könntest du es immer
strace -f -e execve -p her_bash_pid
. Das-f
ist notwendig , weil ihre Schale ein neues Verfahren vor der Gabel wirdexec
, aber das bedeutet auch , dass Sie etwas sehen werden , dass die untergeordneten Prozesse als auch auszuführen.quelle
exec
.Wenn Ihr Mitarbeiter einige Verlaufseinstellungen für seine Bash-Shell ändern kann, können Sie diese Informationen unter tail -f /home/user/.bash_history abrufen. Hier ist die Einstellung, die Sie benötigen, damit .bash_history nach jedem Befehl und nicht beim Beenden der Shell geschrieben wird:
Ich würde eine Bildschirmsitzung jedoch als "ideale" Lösung betrachten.
quelle
Nach einer kurzen Recherche (und einigen Überlegungen) kann ich Ihnen die folgende Liste möglicher Optionen geben:
conspy
.screen
. Wenn Sie ihr nur helfen und sie nicht ausspionieren möchten, ist sie möglicherweise bereit, ihre Sitzung auf dem Bildschirm durchzuführen. Sie können dann einfach an ihre Sitzung von anhängensudo -u herUsername screen -x
cat /dev/pts/X | tee /dev/pts/X
war das erste, was mir in den Sinn kam. Aber nach dem Versuch funktioniert es nicht wirklich und ist eine sehr schmutzige Lösung. Jedes Zeichen wird nur auf einem der angeschlossenen Terminals gedruckt (was auch der Grund für den Anruf isttee
). Beim Ausprobieren konnte ich jeden zweiten Charakter ausspionieren. Mit ein wenig Fantasie könnte man erraten, was sie vorhat ...quelle
Der GNU-Bildschirm ist IMO die bisher beste Auszeichnung. Wenn der GNU-Bildschirm (oder tmux) nicht verfügbar ist, lassen Sie Ihren Kollegen ausführen
script -f
.Und dann können Sie sehen, was sie tut, indem Sie es tun
tail -fn +0 /path/to/typescript
.quelle
Verwenden Sie den Unix-
screen
Befehl , um ein Unix-Bildschirmterminal freizugeben, damit Sie die Ein- und Ausgaben Ihres Kollegen in Echtzeit sehen können .Sie geben den Befehl ein
screen -d -m -S myscreenname
screen -x myscreenname
(Ersetzen Sie natürlich myscreenname durch den gewünschten Bildschirmnamen).
Der Mitarbeiter gibt den Befehl ein
screen -x myscreenname
Zum Abschluss der Freigabe Ihrer Unix-Terminals kann jede Person den Befehl eingeben
exit
Die großartige Funktion des Bildschirms besteht darin, dass Sie Befehle von Ihrem Unix-Terminal aus eingeben können und die Mitarbeiter die Ausgabe auf ihrem Bildschirm sehen können. Dies ist eine hervorragende Möglichkeit, um Junior-Unix-Administratoren zu verwalten und zu betreuen.
quelle
Um die Antwort von @ jordanm zu vervollständigen ... wenn Sie beide dasselbe Benutzerkonto verwenden, dh die Ausgabe von
Ist das gleiche für Sie und Ihren Kollegen, dann können wir etwas Spaß haben.
Wir können die Anzeige für aufgerufene Befehle in einem Terminal aktivieren, damit sie sofort in einem anderen Terminal verfügbar sind
Wenn Sie
history
in Ihrem Terminal aufrufen , sehen Sie Ihre vorherigen Befehle. Standardmäßig schreibt bash seinen Verlauf am Ende jeder Sitzung in a~/.bash_history file
und überschreibt die vorhandene Datei mit einer aktualisierten Version. Dies bedeutet, dass, wenn Sie mit mehreren Bash-Sitzungen angemeldet sind, nur der letzte, der beendet wird, dessen Verlauf gespeichert wird.-------------------------------------------------- -----
Bearbeiten Sie Ihre
~/.bashrc
und fügen Sie sie hinzuwo
history -a
wird an die~/.bash_history
Datei angehängt und nicht am Ende der Sitzunghistory -c
Löscht den aktuellen Sitzungsverlaufhistory -r
Liest die~/.bash_history
angehängte Datei zurück in unseren SitzungsverlaufHinweis: Der
PROMPT_COMMAND
Parameter enthält Befehle, die vor jeder neuen Eingabeaufforderung ausgeführt werden. so command1 wird nur Geschichte gespeichert werden , wenn command2 ausgeführtMöglicherweise möchten Sie auch einen Zeitstempel neben jeden Befehl setzen, um das Anzeigen des Verlaufs zu vereinfachen. Bearbeiten Sie erneut Ihre
~/.bashrc
und fügen Sie sie hinzuAuch ein netter Hack, wenn Sie mehrere Terminals verwenden möchten und Ihre Befehlshistorie verfügbar haben möchten :)
Mehr Info
quelle