57

How do I keep logs of all the work done via terminal? For example, I want a record of all the work done on database via terminal.

2
  • This is also built into sudo. Jul 8, 2015 at 19:53
  • I have added my answer you can review Dec 8, 2016 at 7:23

4 Answers 4

85

When you are ready to start recording a log file, type:

script screen.log

Now, until you stop the script, all input and output in the Terminal will be stored in screen.log. When you are done, just type:

exit

Your screen.log file will stored in the local directory. If you want to redirect it, use an absolute pathname such as ~/screen.log. This will do exactly what you are looking for.

Source: Ubuntu Guide - How To Log Terminal Commands

2
  • Hi, thanks for the reply. But will this work if I login to the mysql database from the shell using the following sequence:- 1) script screen.log 2)mysql -u <user> -p <database> 3) some work on the database 4) exit; I see that the file screen.log is created but it doesn't contain logs for the database. I'll share the file asap. Thanks Ankt
    – Ankit
    Jul 10, 2012 at 14:15
  • 2
    it should work with everything running in the console reading from "standard input" (usually your keyboard) and writing to standard output (usually your terminal window). So it should include the mysql command-line client. The man page (man script) even mentions vi (editor)...
    – Izzy
    Jul 10, 2012 at 14:21
12

You may want to try out Asciinema. In addition to just making a recording you get the ability to share it and embed the player on your blog, article or in a conference talk.

7

I have a better way to use syslog for logging every shell command this can be vary upon linux distribution but method will remain same

You need to follow some steps:

Step # 1 (Create Syslog service)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

Step # 2 (Open bashrc and enter below command)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ste # 3 (Restart Syslog Service)

# /etc/init.d/rsyslog

Here is a log sample:

Dec  7 22:13:00 validationdb2 mahasan: root@export [13291]: tail -f /var/log/mysql/mysql.log [0]
Dec  7 22:13:09 validationdb2 mahasan: root@export [13291]: ls -lh [0]
Dec  7 22:13:27 validationdb2 mahasan: root@export [13291]: touch test command  [0]
3
  • cheeky tactic!!!
    – Tom
    Mar 7, 2017 at 19:19
  • Hi Mansur, Could you please explain what you are doing with those commands, its difficult to understand, atleast to me.
    – Jasser
    Oct 16, 2017 at 11:03
  • In Step 1 i am naming a service for command logging that will be used by process to send logs to it "local6" would be the end point for service for logging In Step 2 i am setting things what actually i want "PROMPT_COMMAND='RETRN_VAL=$?" this portion will record user's input and "logger -p local6.debug" this will send the log file to service which record logs data with the help syslog process Oct 16, 2017 at 12:08
1

nhi will perfectly solve your problem. This tool automatically captures all potentially useful information about each executed command (as well as its output).

With nhi you can easily retrieve any shell session (or terminal output) in its entirety, or only commands that you are interested in, by using an advanced querying mechanism provided by nhi.

Note:

I am the creator of this tool. If you have questions, please feel free to ask.

7
  • hi @strang1ato could you please add the details on how to install and use nhi tool. Thanks.
    – Jags
    Nov 21, 2021 at 0:38
  • @Jags Please checkout README
    – strang1ato
    Nov 21, 2021 at 0:39
  • 1
    This is the same answer as posted here, unix.stackexchange.com/a/677683/97255, and unix.stackexchange.com/a/678401/97255. Whilst this is not strictly spam as you have disclosed affiliation, it is a bit odd to multiple post the same answer... Nov 21, 2021 at 4:14
  • Would nhi allow me to log a session that leads to a system crash, so I cannot neatly close the logging process?
    – Rasmus
    Jan 2 at 22:10
  • @Rasmus I am not sure what you mean, can you please describe more precisely your situation
    – strang1ato
    Jan 4 at 19:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.