Último comando emitido em uma caixa GNU / Linux

2

Alguém perguntou na lista de discussão do meu LUG local se há alguma maneira de aprender o último comando emitido em um sistema GNU / Linux.

Estamos falando do último comando em toda a moda do sistema, eu acho. Depois de raciocinar por algum tempo, se você limitar o conjunto de comandos àqueles emitidos por usuários reais usando um console interativo, o último deve ter sido registrado no histórico de comandos.

Outra maneira de pensar sobre esta questão seria perguntar como saber qual foi o último processado que foi criado em uma caixa GNU / Linux sobre se ainda está em execução ou já terminou a execução, quais foram os processos pai e outras informações relevantes .

    
por gnrfan 21.01.2010 / 20:07

6 respostas

3

Eu criei um pacote para Linux que ajuda na contabilidade de processos.

No meu sistema Ubuntu 9.10 eu fiz isso para instalar o programa "acct":

sudo apt-get install acct

Em seguida, é necessário criar um arquivo de log em branco, que você pode fazer assim:

sudo touch /var/log/pacct

Depois disso, a contabilidade do processo precisa ser ativada:

sudo /usr/sbin/accton /var/log/pacct

A partir desse ponto, os processos são registrados juntos com o usuário que os executou e o terminal associado.

O arquivo de log pode ser visto com este comando:

lastcomm -f /var/log/pacct

Eu ainda estou olhando para este programa ... mas parece que isso ajuda.

    
por 23.01.2010 / 01:08
1

Para um usuário específico (e shell): histórico

Para um processo atual: ps

    
por 21.01.2010 / 20:27
0

Bem, um todo o sistema parece bastante complicado. Tal sistema implica que deve haver algum processo que monitore todos os usuários .bash_history. Então, quando isso for atualizado, um banco de dados central será atualizado. Uma vez feito isso, podemos estar certos como uma extensão do comando "history", que é selecionado pelo banco de dados central. Não é uma má ideia embora.

    
por 21.01.2010 / 23:37
0

SE você adicionar o seguinte ao seu arquivo / etc / sudoers:

Defaults logfile=/var/log/sudolog

Todos os comandos do sudo serão registrados. Isso pode não ser todos os comandos do usuário, mas isso deve listar os mais importantes que podem modificar o sistema, o que eu arriscaria a adivinhar para dizer que é isso que você quer.

Você não pode simplesmente monitorar .bash_history, já que outros usuários podem não estar usando o histórico, ou podem não estar usando o bash para começar.

    
por 21.01.2010 / 23:46
0

Você pode usar snoopy para monitorar todos os comandos que são executados.

    
por 23.01.2010 / 01:16
0

Se você quer o mais recente programa em execução , então use as informações em / proc, algo assim ...

for i in $(ls -t /proc/* | egrep "[0-9]+"); do test -f $i/cmdline && cat $i/cmdline && break; done

Ele procurará os diretórios baseados em números (o pid) em / proc, então verifique se o arquivo cmdline existe e imprima-o (aparentemente os comandos no pipe desaparecem assim que você entra no loop, então o arquivo cmdline termina existir)

    
por 26.01.2010 / 02:05