Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does file ".bash_history" always record every command I ever issue? [closed]

Tags:

linux

bash

I'd like to be able to look through my command history (all the way back to the beginning of the user).

Is there any guarantee that file .bash_history will continue to be appended to?

If there is a limit where the file will start to be truncated (hopefully from the beginning), is there a way to remove that limit?

like image 719
Steven Lu Avatar asked Nov 17 '11 14:11

Steven Lu


People also ask

Can I delete .bash history?

The user can remove all bash history or a specific history by using 'history' command. But there are many other commands to remove history information permanently. You can also remove history by removing the content of the . bash_history file.

How do I permanently delete command history in Linux?

There may come a time that you want to remove some or all the commands in your history file. If you want to delete a particular command, enter history -d <line number> . To clear the entire contents of the history file, execute history -c .

How can I see all command history in Linux?

Using a Reverse Search of Linux Command History To enter this mode you simply press ctrl and r. You can then enter a search term and use repeat presses of ctrl and r to step back through the list of previous commands containing that term.


1 Answers

There are a number of environment variables that control how history works in Bash. Relevant excerpt from bash manpage follows:

HISTCONTROL
       A colon-separated list of values controlling how commands are saved on the history list.  If the list of values includes ignorespace,  lines  which
       begin  with  a space character are not saved in the history list.  A value of ignoredups causes lines matching the previous history entry to not be
       saved.  A value of ignoreboth is shorthand for ignorespace and ignoredups.  A value of erasedups causes all previous  lines  matching  the  current
       line  to be removed from the history list before that line is saved.  Any value not in the above list is ignored.  If HISTCONTROL is unset, or does
       not include a valid value, all lines read by the shell parser are saved on the history list, subject to the value of HISTIGNORE.   The  second  and
       subsequent lines of a multi-line compound command are not tested, and are added to the history regardless of the value of HISTCONTROL.
HISTFILE
       The  name  of the file in which command history is saved (see HISTORY below).  The default value is ~/.bash_history.  If unset, the command history
       is not saved when an interactive shell exits.
HISTFILESIZE
       The maximum number of lines contained in the history file.  When this variable is assigned a value, the history file is truncated, if necessary, by
       removing  the  oldest entries, to contain no more than that number of lines.  The default value is 500.  The history file is also truncated to this
       size after writing it when an interactive shell exits.
HISTIGNORE
       A colon-separated list of patterns used to decide which command lines should be saved on the history list.  Each pattern is anchored at the  begin-
       ning  of  the line and must match the complete line (no implicit `*' is appended).  Each pattern is tested against the line after the checks speci-
       fied by HISTCONTROL are applied.  In addition to the normal shell pattern matching characters, `&' matches the previous history line.  `&'  may  be
       escaped  using  a  backslash; the backslash is removed before attempting a match.  The second and subsequent lines of a multi-line compound command
       are not tested, and are added to the history regardless of the value of HISTIGNORE.
HISTSIZE
       The number of commands to remember in the command history (see HISTORY below).  The default value is 500.

To answer your questions directly:

No, there isn't a guarantee, since history can be disabled, some commands may not be stored (e.g. starting with a white space) and there may be a limit imposed on the history size.

As for the history size limitation: if you unset HISTSIZE and HISTFILESIZE:

unset HISTSIZE
unset HISTFILESIZE

you'll prevent the shell from truncating your history file. However, if you have an instance of a shell running that has these two variables set, it will truncate your history while exiting, so the solution is quite brittle. In case you absolutely must maintain long term shell history, you should not rely on shell and copy the files regularly (e.g., using a cron job) to a safe location.

History truncation always removes the oldest entries first as stated in the man page excerpt above.

like image 138
Adam Zalcman Avatar answered Sep 28 '22 10:09

Adam Zalcman