如何编写一个循环来达到 bash 中 $HISTFILESIZE 的限制?
这样的东西实际上会打印命令吗?
for i in $(seq 1 $HISTFILESIZE); do echo test-$i;done
目标是查看日志是否可以被恶意用户用来隐藏其 shell 历史记录的简单循环覆盖。我的 .bash_history 仅附加: chattr +a 我知道依靠 .bash_history 可能不是跟踪的最佳方式,这更像是一个“我很好奇”的问题。
谢谢乔恩
您不需要seq
,Bash 有两种方法可以提供数字以通过循环进行迭代for
。
for i in {1..100}
它不会将变量作为参数(除非您使用eval
)。
和
for ((i = 1; i <= $HISTFILESIZE; i++))
这显然可以使用变量。
你可以做:
for ((i = 1; i <= $HISTFILESIZE; i++))
do
history -s "anything you want"
done
使用这种技术,用户可以删除当前会话的内存历史列表。当用户退出时,该列表被写入历史文件。
您可以截断历史文件:
>~/.bash_history
假设它不是仅附加的。
好吧,用户总是可以运行
for i in $(seq 1 $HISTFILESIZE); do echo test-$i;done
正如您所说,并将输出粘贴到终端中。但是.bash_history
是在用户的主目录中,所以他可以chmod +w
再shred
它一样轻松。