Linux之history

基本原理

Linux 命令的历史记录,会持久化存储,默认位置是当前用户家目录的 .bash_history 文件。
当 Linux 系统启动一个 Shell 时,Shell 会从 .bash_history 文件中,读取历史记录,存储在相应内存的缓冲区中。
我们平时所操作的 Linux 命令,都会记录在缓冲区中。包括 history 命令所执行的历史命令管理,都是在操作缓冲区,而不是直接操作 .bash_history 文件。
当我们退出 Shell,比如按下 Ctrl+D 时,Shell 进程会把历史记录缓冲区的内容,写回到 .bash_history 文件中去。

基本用法

  • 常用命令
history n:只显示最近的 n 条历史记录
history -c:清除缓存区中的历史记录
history -w:将缓存区的历史记录保存到文件
history -d N:删除第 N 条历史记录
$ !1024   #重复执行第 1024 历史命令
$ !!      #重复执行上一条命令
$ !-6     #重复执行倒数第 6 条历史命令,可以通过负数表示,-6 表示倒数第 6 条记录
  • 显示时间戳
$ export HISTTIMEFORMAT='%F %T '
$ history 3
  46  2021-04-18 15:21:33 curl baidu.com
  47  2021-04-18 15:21:35 pwd
  48  2021-04-18 15:21:39 history 3

  • 显示更详细信息
$ export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed \-e 's/[()]//g'` `whoami` "
  6  2021-04-18 16:07:48 113.200.44.237 root ls
  7  2021-04-18 16:07:59 113.200.44.237 root pwd
  8  2021-04-18 16:08:14 113.200.44.237 root history
  • 控制历史记录总数
$ export HISTSIZE=10000    

$ echo "export HISTSIZE=10000" >> ~/.bash_profile
$ echo "export HISTFILESIZE=200000" >> ~/.bash_profile
$ source ~/.bash_profile

注意,HISTSIZE 变量只能控制缓冲区中的历史记录数量,如果需要控制 .bash_history 文件存储的最大记录数,可以通过 HISTFILESIZE 进行控制
  • 更改历史记录文件名
$ echo "export HISTFILE=/data/backup/chopin.bash_history" >> ~/.bash_profile
$ souce ~/.bash_profile

环境变量

HISTSIZE:控制缓冲区历史记录的最大个数
HISTFILESIZE:控制历史记录文件中的最大个数
HISTIGNORE:设置哪些命令不记录到历史记录
HISTTIMEFORMAT:设置历史命令显示的时间格式
HISTCONTROL:扩展的控制选项

如果在生产环境,这些环境变量需要持久化到配置文件 ~/.bash_profile

export HISTCONTROL=ignoreboth
# ignorespace: 忽略空格开头的命令
# ignoredups: 忽略连续重复命令
# ignoreboth: 表示上述两个参数都设置

# 设置追加而不是覆盖
shopt -s histappend

export HISTSIZE=1000
export HISTFILESIZE=200000
export HISTTIMEFORMAT="%F %T "
export HISTIGNORE="ls:history"

参考和转载
https://zhuanlan.zhihu.com/p/371739269

posted @ 2024-05-13 09:44  *一炁化三清*  阅读(4)  评论(0编辑  收藏  举报