![8a413eb8950548d4ed01148c58291b87.png](https://i-blog.csdnimg.cn/blog_migrate/3742e41cf2b5acc442d850150f0d0bff.jpeg)
Linux历史记录history常用技巧
Pain #1 - 历史记录不带时间戳,不知道命令是什么时候发生的
默认情况下 history 命令直接显示用户执行的命令而不会输出运行命令时的日期和时间,即使 history 命令记录了这个时间。
运行 history 命令时,它会检查一个叫做 HISTTIMEFORMAT 的环境变量,这个环境变量指明了如何格式化输出 history 命令中记录的这个时间。
若该值为 null 或者根本没有设置,则它跟大多数系统默认显示的一样,不会显示日期和时间。
echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
或者
echo 'export HISTTIMEFORMAT="%F %T "' >> /etc/profile
生效后的history将会是这个样子:
# history 1 2017-08-16 15:30:15 yum install -y mysql-server mysql-client 2 2017-08-16 15:30:15 service mysqld start 3 2017-08-16 15:30:15 sysdig proc.name=sshd 4 2017-08-16 15:30:15 sysdig -c topprocs_net 5 2017-08-16 15:30:15 sysdig proc.name=sshd 6 2017-08-16 15:30:15 sysdig proc.name=sshd | more
Pain #2 - 历史记录默认只保留500条记录
history读取环境变量HISTFILESIZE和HISTSIZE配置记录和显示的历史命令记录数量,默认是500, 可以改大一些:
# 设置历史记录条数echo 'export HISTFILESIZE=100000' >> >> ~/.bashrc# 设置显示历史记录条数echo 'export HISTSIZE=10000' >> ~/.bashrc
或者
# 设置历史记录条数echo 'export HISTFILESIZE=100000' >> /etc/profile# 设置显示历史记录条数echo 'export HISTSIZE=10000' >> /etc/profile
Pain #3 - 多个终端相互覆盖历史记录
现在通过多个ssh终端连接到同一个服务器是非常常见的操作,但是bash默认多个终端会相互覆盖历史记录,通过下面的配置可以让终端退出的时候采用append方式而不是overwrite保存历史记录:
echo 'shopt -s histappend' >> ~/.bashrc
或者
echo 'shopt -s histappend' >> /etc/profile
Pain #4 - 如何快速搜索历史记录
在Bash环境中按'Ctrl+r', 切出(reverse-i-search)`':提示符,输入需要查找命令关键字,继续按Ctrl+r在多个结果中选择。