Como você é root, sempre pode usar strace -f -e execve -p her_bash_pid
. O -f
é necessário porque o shell dela aplicará um novo processo antes do exec
, mas isso também significa que você verá qualquer coisa que o filho processe também.
Existe uma maneira de observar quais comandos estão sendo executados em outro shell, já que estão sendo executados? Ambas as shells são bash e eu tenho acesso root, se é que isso importa. Não consigo instalar nenhum software extra e não quero que o outro shell tenha que fazer nada de especial como executar a tela.
Situação: Estou logado remotamente em uma máquina Linux e, portanto, é um colega de trabalho. Eu gostaria de ver os comandos que ela está executando em seu shell. Eu sei que eu poderia usar uma combinação de watch
e ps
para ver quaisquer comandos que demorassem mais de um segundo para serem executados, mas não acredito que isso ajudaria com comandos muito curtos.
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 que você precisará para .bash_history ser escrito após cada comando, ao invés de na saída do shell:
export PROMPT_COMMAND="history -a"
shopt -s histappend
Eu consideraria uma sessão de tela como uma solução "ideal".
Após uma pesquisa rápida (e algumas reflexões), posso fornecer a seguinte lista de possíveis opções:
conspy
. screen
. Se você quer apenas ajudar e não espioná-la, ela pode estar disposta a executar sua sessão dentro da tela. Você pode simplesmente anexar a sua sessão por sudo -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 é o motivo para chamar tee
também). Ao experimentá-lo, eu poderia espionar cada segundo personagem. Com um pouco de imaginação você pode adivinhar o que ela está fazendo ... A tela do GNU é a melhor recomendação até o momento. Se a tela GNU (ou tmux) não estiver disponível, execute seu colega de trabalho script -f
.
E então você pode ver o que ela está fazendo fazendo tail -fn +0 /path/to/typescript
.
Para compartilhar um terminal de tela Unix, para que você possa ver as entradas e saídas de seu colega de trabalho em tempo real, use o comando Unix screen
.
Você digita o comando
screen -d -m -S myscreenname
screen -x myscreenname
(É claro que substitua myscreenname pelo que você quiser que o nome da tela seja).
O colega de trabalho digita o comando
screen -x myscreenname
Para finalizar com o compartilhamento de 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 o colega de trabalho pode ver a saída em sua tela. É uma excelente maneira de administrar pares e orientar administradores júniores do Unix.
Para concluir @ jordanm answer ... se você estiver usando a mesma conta de usuário, ou seja, a saída de
echo $HOSTNAME
echo $USER
é o mesmo para você e seu colega de trabalho, então podemos nos divertir.
Podemos permitir que a visualização de comandos invocados em um terminal fique instantaneamente disponível em outro
Se você invocar history
em seu terminal, verá seus comandos anteriores. Por padrão, o bash escreve seu histórico no final de cada sessão para um ~/.bash_history file
, sobrescrevendo o arquivo existente com uma versão atualizada. Isso significa que, se você estiver logado com várias sessões bash, apenas o último a sair terá seu histórico salvo.
-------------------------------------------- -----------
Edite seu ~/.bashrc
e adicione a ele
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
onde
history -a
é anexado ao arquivo ~/.bash_history
imediatamente, em vez de no final da sessão
history -c
limpa o histórico atual da sessão
history -r
lê o arquivo ~/.bash_history
que nós adicionamos, de volta ao nosso histórico de sessões
Observação: o parâmetro PROMPT_COMMAND
contém comandos que são executados antes de cada novo prompt de comando. então command1 só será salvo no histórico quando command2 for executado
Você também pode querer colocar um carimbo de data e hora ao lado de cada comando para facilitar a visualização do histórico. Novamente, edite seu ~/.bashrc
e anexe
export HISTTIMEFORMAT="%d/%m/%y %T "
Também é um bom hack se você gosta de usar vários terminais e gostaria de ter seu histórico de comandos disponíveis :)
Tags monitoring shell