Linux基础(2)--history命令




shell的特性之命令历史:

  1. bash保存的过去曾经执行过的命令的列表;

  2. 当前shell进程的保存在缓冲区中;

  3. 缓冲区中的命令会在shell退出时保存至文件中, 用户家目录中的 ~/.bash_history




history命令

[root@centos6 ~]# history
    1  ifconfig
    2  shutdown -h now
    3  df
    4  cd /media/VMware\ Tools/
    5  ls
    6  cd VMwareTools-9.6.1-1378637.tar.gz 
    7  cp VMwareTools-9.6.1-1378637.tar.gz /testdir/
    8  cd /testdir/
    9  ls /var.
    ..............
    218  shutdown -c 
    219  whatis history
    220  whatis whereis
    221  whatis which
    222  passwd
    223  shutdown -r now
    224  history

以上可以看出:在命令行中我们键入history命令,可以显示我们曾经执行过的命令




对于命令行历史,我们可以使用一些快捷键对其进行操作

1、!#: #为命令历史列表中的命令编号;可用执行第#条命令;

[root@centos6 ~]# !5 等同于 [root@centos6 ~]# ls

2、!!: 执行上一条命令;

[root@centos6 ~]# !! 等同于 [root@centos6 ~]# history

3、!-#: 执行命令历史列表中的倒数第#条命令;

[root@centos6 ~]# !-3 等同于 [root@centos6 ~]# passwd

4、!string: 执行命令历史列表中的最近一次以string开头的命令;

[root@centos6 ~]# !shut 等同于 [root@centos6 ~]# shutdown -h now

5、!?string:执行迷路历史列表中的最近一次包含string字符串的命令;

[root@centos6 ~]# !?sswd 等同于 [root@centos6 ~]# passwd

6、!$: 引用上个命令的最后一个参数,等同于 ESC, .

7、可以使用up(向上)和down(向下)键来上下浏览从前输入的命令

8、按Ctrl+p 并回车执行前一个命令




调用历史参数的方法:

1、#cmd !^ : 利用上一个命令的第一个参数做cmd的参数

2、#cmd !$ : 利用上一个命令的最后一个参数做cmd的参数

3、#cmd !* : 利用上一个命令的全部参数做cmd的参数

4、#cmd !:n : 利用上一个命令的第n个参数做cmd的参数

5、#!n:^ 调用第n条命令的第一个参数

6、#!n:^ 调用第n条命令的第一个参数

7、#!m:n 调用第m条命令的第n个参数

8、#!n:* 调用第n条命令的所有参数

9、#!string:^ 从命令历史中搜索以string 开头的命令,并获取它的第一个参数

10、#!string:$ 从命令历史中搜索以string 开头的命令,并获取它的最后一个参数

11、#!string:n 从命令历史中搜索以string 开头的命令,并获取它的第n个参数

12、#!string:* 从命令历史中搜索以string 开头的命令,并获取它的所有参数

13、键入ctrl-r来在命令历史中搜索命令




history命令常用选项:

    history [-c] [-d offset] [n]

   history -anrw[filename]

   history -psarg[arg...]

        -c: 清空命令历史

                [root@centos6 log]# history -c                
                [root@centos6 log]# history
                    1  history

        -d: 删除历史中指定的命令;

        #: 显示最近的#条历史

        -a: 追加本次会话新执行的命令历史列表至历史文件

        -n: 读历史文件中未读过的行到历史列表

        -r: 读历史文件附加到历史列表

        -w: 保存历史列表到指定的历史文件

        -p: 展开历史参数成多个行,但不存在历史列表中

        -s: 展开历史参数成一行,附加在历史列表后




history命令历史相关的环境变量

1、HISTSIZE:命令历史记录的条数;

2、HISTFILE:指定历史文件,默认为~/.bash_history;

3、HISTFILESIZE:命令历史文件记录历史的条数;

4、HISTTIMEFORMAT=“%F %T“ 显示时间

5、HISTIGNORE=“str1:str2:… “ 忽略string1,string2历史

6、控制命令历史的记录方式:

    环境变量:HISTCONTROL

        ignoredups:忽略重复的命令;连续且相同方为“重复”

        ignorespace:忽略所有以空白开头的命令

        ignoreboth:ignoredups, ignorespace

        erasedups:删除重复命令

[root@centos6 ~]# echo $HISTSIZE
1000
[root@centos6 ~]# echo $HISTFILE
/root/.bash_history
[root@centos6 ~]# echo $HISTFILESIZE
1000
[root@centos6 ~]# echo $HISTTIMEFORMAT

[root@centos6 ~]# HISTTIMEFORMAT="%F %T "
[root@centos6 ~]# echo $HISTTIMEFORMAT
%F %T
[root@centos6 ~]# echo $HISTIGNORE

[root@centos6 ~]# echo $HISTCONTROL
ignoredups
[root@centos6 ~]# history
    1  2016-07-27 06:43:03 history
    2  2016-07-27 06:44:27 cd
    3  2016-07-27 06:44:34 echo $HISTORY
    4  2016-07-27 06:44:42 echo $HISTSIZE
    5  2016-07-27 06:44:47 echi $HISTFILE
    6  2016-07-27 06:44:55 echo $HISTSIZE
    7  2016-07-27 06:45:01 echo $HISTFILE
    8  2016-07-27 06:45:10 echo $HISTFILESIZE
    9  2016-07-27 06:45:33 echo $HISTTIMEFORMAT
   10  2016-07-27 06:45:53 HISTTIMEFORMAT="%F %T "
   11  2016-07-27 06:45:59 echo $HISTTIMEFORMAT
   12  2016-07-27 06:46:21 echo $HISTIGNORE
   13  2016-07-27 06:46:47 echo $HISTCONTROL
   14  2016-07-27 06:47:06 history


上述环境变量存放在/etc/profile 或~/.bash_profile