通过这些技巧让 Bash 历史记录更有用

告诉 Bash 你想让它记住什么——甚至可以通过删除你不想要或不需要的条目来重写历史记录。
66 位读者喜欢这篇文章。
Jump-start your career with open source skills

Opensource.com

运行 Bash 的 Linux 终端有一个内置的历史记录功能,你可以用它来跟踪你最近的操作。要查看你的 Bash 会话历史记录,请使用内置命令 history

$ echo "foo"
foo
$ echo "bar"
bar
$ history
  1  echo "foo"
  2  echo "bar"
  3  history

与大多数命令不同,history 命令不是文件系统上的可执行文件,而是 Bash 的一个函数。你可以使用 type 命令来验证这一点

$ type history
history is a shell builtin

历史记录控制

shell 历史记录中的行数上限由 HISTSIZE 变量定义。你可以在你的 .bashrc 文件中设置这个变量。以下设置将你的历史记录设置为 3,000 行,超过这个行数后,最旧的行将被删除,为最新的命令腾出空间,最新的命令位于列表的底部

export HISTSIZE=3000

还有其他与历史记录相关的变量。HISTCONTROL 变量控制存储哪些历史记录。你可以通过在你的 .bashrc 文件中放置以下内容,强制 Bash 排除以空格开头的命令

export HISTCONTROL=$HISTCONTROL:ignorespace

现在,如果你输入一个以空格开头的命令,该命令将不会被记录在历史记录中

$ echo "hello"
$     mysql -u bogus -h badpassword123 mydatabase
$ echo "world"
$ history
  1  echo "hello"
  2  echo "world"
  3  history

你也可以避免重复的条目

export HISTCONTROL=$HISTCONTROL:ignoredups

现在,如果你连续输入两个相同的命令,历史记录中只会显示一个

$ ls
$ ls
$ ls
$ history
  1  ls
  2  history

如果你喜欢这两个忽略选项,你可以直接使用 ignoreboth

export HISTCONTROL=$HISTCONTROL:ignoreboth

从历史记录中删除命令

有时你可能会犯错,在 shell 中输入一些敏感信息,或者你只是想清理你的历史记录,使其更准确地代表你为使某些东西正常工作而采取的步骤。如果你想在 Bash 中删除历史记录中的命令,请使用 -d 选项,并指定要删除项的行号

$ echo "foo"
foo
$ echo "bar"
bar
$ history | tail
  535  echo "foo"
  536  echo "bar"
  537  history | tail
$ history -d 536
$ history | tail 
  535  echo "foo"
  536  history | tail
  537  history -d 536
  538  history | tail

要停止添加 history 条目,你可以在命令前放置一个 空格,前提是你的 HISTCONTROL 环境变量中有 ignorespace

$  history | tail
  535  echo "foo"
  536  echo "bar"
$  history -d 536
$  history | tail 
  535  echo "foo"

你可以使用 -c 选项清除你的整个会话历史记录

$ history -c
$  history
$

历史教训

操作历史记录通常没有听起来那么危险,特别是当你有目的地管理它时。例如,如果你正在记录一个复杂的问题,通常最好使用你的会话历史记录来记录你的命令,因为通过将它们放入你的历史记录中,你正在运行它们,从而测试该过程。很多时候,只记录而不实际操作会导致忽略小步骤或写错细节。

根据需要使用你的历史会话,并明智地行使你对历史记录的权力。祝你历史记录破解愉快!

接下来阅读
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时进行。

2 条评论

感谢这篇教程,因为我经常使用 bash(用于管道),而且我有一些常用的命令字符串。
所以我不得不 grep bashhistory 文件,并使用 nano 打开同一个文件来清理历史记录...

谢谢!非常有帮助!我每天都使用 bash。

© . All rights reserved.