2

如何编写一个循环来达到 bash 中 $HISTFILESIZE 的限制?

这样的东西实际上会打印命令吗?

for i in $(seq 1 $HISTFILESIZE); do echo test-$i;done

目标是查看日志是否可以被恶意用户用来隐藏其 shell 历史记录的简单循环覆盖。我的 .bash_history 仅附加: chattr +a 我知道依靠 .bash_history 可能不是跟踪的最佳方式,这更像是一个“我很好奇”的问题。

谢谢乔恩

4

2 回答 2

1

您不需要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

假设它不是仅附加的。

于 2012-07-04T01:25:21.197 回答
0

好吧,用户总是可以运行

for i in $(seq 1 $HISTFILESIZE); do echo test-$i;done

正如您所说,并将输出粘贴到终端中。但是.bash_history是在用户的主目录中,所以他可以chmod +wshred它一样轻松。

于 2012-07-04T01:09:31.767 回答