Existe-t-il un moyen de voir quelles commandes sont exécutées dans un autre shell, pendant leur exécution? Les deux shells sont bash, et j'ai un accès root, si cela importe. Je ne peux pas installer de logiciel supplémentaire, et je ne veux pas que l'autre shell doive faire quelque chose de spécial comme l'écran d'exécution.
Situation: je suis connecté à distance sur une machine Linux, tout comme un collègue. J'aimerais voir les commandes qu'elle exécute dans sa coquille. Je sais que je pourrais utiliser une combinaison de watch
et ps
pour voir toutes les commandes qui prennent plus d'une seconde à s'exécuter, mais je ne pense pas que cela aiderait avec des commandes très courtes.
shell
monitoring
Tom Panning
la source
la source
kill
, etcd
ne génèrent pas de sous-processus et n'apparaîtront jamais dans la sortie ps.Réponses:
Puisque vous êtes root, vous pouvez toujours
strace -f -e execve -p her_bash_pid
. Le-f
est nécessaire car son shell va lancer un nouveau processus avant leexec
, mais cela signifie également que vous verrez tout ce que les processus enfants exécutent également.la source
exec
est.Si votre collègue peut modifier certains paramètres d'historique pour leur shell bash, vous pouvez obtenir ces informations à partir de tail -f /home/user/.bash_history. Voici le paramètre dont vous aurez besoin pour que .bash_history soit écrit après chaque commande, plutôt qu'à la sortie du shell:
Je considérerais une session d'écran comme une solution "idéale".
la source
Après une recherche rapide (et quelques réflexions), je peux vous donner la liste suivante des options possibles:
conspy
.screen
. Si vous voulez simplement l'aider et ne pas l'espionner, elle pourrait vouloir exécuter sa session à l'intérieur de l'écran. Vous pouvez ensuite simplement attacher à sa session ensudo -u herUsername screen -x
cat /dev/pts/X | tee /dev/pts/X
été la première chose qui m'est venue à l'esprit. Mais après l'essai ne fonctionne pas vraiment et c'est une solution très sale. Chaque caractère n'est imprimé que sur l'un des terminaux connectés (ce qui est également la raison de l'appeltee
). En l'essayant, je pouvais espionner chaque deuxième personnage. Avec un peu d'imagination, vous pouvez deviner ce qu'elle fait ...la source
L'écran GNU est à ce jour la meilleure mention de l'OMI. Si l'écran GNU (ou tmux) n'est pas disponible, faites exécuter votre collègue
script -f
.Et puis vous pouvez regarder ce qu'elle fait en faisant
tail -fn +0 /path/to/typescript
.la source
Pour partager un terminal d'écran Unix, afin que vous puissiez voir les entrées et sorties de votre collègue en temps réel, utilisez la
screen
commande Unix .Vous tapez la commande
screen -d -m -S myscreenname
screen -x myscreenname
(Bien sûr, remplacez myscreenname par ce que vous voulez que le nom d'écran soit).
Le collègue tape la commande
screen -x myscreenname
Pour terminer avec le partage de vos terminaux Unix, chaque personne peut taper la commande
exit
La grande fonctionnalité de l'écran est que vous pouvez taper des commandes depuis votre terminal Unix et que le collègue peut voir la sortie sur son écran. C'est un excellent moyen de faire l'administration des paires et de guider les administrateurs juniors Unix.
la source
Pour compléter la réponse de @ jordanm ... si vous utilisez tous les deux le même compte utilisateur, c'est-à-dire la sortie de
est la même chose pour vous et votre collègue, alors nous pouvons nous amuser.
Nous pouvons permettre la visualisation des commandes invoquées dans un terminal pour être instantanément disponible dans un autre
Si vous invoquez
history
dans votre terminal, vous voyez vos commandes précédentes. Par défaut, bash écrit son historique à la fin de chaque session dans a~/.bash_history file
, écrasant le fichier existant avec une version mise à jour. Cela signifie que si vous êtes connecté avec plusieurs sessions bash, seule la dernière à quitter aura son historique enregistré.-------------------------------------------------- -----
Modifiez votre
~/.bashrc
et ajoutez-yoù
history -a
ajoute à~/.bash_history
déposer immédiatement au lieu de à la fin de la sessionhistory -c
efface l'historique de session en courshistory -r
lit le~/.bash_history
fichier auquel nous avons ajouté, dans notre historique de sessionRemarque: le
PROMPT_COMMAND
paramètre contient des commandes qui sont exécutées avant chaque nouvelle invite de commandes. donc command1 ne sera sauvegardé dans l'historique que lorsque command2 sera exécutéVous souhaiterez peut-être également frapper un horodatage à côté de chaque commande pour plus de commodité lors de l'affichage de l'historique. Encore une fois, modifiez votre
~/.bashrc
et ajoutezAussi un bon hack si vous aimez utiliser plusieurs terminaux et que votre historique des commandes est disponible :)
Plus d'informations
la source