2019-07-30
Linux下history命令用法
^_^
在项目中希望调用history命令来获取用户的历史记录,方便分析,可是我们平时所见到的history结果是下面这样:
# history | head -10 30 rm -fr lala 31 for i in `seq 1000`; do 32 sleep 1 33 for i in `seq 1000`; do sleep 10 34 cd /home/ 35 ll 36 cd lib/ 37 ll 38 cd .. 39 ll
貌似达不到我们想要的效果,显示具体时间,具体命令的效果,那现在让我们一起来探索一下history命令的奥妙吧!
使用 HISTTIMEFORMAT 显示时间戳
# export HISTTIMEFORMAT='%F %T' # history | more 1 2016-08-01 14:47:55ls 2 2016-08-01 14:47:55vim /etc/sudoers 3 2016-08-01 14:47:55ls 4 2016-08-01 14:47:55cd /home/ruanyang/ 5 2016-08-01 14:47:55ls 6 2016-08-01 14:47:55cd 下载 7 2016-08-01 14:47:55ls 8 2016-08-01 14:47:55cd ctags-5.8/
备注:这个环境变量的声明只能作用于当前的bash,所以如果长久有效的话,需要将其定义到/etc/profile
文件中
使用 HISTSIZE 控制历史命令记录的总行数
将这两行内容追加到/etc/profile
文件中,当你再次重新登录bash时,历史命令总行数会变成100000
export HISTSIZE=100000 export HISTFILESIZE=100000
备注:如果我们想要看到更多的历史命令时,不妨使用这个变量
使用 HISTFILE 更改历史文件名称
默认情况下,历史命令存放在~/.bash_history
文件中。如下,重新定位历史命令存放位置
export HISTFILE=/.logs/history_${LOGNAME}
备注:这样可以将每个用户的历史文件清晰的使用文件名来标记,方便分析
使用 HISTCONTROL 从命令历史中剔除连续重复的条目
HISTCONTROL=ignoredups
剔除连续的相同命令的条目,仅剩余一条,如下:
# export HISTCONTROL=ignoredups
# cd
# cd
# cd
我们现在来看看效果吧!
# history | tail -n 5 133 2016-08-01 17:51:30history 134 2016-08-01 18:09:54export HISTCONTROL=ignoredups 135 2016-08-01 18:09:59cd 136 2016-08-01 18:10:04history 137 2016-08-01 18:22:12history | tail -n 5
三个cd
变成一个了
使用 HISTCONTROL 清除整个命令历史中的重复条目
HISTCONTROL=erasedups
历史中的重复命令被清除到仅剩距离当前时间最近的那条命令
# export HISTCONTROL=erasedups
# pwd
# cd
# ls
# pwd
# pwd
看看效果吧!pwd
剔除剩一个啦
# history | tail -10 100 2016-08-01 18:34:47export HISTCONTROL=erasedups 101 2016-08-01 18:34:58cd 102 2016-08-01 18:34:58ls 103 2016-08-01 18:35:07pwd 104 2016-08-01 18:35:20history | tail -10
使用 HISTCONTROL 强制 history 不记住特定的命令
HISTCONTROL=ignorespace
,在不想被记住的命令前面输入一个空格
$ export HISTCONTROL=ignorespace
$ ls
$ cd
$ pwd
注意,我在cd
前输入了一个空格,我们一起来看看效果吧!cd
消失啦!
$ history | tail -5 1997 more sources.list 1998 export HISTCONTROL=ignorespace 1999 ls 2000 pwd 2001 history | tail -5
使用HISTSIZE禁用history
如果想禁用history,可以将HISTSIZE设置为0:
$ export HISTSIZE=0 $ history
使用HISTIGNORE忽略历史中的特定命令
忽略pwd
、ls
命令:
$ export HISTIGNORE="pwd:ls:" $ pwd $ cd $ ls
看看效果吧!
$ history 4 1998 export HISTIGNORE="pwd:ls:" 1999 cd 2000 history 5
快捷键-使用CTRL+R搜索历史
比较简单,自己动手试一下吧!
从命令历史中执行一个指定的命令
!number eg.!4
指定关键字来执行以前的命令
输入!ps并回车,将执行以ps打头的命令
快速重复执行上一条命令
以下四种方法,上方向键、!!
、!-1
、crtl+p
$ history 4 1998 export HISTIGNORE="pwd:ls:" 1999 cd 2000 history 5 2001 history 4 $ !! history 4 1998 export HISTIGNORE="pwd:ls:" 1999 cd 2000 history 5 2001 history 4 $ !-1 history 4 1998 export HISTIGNORE="pwd:ls:" 1999 cd 2000 history 5 2001 history 4 $ history 4 1998 export HISTIGNORE="pwd:ls:" 1999 cd 2000 history 5 2001 history 4
命令替换
!!:$
与!$
都可以为当前命令获得上一条命令的参数!^
获得上一条命令的第一项参数
演示:
$ ls go go $ cat !$ #!!:$也可以实现 cat go #!/home/s/ops/perl/bin/perl ......
History命令语法
# history [n] # history [-c] # history [-raw] histfiles
参数:
n :数字,要列出最近的 n 条命令列表
-c :将目前的shell中的所有 history 内容全部消除
-a :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles ,则预设写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中
-w :将目前的 history 记忆内容写入 histfiles
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。
如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。
linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。
运行特定的历史命令
history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
语法说明:
[test@linux]# [!number] [!command] [!!]
参数说明:
number :第几个指令的意思;
command :指令的开头几个字母
! :上一个指令的意思!