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忽略历史中的特定命令

忽略pwdls命令:

$ 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打头的命令

快速重复执行上一条命令

以下四种方法,上方向键、!!!-1crtl+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 :指令的开头几个字母

! :上一个指令的意思!

参考文章:

http://blog.sina.com.cn/s/blog_5caa94a00100gyls.html

history命令详解的更多相关文章

  1. linux history 命令详解

    linux history 命令详解 显示命令执行时间 linux shell 具有history 功能,即会记录已经执行过的命令,但是默认是不显示命令的执行时间,命令的执行时间,history 已经 ...

  2. Linux下history命令详解---转载

    Linux下History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 . >History命令语法:[www.linuxidc.com@linux]# history [n][ww ...

  3. Linux history命令详解

      history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件. 该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定 ...

  4. Linux:history命令详解

      Linux下History命令 主要用于显示历史指令记录内容, 下达历史纪录中的指令 . 语法 history [n] history [-c] history [-raw] histfiles ...

  5. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  6. net user命令详解

    net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...

  7. Linux常用命令详解(week1_day1_2)--技术流ken

    本节内容 aliasunaliasunamesuhostnamehistorywhichwcwwhowhoamipingkillseqdudffreedate 命令详解 1. alias 设置.’查看 ...

  8. Linux常用命令详解(week1_day1_1)--技术流ken

    本节内容 基础命令:lsmanpwdcdmkdirechotouchcpmvrmrmdircatmorelessheadtailclearpoweroffreboot进阶命令(下一章节):aliasu ...

  9. CentOS下yum命令详解

    CentOS下yum命令详解 Yum: 即Yellowdog Update Modifier,是一种基于rpm的包管理工具 yum命令使用示例 显示yum仓库 显示所有仓库 yum repolist ...

随机推荐

  1. 用rose画UML图(用例图,活动图)

    用rose画UML图(用例图,活动图) 首先,安装rose2003,电脑从win8升到win10以后,发现win10并不支持rose2003的安装,换了rose2007以后,发现也不可以. 解决途径: ...

  2. Linux 下 ---ThinkPHP 图片上传提示:上传根目录不存在!请尝试手动创建

    2016年11月15日11:15:47 Windows下如果碰到如此问题,要看文件保存根路径里的rootpath,比如ThinkPHP框架里config.php文件里的的参数配置: //文件上传相关配 ...

  3. window.onload 和 DOMContentLoaded区别及如何判断dom是否加载完毕

    http://blog.allenm.me/2010/02/window-onload-和-domcontentloaded/ 其中使用IE不支持DOMContentLoaded,那么判断IE是否加载 ...

  4. 502 Bad Gateway深究

    早上收到502报警,设置的报警规则是502错误两分钟超过500就报警. 排障流程: 日志分析系统报障-->查看日志系统日志-->nginx错误日志-->php错误日志-->ph ...

  5. CPU阿甘之烦恼

    转自“码农翻身”公共号,原文地址CPU阿甘之烦恼 总结:(程序加载到内存运行的演变过程) 内存存放程序.OS负责加载程序到内存.CPU负责运行内存中的程序 1.串行:加载一个完整程序到内存,CPU运行 ...

  6. [Unreal]学习笔记之材质说明

    取消蓝图中的连接线:Alt+鼠标左键 在蓝图中,通过按住1,2,3,4加鼠标左键,可以快速生成1,2,3,4维的向量 材质和材质实例的区别:使用一个母材质,可以创建出多种场景中的材质实例:每次修改母材 ...

  7. 错误403,You don't have permission to access /index.html on this server.

    再更改apache工程路径时候,按照许多教程改了httpd.conf文件,还是不行,问题依旧存在 解决方式,你的个人文件夹的权限还没改好,看一下自己的个人文件夹的权限,是否可以读写

  8. sed awk 样例

    sed [options] '[action]' filename options: -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕. -e:允 ...

  9. XML文件(1)--使用DOM示例

    其他依赖字段/方法 // 书籍列表 private List<Book> bookList = new LinkedList<Book>(); /** * 根据xml文件,得到 ...

  10. SQL语句判断数据库、表、字段是否存在

    from master..sysdatabases where name='TestDB')    print 'TestDB存在'else    print 'TestDB不存在' --判断表[Te ...