Como posso verificar o histórico de comandos do usuário no Unix?

13

Eu sei que o comando 'history' me fornece uma lista dos comandos que eu digitei no terminal Unix.

Como vejo o histórico de comandos de todos os usuários atualmente conectados ao sistema?

Gaff
fonte
Não relacionado à programação. Eu sugiro que você pergunte no superuser.com .
Não existe uma ferramenta padrão para obter as informações, então eu acho que está relacionado à programação (pelo menos no sentido de 'script').
IanH

Respostas:

11

Você obtém uma lista dos usuários atualmente conectados /var/run/utmp(consulte man 5 utmp). O histórico é armazenado em ~ / .history ou para o usuário bash em ~ / .bash_history. Outros shells podem usar outros arquivos de histórico, portanto, não é tão fácil obter realmente todas as informações.

Além disso, se um usuário estiver conectado várias vezes, o arquivo .bash_history nem sempre é confiável.

Para ler o utmparquivo, existe um "frontend" chamado who, para que você também possa escrever um shell-script para iterar sobre os usuários atualmente conectados.

IanH
fonte
2
O histórico atual é mantido na memória. O arquivo de histórico mostra apenas o que foi escrito usando history -aou semelhante ou quando um usuário sai do shell.
Pausado até novo aviso.
2
Observe que os nomes de arquivo fornecidos nesta resposta são apenas os padrões. Cada usuário poderia ter definido sua própria localização (consulte a resposta de Joy). Se um usuário estiver usando shells diferentes, é possível que eles possam armazenar seus históricos em locais diferentes e não padrão (por exemplo, ~ / mybashhist, ~ / histories / ksh ou algo assim). Além disso, esteja ciente de que inspecionar dados do usuário como esse pode ter implicações legais.
DevSolar
3
echo $HISTFILE

Então veja esse arquivo.

Alegria
fonte
1
Isso funciona apenas se você tiver fornecido anteriormente o ambiente desse usuário (como ele pode ter definido HISTFILEpara outra coisa).
DevSolar