• 2017-7-18-每日博客-关于Linux下的history的常用命令.doc


    History

    history命令可以用来显示曾执行过的命令。执行过的命令默认存储在HOME目录中的.bash_history文件中,可以通过查看该文件来获取执行命令的历史记录。需要注意的是.bash_history不包含当前会话所执行的命令,执行过的命令在关机时才会写入文件,除非执行命令history -w

    常用参数:
    1.n 显示n个最近的记录

    History 3


    2.-w <文件> 覆盖原有文件或者将记录写入一个新文件
    用法示例:
    将所有执行过的命令写入history.txt文件中
    $ history -w history.txt 或者
    $ history -w & cp ~/.bash_history history.txt

    3.-c 参数:将目前的shell中的所有 history 内容全部消除,下图是执行效果,执行history -c命令后,之前的所有的记录都清除啦。

    4.在每个用户目录都有一个.bash_history文件,里面记录了该用户的所有命令操作,无论这个用户是直接登录的还是通过xshell ssh方式过来的。

    那么,首先必然有一个root用户,所有在/root/.bash_history里面记录了root用户的命令操作,你可以用catvim等工具来查看。
    另外,假设你还有一个用户叫做XXX,那么在/home/XXX/.bash_history里面就记录了XXX用户的命令操作。

    LinuxHistory命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 。

    >History命令语法:
    [www.linuxidc.com@linux]# history [n]
    [www.linuxidc.com@linux]# history [-c]
    [www.linuxidc.com@linux]# history [-raw] histfiles

    参数:
    :数字,要列出最近的 n 笔命令列表
    -c :将目前的shell中的所有 history 内容全部消除
    -a :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles,则预设写入 ~/.bash_history
    -r :将 histfiles 的内容读到目前这个 shell history 记忆中
    -w :将目前的 history 记忆内容写入 histfilesLinux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。linuxhistory命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。运行特定的历史命令history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.

    语法说明:
    [www.linuxidc.com@linux]# [!number] [!command] [!!]
    参数说明:
    number :第几个指令的意思; 
    command  :指令的开头几个字母 
    ! :上一个指令的意思!

    History命令实战
    1.出所有的历史记录:
    [www.linuxidc.com@linux] # history

    2.只列出最近10条记录:
    [www.linuxidc.com@linux] # history 10 (,history10中间有空格)

    3.使用命令记录号码执行命令,执行历史清单中的第99条命令
    [www.linuxidc.com@linux] #!99 (!99中间没有空格)

    4.重复执行上一个命令
    [www.linuxidc.com@linux] #!!

    5.执行最后一次以rpm开头的命令(!代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)
    [www.linuxidc.com@linux] #!rpm

    6.逐屏列出所有的历史记录:
    [www.linuxidc.com@linux]# history | more

    7.立即清空history当前所有历史命令的记录
    [www.linuxidc.com@linux] #history -c

    除了使用history命令,shell GUI 终端提示下,你也可以使用上下方向键来翻阅命令历史(向下箭头会向前翻阅),直到你找到所需命令为止。这可以让我们很方便地编辑前面的某一条命令,而不用重复输入类似的命令。History命令的用途确实很大!但需要小心安全的问题!尤其是 root 的历史纪录档案,这是黑客们的最爱!因为不小心的 root 会将很多的重要资料在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个档案被解析的话,后果不堪设想!

    5.history相关的环境变量
    HISTFILE          指定存放历史文件位置,默认位置在~/.bash_profile(针对用户)、 
          /etc/profile(针对全局,如果~/.bash_profile内没有相关环境变量内容则使用全局变量设置
    HISTFILESIZE      命令历史文件记录历史的条数 
    HISTSIZE          命令历史记录的条数,默认为1000 
    HISTTIMEFORMAT="%F %T"  显示命令发生的时间 
    HISTIGNORE="str1:str2:..." 忽略string1,string2历史 
    HISTCONTROL      包含一下4项,让哪一项生效只需要让其=下面一项即可 
    ignoredups:  忽略重复的命令;连续且相同方为“重复” 
    ignorespace:  忽略所有以空白开头的命令 
    ignoreboth:ignoredups,ignorespace 
    erasedups:    删除重复命令

    让上述环境变量生效方式:
    1、直接在当前shell内输入相关变量,比如我们不想留存命令历史,我们把HISTSIZE设置为0
    [root@localhost ~]# HISTSIZE=0 
    [root@localhost ~]# history

    经测试,成功。不过这种设置的局限性是其作用范围仅仅针对当前shell及其子shell,如果切换用户或登出再登入其设置失效。不过其特点是设置完立刻生效。
    下面通过实验说明这个问题
    [root@localhost ~]# bash 
    [root@localhost ~]# history 
    [root@localhost ~]# history

    以上结果说明在当前shell内设置history的环境变量后,其作用范围为当前shell及子shell
    Last login: Fri Jul 29 17:26:41 2016 from 10.1.250.62 
    [root@localhost ~]# history 
        1  history

    重新登陆后原有的history环境变量失效
    2、另一种让history环境变量生效的方式是修改~/.bash_profile文件
    [root@localhost ~]# vi ~/.bash_profile  
    # .bash_profile 
      
    # Get the aliases and functions 
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc 
    fi
      
    # User specific environment and startup programs 
      
    PATH=$PATH:$HOME/bin
    HISTTIMEFORMAT="%F %T "        此为新添加的history环境变量,我添加了发生命令操作的时间 
    export PATH

    wq保存退出。
    [root@localhost ~]# history            
        1  history
        2  ll 
        3  cd
        4  hostory 
        5  history
        6  vi ~/.bash_profile  
        7  history

    由结果可知变量并没有生效,我们重新登录再尝试下。

    6.通过上面的两个结果,我们可以发现第二种修改配置文件虽然也可以成功修改history环境变量但是其生效需要重新登陆,并不是改完就生效。但是它的特点是此修改始终有效,时效性为永久。

      history命令的使用
    -c: 清空命令历史
    -d n: 删除历史中指定的命令,n表示命令号
    #: 显示最近的#条历史
    -a: 追加本次会话新执行的命令历史列表至历史文件,因为多终端所以如果想看当前都发生了什么操作就可以执行-a进行查看
    -n: 读历史文件(本地数据)中未读过的行到历史列表(内存数据)
    -r: 读历史文件(本地数据)附加到历史列表(内存数据)
    -w: 保存历史列表(内存数据)到指定的历史文件(本地数据)
    -s: 展开历史参数成一行,附加在历史列表后。用于伪造命令历史
    下面来演示上面几种命令的使用
    [root@localhost ~]# history 

    清空历史
    [root@localhost ~]# history -c 
    [root@localhost ~]# history 
    2016-07-29 20:29:26 history

    从历史文件读取之前的命令历史
    [root@localhost ~]# history -r  
    [root@localhost ~]# history 
       

    删除指定命令历史
    [root@localhost ~]# history -d 4 
    [root@localhost ~]# history 
        

    伪造历史命令
    [root@localhost ~]# history -s rm -rf /*  做下恶作剧 
    [root@localhost ~]# history 
     

    我相信任谁输入history看到这个命令都会吓一身汗。


      调用历史参数详解

    #cmd !^ : 利用上一个命令的第一个参数做cmd的参数 
    #cmd !$ : 利用上一个命令的最后一个参数做cmd的参数 
    #cmd !* : 利用上一个命令的全部参数做cmd的参数 
    #cmd !:n : 利用上一个命令的第n个参数做cmd的参数 
    #!n :调用第n条命令 
    #!-n:调用倒数第n条命令 
    #!!:执行上一条命令 
    #!$:引用前一个命令的最后一个参数同组合键Esc,. 
    #!n:^ 调用第n条命令的第一个参数 
    #!n:$ 调用第n条命令的最后一个参数 
    #!m:n 调用第m条命令的第n个参数 
    #!n:* 调用第n条命令的所有参数 
    #!string:执行命令历史中最近一个以指定string开头的命令 
    #!string:^ 从命令历史中搜索以string 开头的命令,并获取它的第一个参数 
    #!string:$ 从命令历史中搜索以string 开头的命令,并获取它的最后一个参数 
    #!string:n 从命令历史中搜索以string 开头的命令,并获取它的第n个参数 
    #!string:* 从命令历��中搜索以string 开头的命令,并获取它的所有参数

    下面通过实验来实践上面的历史参数的具体用法
    [root@localhost ~]# history 

    我们先使用!!来调用上一条命令

    [root@localhost ~]# !! 
    history
       

    [root@localhost ~]# !h 
    history


      常用的快捷键
      重新调用前一个命令中最后一个参数:
      !$ 


      Esc, .(点击Esc键后松开,然后点击. 键)
     这两个很常用,特别是Esc,.

  • 相关阅读:
    阿里云HPC助力新制造 | 上汽仿真计算云SSCC
    阿里云数据库备份DBS商业化发布,数据库实时备份到OSS
    一张图读懂数据库备份
    数据库智能管理助手-CloudDBA
    重新定义数据库的时刻,阿里云数据库专家带你了解POLARDB
    时间序列数据的处理
    【大量干货】史上最完整的Tengine HTTPS原理解析、实践与调试
    ECS主动运维事件--让你HOLD住全场 (二)
    【52.49%】【codeforces 556A】Case of the Zeros and Ones
    【66.47%】【codeforces 556B】Case of Fake Numbers
  • 原文地址:https://www.cnblogs.com/suway/p/7230821.html
Copyright © 2020-2023  润新知