我想创建在终端中输入的所有命令的日志

我想创建在终端中输入的所有命令的日志

我想要记录在终端上输入的所有命令。

我检查了“脚本”,但这会生成一个包含命令和响应的文件。有没有办法只包含命令?

答案1

如果你使用默认 shell,所有命令都已记录到 $HOME/.bash_history 。有几个环境变量会影响历史记录保存,你可以阅读以下内容:

info bash
Type: / HIST

如果您想将该设置应用于所有用户,请编辑 /etc/profile。

例子:

export HISTFILESIZE=5000

答案2

用户手动输入到终端的所有内容都会保存到 中~/.bash_history,其中~是当前登录用户主目录的简写。还请注意,以 开头的文件.是隐藏的;在 Nautilus 中,您可以通过按Ctrl+来显示它们H

通过输入来查看

cat .bash_history

要查看以连续数字注释的历史记录,请键入

history

您可以通过键入来再次执行在那里看到的命令!2129,例如,它将执行命令编号 2129,如history命令所示。

请注意,该history命令会显示第二条日志,但.bash_history仅在您从终端注销后才会保存。

一些有趣的信息:

  • 以空格开头的命令不会保存到.bash_history。如果您运行类似 的命令rm -R mydir/,您可能需要在其前面加上空格,以防止意外按向上箭头再次运行它。

正如Joāo所说,可以使用来控制已保存历史记录的大小export HISTFILESIZE=5000

答案3

您还可以在终端中使用CTRL+来搜索历史记录。R

  1. CTRL+R
  2. 输入搜索词(例如输入“sudo apt-get”)
  3. CTRL+R循环浏览每场比赛

答案4

我为此编写了一个函数:

function begin_install_log() {
if [ $# -eq 0 ]
then
    echo "No arguments supplied"
    HIST_NUM=""
else
    HIST_NUM=$(history|tail -n 1|awk '{ print $1  }')
    HIST_NUM=$((HIST_NUM + 2))
    OUTPUT_FILE=$HOME/environment/ansible/.install_cache/${1}
fi
}
function capture_install_log() {
if [ ! $HIST_NUM ]
then
    echo "run 'begin_install_log' first"
else
    history|grep -A999 $HIST_NUM|awk '{$1=""; print $0}' >> $OUTPUT_FILE
    HIST_NUM=""
fi

用法:

$ begin_install_log some_file_name
$ blah
$ blah
$ blah
$ capture_install_log

当然,您必须更改 OUTPUT_FILE 变量以满足您的需要。

干杯!

相关内容