Existe uma maneira de observar quais comandos estão sendo executados em outro shell, enquanto estão sendo executados? Ambas as conchas são bash, e eu tenho acesso root, se isso importa. Não consigo instalar nenhum software extra e não quero que o outro shell precise fazer algo especial, como executar a tela.
Situação: estou conectado remotamente a uma máquina Linux, e também um colega de trabalho. Eu gostaria de ver os comandos que ela está executando em seu shell. Eu sei que eu poderia usar alguma combinação de watch
e ps
ver quaisquer comandos que demoram mais de um segundo para serem executados, mas não acredito que ajudaria com comandos muito curtos.
shell
monitoring
Tom Panning
fonte
fonte
kill
, ecd
não geram subprocessos e nunca apareceriam na saída ps.Respostas:
Desde que você é root, você poderia sempre
strace -f -e execve -p her_bash_pid
. O-f
é necessário porque sua concha vai desembolsar um novo processo antes doexec
, mas isso também significa que você vai ver qualquer coisa que os processos filhos executar bem.fonte
exec
é.Se o seu colega de trabalho puder modificar algumas configurações de histórico para o shell bash, você poderá obter essas informações em tail -f /home/user/.bash_history. Aqui está a configuração necessária para que o .bash_history seja gravado após cada comando, em vez da saída do shell:
Eu consideraria uma sessão de tela uma solução "ideal".
fonte
Após uma rápida pesquisa (e algumas reflexões), posso fornecer a seguinte lista de opções possíveis:
conspy
.screen
. Se você quiser apenas ajudá-lo e não espioná-la, ela poderá executar sua sessão na tela. Você pode simplesmente anexar à sua sessãosudo -u herUsername screen -x
cat /dev/pts/X | tee /dev/pts/X
foi a primeira coisa que me veio à mente. Mas depois de tentar realmente não funciona e é uma solução muito suja. Cada caractere é impresso apenas em um dos terminais conectados (que também é o motivo da chamadatee
). Ao experimentar, eu podia espionar cada segundo personagem. Com um pouco de imaginação, você poderia adivinhar o que ela está fazendo ...fonte
A tela GNU é o melhor elogio da IMO até agora. Se a tela GNU (ou tmux) não estiver disponível, faça com que seu colega de trabalho execute
script -f
.E então você pode ver o que ela está fazendo
tail -fn +0 /path/to/typescript
.fonte
Para compartilhar um terminal de tela Unix, para que você possa ver as entradas e saídas do seu colega de trabalho em tempo real, use o
screen
comando Unix .Você digita o comando
screen -d -m -S myscreenname
screen -x myscreenname
(É claro que substitua myscreenname pelo que você deseja que seja o nome da tela).
O colega de trabalho digita o comando
screen -x myscreenname
Para terminar de compartilhar seus terminais Unix, qualquer pessoa pode digitar o comando
exit
A grande característica da tela é que você pode digitar comandos do seu terminal Unix e a colega de trabalho pode ver a saída na tela dela. É uma excelente maneira de administrar pares e orientar administradores juniores do Unix.
fonte
Para completar a resposta do @ jordanm ... se você estiver usando a mesma conta de usuário, ou seja, a saída de
é o mesmo para você e seu colega de trabalho, então podemos nos divertir.
Podemos permitir que a visualização de comandos chamados em um terminal esteja instantaneamente disponível em outro
Se você invocar
history
no seu terminal, verá os comandos anteriores. Por padrão, o bash grava seu histórico no final de cada sessão em um~/.bash_history file
, substituindo o arquivo existente por uma versão atualizada. Isso significa que, se você estiver conectado com várias sessões do bash, apenas a última a sair terá seu histórico salvo.-------------------------------------------------- -----
Edite seu
~/.bashrc
e adicione a eleOnde
history -a
anexa ao~/.bash_history
arquivo imediatamente em vez de no final da sessãohistory -c
limpa o histórico atual da sessãohistory -r
lê o~/.bash_history
arquivo ao qual anexamos, de volta ao nosso histórico de sessõesNota: o
PROMPT_COMMAND
parâmetro contém comandos que são executados antes de cada novo prompt de comando. então command1 será salvo no histórico somente quando command2 for executadoVocê também pode adicionar um carimbo de data / hora ao lado de cada comando por conveniência ao visualizar o histórico. Novamente, edite seu
~/.bashrc
e adicioneTambém é um bom truque, se você gosta de usar vários terminais e gosta de ter seu histórico de comandos disponíveis :)
Mais informações
fonte