1.  历史命令不会无休止的保存下去,默认的最大保存量为1000

    输入:echo $HISTSIZE

1000条profile文件中定义的,可以在里面修改保存数量。

/etc/profile用于整个系统所有用户, ~/.bash_profile, ~/.profile和~/.bashrc 用于各个用户,这里的"~"符号就是各当前用户的$HOME

 

2.有些历史命令可能是前几天的操作命令,前几天的命令不可能保存在当前内存中,所以保存在文件.bash_history中,只有退出后,历史命令才会从当前内存中保存到文件里.

      输入:ls -a


      然后: cat .bash_history可以看到历史命令


3.随机数:echo$RANDOM,但是随机数比较大,所以取80%80,就会随机80以内的数字了

         echo $RANDOM

         echo $[$RANDOM%80]

 

 

 

4.  保存你输入的命令历史。可以用它来重复执行命令。登录shell时,会读取命令历史文件中记录下的命令~/.bash_history 

登录进shell后,新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中。

5.  重复前一个命令,有4种方法:A.重复前一个命令使用上方向键,并回车执行。 B.!! 并回车执行。 C.输入!-1 并回车执行。 D.Ctrl+p 并回车执行。

6.  要重新调用前一个命令中最后一个参数:A  !$ 表示B  Esc+ .(点击Esc键后松开,然后点击. 键)  C  Alt+ .(按住Alt键的同时点击. 键)

7.  !字符串:   重复前一个以“字符串”开头的命令

8.  !?字符串重复前一个包含”字符串“的命令

9.!num:     按照history命令输出中的序号重复对应命令

10.!-n:       重复n个命令之前的那个命令

11.  使用up(向上)和down(向下)键来上下浏览从前输入的命令

12.  ctrl+r可以在命令历史中搜索命令,随便输入一个你印象中的几个字母,就可以找到这个文件。

13.调用历史参数:(cmd为命令)

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

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

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

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

 

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

#cmd !n:$     调用第n条命令的最后一个参数

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

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

 

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

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

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

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

14. history命令有三种用法

history [-c][-d offset] [n]  or  history -anrw[filename]   or   history-psarg[arg...]


-c: 清空命令历史 (清除的是内存中的历史命令,文件里的命令不会删除,如果想全部清除,首先删文件rm -f .bash_history然后在删命令           history -c)  (history -c 相当于HISTSIZE=0  ,把历史命令长度变为0,也是清内存,临时性的长度。想要永久性不记录历史,则需要nano .bash_history 更改里面的HISTSIZE=0)

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

#:    显示最近的#条历史

-a:   追加本次会话新执行的命令历史列表至历史文件(从内存里转到历史文件中)

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

-a -w 的区别:

在保存到非默认文件夹时有区别,history -a a.log  只是把缓存中的一些历史命令存到a.log文件里,history -w a.log 是把所有的命令(包括默认文件中的历史命令还有新的缓存命令)保存到a.log

-n:   读历史文件中未读过的行到历史列表(读未读过的并不重复的文件到历史文件中)

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

-n -r 的区别:

假如新用户在同一台电脑用同样的账户开了个终端(比如说克隆会话B端),在B 里输入会话,把B里新会话写到文件里,可以在B里看见历史命令,但是在A里却看不见,这个时候,在A里输入history -n,就会看见B里的新会话命令,但是这种命令删掉了一些重复命令,当你在A里输入history -r 的时候,就会看见A里的所有命令+B里的所有命令。

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

-s:   展开历史参数成一行,附加在历史列表后。(相当于伪造历史命令,但是命令不执行,相当于nano .bash_history ,在历史文件下面输入rm-rf/etc/passwd ,存盘退出,输入history -n  最后输入history   就会看到伪造的历史命令了

 

 

 

 

 

 

 

15.命令历史相关环境变量:

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

           [root@localhost ~]# echo $HISTSIZE

         1000

            其定义文件在/etc/profile,输入

          ~]# nano /etc/profile

         在其加入HISTSIZE=XXX,即可定义历史记录的条数

HISTFILE:指定历史文件,默认为~/.bash_history;可以更改文件,如下:

            nano .bash_profile

       输入:

            HISTFILE=/root/history/.log

            存盘退出,再exit退出系统,重新登录,输入echo$HISTFILE 后就显示新的文件目录

HISTFILESIZE:命令历史文件记录历史的条数;可修改,同HISTSIZE

HISTTIMEFORMAT显示历史列表时间(初始值为空),加入HISTTIMEFORMAT=”%F%T “,其历史列表中就会显示时间。 HISTTIMEFORMAT=”`hostname` %F %T “,加显主机名。存盘退出exit后,输入 cat history.log  时就会看到下面历史命令,表示距离197011日有多少秒的时间(等于date +%s

HISTIGNORE=str1:str2 忽略string1,string2历史,临时生效(HISTIGNORE=”passwd:echo*”   *代表后面跟任何东西都忽略了)

 

 

 

16.控制命令历史的记录方式:

环境变量:HISTCONTROL=

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

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

ignoreboth  ignoredups, ignorespace

erasedups:    删除重复命令(无论连续不连续,只要重复就删除)

export 变量名="值“

存放在/etc/profile ~/.bash_profile