GNU/Linux >> Znalost Linux >  >> Linux

Jak přihlásit každý příkaz zadaný do Bash a každou operaci se souborem?

Chtěl bych zaznamenat každý příkaz zadaný do bash (buď rootem nebo uživatelem), stejně jako každou operaci se souborem.

Myšlenka je taková, že bych mohl napsat nástroje, které by mohly tento soubor protokolu zkoumat a poskytovat velmi užitečné informace.

Například by bylo skvělé vypsat všechny příkazy, které kdy byly napsány, jeden na řádek, s „- – -“ pro 8-24h časovou mezeru a „===např. 24. června 2014 ===” pro>24h mezeru. Pokud by to také odstranilo duplikáty v rámci relace „===…“, ještě lépe!

To by znamenalo, že kdykoli splním nějaký úkol, jako je „upgrade flask/mod_wsgi/apache na Python 3.x“, zanechám záznam, stopu, kterou mohu zachytit, pokud budu muset o šest měsíců později udělat totéž.

Za stejným účelem by bylo velmi hezké vidět, jaké změny souborového systému nastaly po instalaci konkrétního balíčku. To by mi dalo vědět, kam byly umístěny konfigurační soubory.

PS:Jsem na Ubuntu 14.04

Přijatá odpověď:

Toto není tak komplexní jako skutečné účetnictví a uživatel to může snadno vrátit zpět, ale za předpokladu, že to nemusí být skutečný účetní systém a že se používají BASH i rsyslog, upravte soubor BASH RC pro celý systém. :

sudo -e /etc/bash.bashrc

Připojte na konec tohoto souboru:

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

Nahoře logger zaznamenává čas, uživatele, příkaz a návratovou hodnotu příkazu. Nastavte protokolování pro „local6“ pomocí nového souboru:

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

A obsah…

local6.*    /var/log/bash_commands.log

Restartujte rsyslog:

sudo service rsyslog restart

Odhlásit se. Přihlaste se. Rotace protokolu:

sudo -e /etc/logrotate.d/rsyslog

Existuje seznam souborů protokolu, které lze otáčet stejným způsobem…

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

Přidejte nový soubor protokolu bash-commands do tohoto seznamu:

/var/log/bash_commands.log

Uložte a restartujte/znovu načtěte rsyslog. (Otočení nakonec přepíše soubory protokolu, takže může být potřeba více přemýšlet nebo konfigurovat.)

Chcete-li zobrazit všechny soubory, které balíček nainstaloval:

dpkg-query -L [package_name]

Něco takového tedy můžete spustit při instalaci softwaru.

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

Linux
  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Jak rozdělit a kombinovat soubory z příkazového řádku v Linuxu

  3. Jak zaznamenat každý příkaz shellu v Linuxu

  1. Importujte funkce a proměnné do Bash pomocí příkazu source

  2. Jak změnit oprávnění a vlastníky pomocí příkazového řádku

  3. Jak zaznamenáte každý zadaný příkaz?

  1. Jak zajistit, aby příkaz alias fungoval ve skriptu bash nebo souboru bashrc

  2. Jak třídit soubory do složek podle typu souboru na bash (pomocí příkazu 'file')?

  3. Jak vytisknout výstup příkazu Linuxu do souboru?