GNU/Linux >> Linux Esercitazione >  >> Linux

Come registrare ogni comando digitato in Bash e ogni operazione su file?

Vorrei registrare ogni comando digitato in bash (da root o utente) così come ogni operazione sui file.

L'idea è che potrei scrivere strumenti in grado di interrogare questo file di registro e fornire informazioni molto utili.

Ad esempio, sarebbe fantastico elencare tutti i comandi mai digitati, uno per riga, con "- – -" per 8-24 ore di intervallo e "===es. 24 giugno 2014 ===” per>24 ore di intervallo. Se elimina anche i duplicati all'interno di una sessione “===…” ancora meglio!

Ciò significherebbe che ogni volta che eseguo un'attività come "aggiornare flask/mod_wsgi/apache a Python 3.x" viene lasciato un record, una traccia che posso raccogliere se devo fare la stessa cosa sei mesi dopo.

Allo stesso fine sarebbe molto bello vedere quali modifiche al file system si sono verificate dopo l'installazione di un particolare pacchetto. Questo mi farebbe sapere dove sono stati inseriti i file di configurazione.

PS Sono su Ubuntu 14.04

Risposta accettata:

Questo non è completo come la contabilità reale e può essere annullato facilmente da un utente, ma supponendo che non debba essere un vero sistema di contabilità e che sia BASH che rsyslog siano in uso, modifica il file BASH RC a livello di sistema :

sudo -e /etc/bash.bashrc

Aggiungi alla fine di quel file:

export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$RET_VAL]"'

Sopra, logger registra l'ora, l'utente, il comando e il valore restituito dal comando. Configura la registrazione per "local6" con un nuovo file:

sudo -e /etc/rsyslog.d/bash.conf

E i contenuti...

local6.*    /var/log/bash_commands.log

Riavvia rsyslog:

sudo service rsyslog restart

Disconnettersi. Accedi. Rotazione log:

sudo -e /etc/logrotate.d/rsyslog

C'è un elenco di file di registro da ruotare allo stesso modo...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Aggiungi il nuovo file di registro bash-commands in quell'elenco:

/var/log/bash_commands.log

Salva e riavvia/ricarica rsyslog. (La rotazione alla fine sovrascriverà i file di registro, quindi potrebbero essere necessarie più riflessioni o configurazioni.)

Per vedere tutti i file installati da un pacchetto:

dpkg-query -L [package_name]

Quindi potresti eseguire qualcosa del genere quando installi il software.

dpkg-query -L abc-package > /var/log/files_abc-package.log

Linux
  1. Importa funzioni e variabili in Bash con il comando sorgente

  2. Come modificare autorizzazioni e proprietari tramite riga di comando

  3. Come eliminare file e directory in Linux dalla riga di comando

  4. Come dividere e combinare file dalla riga di comando in Linux

  5. Come registrare ogni comando digitato?

Come usare Sudo e il file Sudoers

Come leggere un file riga per riga in Bash

Come spostare file e directory in Linux (comando mv)

Comando sorgente Bash

Comando di uscita Bash e codici di uscita

Come fare eco in un file