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 时就会看到下面历史命令,表示距离1970年1月1日有多少秒的时间(等于date +%s)
HISTIGNORE=“str1:str2“ 忽略string1,string2历史,临时生效(HISTIGNORE=”passwd:echo*” *代表后面跟任何东西都忽略了)
16.控制命令历史的记录方式:
环境变量:HISTCONTROL=
ignoredups: 忽略重复的命令;(连续且相同方为“重复”)
ignorespace: 忽略所有以空白开头的命令
ignoreboth: ignoredups, ignorespace
erasedups: 删除重复命令(无论连续不连续,只要重复就删除)
export 变量名="值“
存放在/etc/profile 或~/.bash_profile