尝试了解 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
。
现在,在您展示的示例中,您执行以下操作:
以“用户”身份登录并立即使用 切换到 root
su
。这意味着您以“用户”身份运行了一个命令,这就是为什么“用户”的历史记录文件只有一个条目:su
。作为 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)