“历史”命令如何工作?

“历史”命令如何工作?

尝试了解 bash_history 的功能:

/home/user# ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  pylabs  .viminfo  .Xauthority

我确实.bash_history在文件夹中看到了一个文件/home/user。但是为什么它没有执行命令的完整历史记录(如下所示)?

/home/user# cat .bash_history

su
/home/user#

.bash_history但文件夹中的文件中有相同的历史记录/root

 # ls -a
 .  ..  .bash_history  .bashrc  .cache  .profile  .ssh  .viminfo

/home/user# cd /root/
# cat .bash_history

bash script.sh
ls
cd pylabs/
ls
...
...
ls -a
cat .bash_history
cd /root/
#

问题 2:它是否.bash_history仅在某些特定文件夹中可用,以及它如何存储在不同目录中执行的所有命令?

/home/user/pylabs# ls -a
.  ..  backup  bkupscript.py  mybackup.py  __pycache__  solution.py

答案1

历史记录是针对每个用户的,而不是全局的。每个用户都有自己的历史记录文件,每个用户的命令都存储在自己的文件中。bash 历史记录文件的默认位置是$HOME/.bash_history,因此这将/home/user/.bash_history针对用户“user”和/root/.bash_history“root”用户。您可以通过将环境变量设置为其他内容来更改历史记录文件的名称/位置HISTFILE

现在,在您展示的示例中,您执行以下操作:

  1. 以“用户”身份登录并立即使用 切换到 root su。这意味着您以“用户”身份运行了一个命令,这就是为什么“用户”的历史记录文件只有一个条目:su

  2. 作为 root,您运行了各种命令,这些命令都存储在 root 的历史记录文件中,因为它们是由 root 运行的。请注意,root 的历史记录文件不包含该su命令,因为它是由“用户”而不是 root 运行的。

因此,$HOME/.bash_history文件存储全部用户运行的命令,无论它们在哪个目录中运行。但是,由于每个用户都有自己的文件,因此 root 运行的命令并不与“用户”运行的命令存储在同一个文件中。

答案2

Bash 在您找到的文件中存储了历史记录,但正在运行的 shell 也会在内存中保留尚未保存的历史记录。使用history -w将当前历史记录写入文件。

答案3

另外,我最喜欢的历史命令破解之一是启用

export HISTTIMEFORMAT=' %F %T '

如果您现在执行 history 命令,您将看到与每个显示的历史记录条目相关的时间戳

history 

1525   2020-04-04 08:26:03 strace ls
1526   2020-04-04 08:26:08 strace history
1527   2020-04-04 08:27:55 strace ls 

在哪里

 %F     Equivalent to %Y-%m-%d (the ISO 8601 date format)
 %T     The time in 24-hour notation (%H:%M:%S)

相关内容