最新消息:

清除linux下history删除和调用

Linux运维 大步 3355浏览 0评论

linux下,命令满屏幕的,对于记性不好的人来说,很多命令都记不住,所以shell下有history命令供我们调用以前输入的命令,这是相当给力的:

 

如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率。本文将通过实例的方式向你介绍 history 命令的 15 个用法。

  1. 使用 HISTTIMEFORMAT 显示时间戳

    当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身。如果你想要查看命令历史的时间戳,那么可以执行:

    # export HISTTIMEFORMAT='%F %T '
    # history | more
    1 2008-08-05 19:02:39 service network restart
    2 2008-08-05 19:02:39 exit
    3 2008-08-05 19:02:39 id
    4 2008-08-05 19:02:39 cat /etc/redhat-release

    注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后,之后的那些新执行的 bash 命令才会被打上正确的时间戳。在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。[感谢 NightOwl 读者补充]

  2. 使用 Ctrl+R 搜索历史

    Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。

    # [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt]
    (reverse-i-search)`red‘: cat /etc/redhat-release
    [Note: Press enter when you see your command, which will execute the command from the history]
    # cat /etc/redhat-release
    Fedora release 9 (Sulphur)

  3. 快速重复执行上一条命令

    有 4 种方法可以重复执行上一条命令:

    1. 使用上方向键,并回车执行。
    2. 按 !! 并回车执行。
    3. 输入 !-1 并回车执行。
    4. 按 Ctrl+P 并回车执行。
  4. 从命令历史中执行一个指定的命令

    在下面的例子中,如果你想重复执行第 4 条命令,那么可以执行 !4:

    # history | more
    1 service network restart
    2 exit
    3 id
    4 cat /etc/redhat-release
    # !4
    cat /etc/redhat-release
    Fedora release 9 (Sulphur)

  5. 通过指定关键字来执行以前的命令

    在下面的例子,输入 !ps 并回车,将执行以 ps 打头的命令:

    # !ps
    ps aux | grep yp
    root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
    root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp

  6. 使用 HISTSIZE 控制历史命令记录的总行数

    将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数
    将变成 450 条:

    # vi ~/.bash_profile
    HISTSIZE=450
    HISTFILESIZE=450

  7. 使用 HISTFILE 更改历史文件名称

    默认情况下,命令历史存储在 ~/.bash_history 文件中。添加下列内容到 .bash_profile 文件并重新登录 bash shell,将使用 .commandline_warrior 来存储命令历史:

    # vi ~/.bash_profile
    HISTFILE=/root/.commandline_warrior

  8. 使用 HISTCONTROL 从命令历史中剔除连续重复的条目

    在下面的例子中,pwd 命令被连续执行了三次。执行 history 后你会看到三条重复的条目。要剔除这些重复的条目,你可以将 HISTCONTROL 设置为 ignoredups:

    # pwd
    # pwd
    # pwd
    # history | tail -4
    44 pwd
    45 pwd
    46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above]
    47 history | tail -4
    # export HISTCONTROL=ignoredups
    # pwd
    # pwd
    # pwd
    # history | tail -3
    56 export HISTCONTROL=ignoredups
    57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above]
    58 history | tail -4

  9. 使用 HISTCONTROL 清除整个命令历史中的重复条目

    上例中的 ignoredups 只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups:

    # export HISTCONTROL=erasedups
    # pwd
    # service httpd stop
    # history | tail -3
    38 pwd
    39 service httpd stop
    40 history | tail -3
    # ls -ltr
    # service httpd stop
    # history | tail -6
    35 export HISTCONTROL=erasedups
    36 pwd
    37 history | tail -3
    38 ls -ltr
    39 service httpd stop
    [Note that the previous service httpd stop after pwd got erased]
    40 history | tail -6

  10. 使用 HISTCONTROL 强制 history 不记住特定的命令

    将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格:

  11. 使用 -c 选项清除所有的命令历史

    如果你想清除所有的命令历史,可以执行:

    # history -c

  12. 命令替换

    在下面的例子里,!!:$ 将为当前的命令获得上一条命令的参数:

    # ls anaconda-ks.cfg
    anaconda-ks.cfg
    # vi !!:$
    vi anaconda-ks.cfg

    补充:使用 !$ 可以达到同样的效果,而且更简单。[感谢 wanzigunzi 读者补充]

    下例中,!^ 从上一条命令获得第一项参数:

    # cp anaconda-ks.cfg anaconda-ks.cfg.bak
    anaconda-ks.cfg
    # vi -5 !^
    vi anaconda-ks.cfg

  13. 为特定的命令替换指定的参数

    在下面的例子,!cp:2 从命令历史中搜索以 cp 开头的命令,并获取它的第二项参数:
    < code>
    # cp ~/longname.txt /really/a/very/long/path/long-filename.txt
    # ls -l !cp:2
    ls -l /really/a/very/long/path/long-filename.txt

    下例里,!cp:$ 获取 cp 命令的最后一项参数:

    # ls -l !cp:$
    ls -l /really/a/very/long/path/long-filename.txt

  14. 使用 HISTSIZE 禁用 history

    如果你想禁用 history,可以将 HISTSIZE 设置为 0:

    # export HISTSIZE=0
    # history
    # [Note that history did not display anything]

  15. 使用 HISTIGNORE 忽略历史中的特定命令

    下面的例子,将忽略 pwd、ls、ls -ltr 等命令:

    # export HISTIGNORE=”pwd:ls:ls -ltr:”
    # pwd
    # ls
    # ls -ltr
    # service httpd stop
    # history | tail -3
    79 export HISTIGNORE=”pwd:ls:ls -ltr:”
    80 service httpd stop
    81 history
    [Note that history did not record pwd, ls and ls -ltr]

 

 

 

 


如果你经常使用Linux命令,那么使用history命令无疑会提升你的工作效率。
History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 。
1>History命令语法:
[test@linux]# history [n]
[test@linux]# history [-c]
[test@linux]# history [-raw] histfiles
参数:
  :数字,要列出最近的 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命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。
2>运行特定的历史命令
history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.
语法说明:
[test@linux]# [!number]  [!command] [!!]
参数说明:
number   :第几个指令的意思;
command  :指令的开头几个字母
       :上一个指令的意思!
3>History命令实战
列出所有的历史记录:
[test@linux] # history
只列出最近10条记录:
[test@linux] # history 10 (注,history和10中间有空格)
使用命令记录号码执行命令,执行历史清单中的第99条命令
[test@linux] #!99 (!和99中间没有空格)
重复执行上一个命令
[test@linux] #!!
执行最后一次以rpm开头的命令(!?  ?代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)
[test@linux] #!rpm
逐屏列出所有的历史记录:
[test@linux]# history | more
立即清空history当前所有历史命令的记录
[test@linux] #history -c
除了使用history命令,在 shell 或 GUI 终端提示下,你也可以使用上下方向键来翻阅命令历史(向下箭头会向前翻阅),直到你找到所需命令为止。这可以让我们很方便地编辑前面的某一条命令,而不用重复输入类似的命令。
History命令的用途确实很大!但需要小心安全的问题!尤其是 root 的历史纪录档案,这是黑客们的最爱!因为不小心的 root 会将很多的重要资料在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个档案被解析的话,后果不堪设想

 

 

linux shell提供了历史命令记录功能,通过对历史命令的调用,我们可以在shell提示符下节约大量的时间和命令输入。
  linux系统Shell历史命令默认保存在用户
主目录下的".bash_history"文件中。当然,我们也可以通过修改坏境变量"HISTFILE"来设置Linux Shell历史命令记录文件的路径,如在用户目录下的".bashrc"文件中的添加行"export HISTFILE=~/history/history.file",重新登录bash即生效。要查看Linux shell历史命令,我们可以直接在命令提升符下输入:

  1. history 

如果只是查看最近的10条历史命令,可以在命令提升符下输入:

  1. history 10 

  在linux系统的默认配置下,重复的历史命令都会存入".bash_history"文件。如果不希望在输入history命令查看历史命令时,看到连续重复的历史命令,我们可以在".bashrc"中加入下面两行:

  1. export HISTCONTROL=ignoreboth  
  2. shopt -s histappend 

其中第一行的命令的作用为“移除Linux shell命令历史记录中连续重复的文件”,第二行的作用为“shell 退出时,将shell 的历史记录附加到您的记录文件”。

更灵活的Linux Shell历史命令调用方法:

  除了使用history命令查看历史命令外,Linux系统还提供了非常灵活的Shell历史命令调用方法,我们可以在Shell命令提示符或者Shell脚本中使用它们:
  !!    前一条命令;
  !:0    不带参数的前一条命令名;
  !^    前一条命令的第一个参数;
  !:n    前一条命令的第n个参数;
  !$     前一条命令的最后一个参数;
  !*     前一条命令的所有参数,命令名除外;
  !n     第n条命令;
  !-n    倒数第n条命令;
  !str    最近一条以str开头的命令;
  !?str    最近一条包含str的命令;
  ^a^b  将上一条命令名中的a替换为b;
  !:gs/a/b 将上一条命令的所有a替换为b(包含命令名和参数)。

 

 

当然,有时候记错了命令就输入错误命令,系统也记录了,一两条到时没什么,但是多了,就看的眼花,所以我们要清除那些错误的,又要保存正确的命令,一下是看到网上的一个方法,感觉挺不错的。

一般情况下,删除命令记录的命令是"history -c",前提是命令大部分是记载与/root/.bash_history这个文件,所以你vi查看,就会发现,即使用了"history -c",你的命令还是记录在这个文件里,

[root@localhost   root]#   history   -c
[root@localhost   root]#   history
        1     history
[root@localhost   root]#   history
        1     history
        2     history
[root@localhost   root]#   history
        1     history
        2     history
        3     history
[root@localhost   root]#   vi   .bash_history
[root@localhost   root]#   history
        1     history
        2     history
        3     history
        4     vi   .bash_history
        5     history
[root@localhost   root]#
查看.bash_history,   里面仍然有:
mount   /dev/sda1   /mnt/usb
ls
cd   /mnt/usb
ls
umount   /mnt/usb
mount   /dev/sda1   /mnt/usb
umount   /mnt/usb
umount   /mnt/usb
umount   /mnt/usb
mount   /dev/sda1   /mnt/usb
mount   -t   msdos   /dev/floppy   /mnt/floppy
mount   -t   msdos   /mnt/floppy
gedit   /ect/fstab
gedit
mount   -t   msdos   /dev/fd0   /mnt/floppy
cd   /mnt/floppy
ls
umount   /mnt/floppy
umount   /mnt/floppy
umount   /mnt/usb
mount   -t   msdos   -o   iocharset=gb2312   /dev/sda1   /mnt/usb
umount   /mnt/usb
rpm   -qa|grep   gnome
...

所以,我们要想法子清除,自己history -man,查看相关参数如下:

 

通过查看   man   history,   得到帮助文件如下:
history   [n]
              history   -c
              history   -d   offset
              history   -anrw   [filename]
              history   -p   arg   [arg   ...]
              history   -s   arg   [arg   ...]
                            With   no   options,display the command  history  list   with   line   num-
                     
      bers. Lines  listed  with   have  been  modified.  An   argument   of
                           lists only the last n lines. If filename is   supplied,     it     is
                            used   as   the   name   of   the   history   file;   if   not,   the   value   of   HIST-
                            FILE   is   used.     Options,   if   supplied,   have     the     following     mean-
                            ings:
                            -c           Clear   the   history   list   by   deleting   all   the   entries.
                            -d   offset
                                          Delete   the   history   entry   at   position   offset.
                            -a           Append     the     ``new ' '   history   lines   (history   lines   entered
                                          since   the   beginning   of   the   current   bash   session)     to     the
                                          history   file.
                            -n           Read     the   history   lines   not   already   read   from   the   history
                                          file   into   the   current     history     list.       These     are     lines
                                          appended     to     the   history   file   since   the   beginning   of   the
                                          current   bash   session.
                            -r           Read   the   contents   of   the   history   file   and   use   them   as   the
                                          current   history.
                            -w           Write     the   current   history   to   the   history   file,   overwrit-
                                          ing   the   history   file 's   contents.
                            -p           Perform   history   substitution   on   the     following     args     and
                                          display     the     result     on     the     standard   output.     Does   not
                                          store   the   results   in   the   history   list.     Each   arg   must     be
                                          quoted   to   disable   normal   history   expansion.
                            -s           Store     the     args     in     the   history   list   as   a   single   entry.
                                          The   last   command   in   the   history   list     is     removed     before
                                          the   args   are   added.
                                                                                                                                                                                                                                                                                             
                            The     return     value   is   0   unless   an   invalid   option   is   encountered,
                            an   error   occurs   while   reading   or   writing   the     history     file,     an
                            invalid     offset   is   supplied   as   an   argument   to   -d,   or   the   history
                            expansion   supplied   as   an   argument   to   -p   fails.

解决步骤如下:
1.   建立一个文件来存储常用命令,   例如/root/history.txt,把常用命令当成文本写进去,每个命令占一行
2.   在终端运行history   -c,   清除杂乱的历史记录,  
3.   运行   history   -r   /root/history.txt   ,   把命令读进来作为当前bash的历史记录
4.   运行   history,   就得到一个整洁的命令列表了,   例如:
      [root@localhost   windata]#   history   -c
      [root@localhost   windata]#   history   -r   /root/history.txt
      [root@localhost   windata]#   history
        1     history   -r   /root/history.txt
        2     mount   -t   msdos   -o   iocharset=gb2312   /dev/sda1   /mnt/usb
        3     mount   -t   vfat   -o   iocharset-gb2312   /dev/hda5   /mnt/windata
        4     umount   /mnt/windata
        5     mount   -t   vfat   -o   iocharset-gb2312   /dev/hda5   /mnt/windata
        6     cd   /mnt/windata
        7     history
      [root@localhost   windata]#
5.   以后命令乱了,   重复1-4的步骤,   又可以使命令很清晰了

转载请注明:大步's Blog » 清除linux下history删除和调用

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap