设为首页 收藏本站
查看: 634|回复: 0

[经验分享] history的命令详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-26 09:07:30 | 显示全部楼层 |阅读模式
铭记历史,圆梦中华。在Linux操作系统中,对于管理员操作的命令进行查询也是非常重要,而且熟练掌握调用命令历史能提高管理员管理系统的效率。  history的命令缓存数目是由一个在/etc/profile文件名为HISTSIZE的变量决定,可以通过env命令查看当前设定的数目,也可以通过修改HISTSIZE的数值来决定缓存多少条命令。建议修改添加至自己家目录下面的.bash_profile,不要修改全局的变量。以下所有变量我均是添加在自己的家目录下面的.bash_profile,若有需要请自行在/etc/profile修改
  常用选项
        n 列出当前的n条命令
        -a 清除缓存中的所有命令
        -c 清除当前shell中缓存的命令
        -r :将 histfiles 的内容读到目前这个 shell 的 history 记忆中
        -w :将目前的 history 记忆内容写入 histfiles。Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。linux中history命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。运行特定的历史命令history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
  常用用法:
    !NUMBER 执行第NUMBER条命令
        !! 和crtl+p 都是执行上一条命令
        ! COMMAND e.g !c  执行最近的以c开头的命令,切记是从后往前最近的一条以C开头的命令。   常用案例
        1、查看history命令使用的时间
        由于history列出的命令很多,我们可以通过管道命令将history命令送给less命令方便查看,e.g history |less ;       
        同时我们可以设置history的环境变量HISTTIMEFORMAT让其显示每条命令执行时间,方便查看和了解当前系统何时执行过什么命令.
                export HISTTIMEFORMAT='%F %T '
        若要是想永久让history命令显示时间,将上面这条命令追加至当前用户的家目录下面.bash_profile里面。
        2、用Ctrl + R搜索历史命令
                我非常确信这应该是你最常使用的history特性,当你执行了一串相当长的命令之后,你只要用关键字搜索一下历史命令然后重新执行这条命令而不需要将整条命令再输一遍。方法是:按下Ctrl +R然后输入关键字。 在以下示例中,我搜索“sys”,则显示以前的命令中含有”sys”的命令“cat/etc/system-release”。
  [注:在命令行提示符下按下Ctrl+R,终端将显示如下提示―reverse-i-search‖]
          (reverse-i-search)`sys`: cat/etc/system-release
  [注:当看到你要的命令后按回车键,就可以重新执行这条命令了]
          cat /etc/system-release
  而有的时候你需要在执行一条历史命令之前编辑它.比如,你可以像下面那样搜索“sys”,终端显示历史命令“cat /etc/system-release”,选择它把"system"改为“centos”然后执行它
  [注: 在命令提示符下按 Ctrl+R , 将会显示提示符‖reverse-i-search‖]
          (reverse-i-search)`sys`:cat /etc/system-release
  [注: 看到你想要的命令后按下左键或者右键,就可以在执行这条命令之前编辑它了]
        cat /etc/centos-release       
          3、使用HISTFILE改变历史文件名
          默认情况下,命令历史被储存在.bash_history文件中,把下面的一行添加到.bash_profile文件中,重新登录shell,则.commandline_warrior文件将取代.bash_history文件用来储存历史命令。你可以使用这个命令来追踪不同终端中执行的命令,届时只需要将不同终端中所执行的命令保存在不同的历史文件中即可。这样就能知道系统出问题到底是谁在操作导致的。
          vim ~/.bash_profile
          HISTFILE=/root/.commandline_warrior       
        4、使用HISTCONTROL来消除命令历史中的连续重复条目;
        cat /etc/profile
                if [ "$HISTCONTROL" = "ignorespace" ] ; then
                            export HISTCONTROL=ignoreboth
                else
                            export HISTCONTROL=ignoredups
                fi
        这个HISTCONTROL变量就是控制是否显示连续的重复条目,连续敲三次ls, 这三次ls就叫做连续重复命令;假若敲一次ls,一次cd,再一次ls,这不叫做连续重复命令;
        ignoreups就是ignoredups去除连续重复的命令,只能剔除连续的重复条目;要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups;
        ignorespce 是以空格开头的命令在history中不显示,e.g [spcace] ls ,再去history就不能发现ls这个命令,但是我们能看到这个命令是执行了的。
        ignoreboth 就是同时带着上面两种选项的结果。
        5、将上一个命令的参数传递给当前命令。
        !!:$将上一个命令的参数传递给当前命令
        e.g cat /etc/profile
            vim !!:$         这个打开还是/etc/profile 这个文件
        !^ 将上一个命令中的第一个参数传递给当前命令
        cp /etc/profile /tmp
        vim !^ 打开的文件就是 /etc/profile
        6、替换特定命令的特定参数
          在下例中,!cp:2 在命令历史中查找以cp开头的命令,并将其第二个参数做为当前命令(ls -l)的参数。
          cp /etc/profile /tmp
          ls -l !cp:2
          ls -l /tmp
          在下面的例子中“!cp:$”寻找先前以cp为开头的命令,并把该条指令的最后一个参数(在这个例子中依旧是第二个参数)替换到“ls –l”中。
          ls -l !cp:$
          ls -l /tmp
        同理,ls -l !cp:^ 就是需要以cp开头命令,并把该条命令的第一个参数替换到“ls -l”中
        ls -l !cp:^
        ls-l /etc/profile
        7、用HISTIGNORE让history在存储时忽略某些指令
          有时你不想在记录里看到诸如“pwd”,“ls”之类的基本指令,可以用HISTIGNORE忽略这些指令。
          注意在HISTIGNORE中添加“ls”,只忽略“ls”不忽略“ls –l”。一定要准确的写出要忽略的的指令。
          #export HISTIGNORE=“pwd:ls:”
        同理这条命令可以追加进家目录下的.bash_profile。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-249426-1-1.html 上篇帖子: nfs 共享搭建LAMP 下篇帖子: linux配置文件的启动顺序 history
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表