我想要记录在终端上输入的所有命令。
我检查了“脚本”,但这会生成一个包含命令和响应的文件。有没有办法只包含命令?
答案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
- CTRL+R
- 输入搜索词(例如输入“sudo apt-get”)
- 按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 变量以满足您的需要。
干杯!