命令行历史
当执行命令后,系统默认会在内存记录执行过的命令
当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_history
登录shell时,会读取命令历史文件中记录下的命令加载到内存中
登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史文件中
利用命令历史。可以用它来重复执行命令,提高输入效率
1. 命令:history
history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
2. 常用选项
选项 |
说明 |
-c |
清空命令历史 |
-d offset |
删除历史中指定的第 offset 个命令 |
n |
显示最近的 n 条历史 |
-a |
追加本次会话新执行的命令历史列表至历史文件 |
-r |
读历史文件附加到历史列表 |
-w |
保存历史列表到指定的历史文件 |
-n |
读历史文件中未读过的行到历史列表 |
-p |
展开历史参数成多行,但不存在历史列表中 |
-s |
展开历史参数成一行,附加在历史列表后 |
3. 命令历史相关环境变量
变量 |
说明 |
HISTSIZE |
命令历史记录的条数 |
HISTFILE |
指定历史文件,默认为~/.bash_history |
HISTFILESIZE |
命令历史文件记录历史的条数 |
HISTTIMEFORMAT="%F %T $(whoami) " |
显示时间和用户 |
HISTIGNORE="str1:str2*:..." |
忽略str1命令,str2开头的历史 |
HISTCONTROL |
控制命令历史的记录方式 ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复” ignorespace 忽略所有以空白开头的命令 ignoreboth 相当于ignoredups, ignorespace的组合 erasedups 删除重复命令 |
4. 持久保存变量
以上变量可以 export 变量名=“值” 形式存放在 /etc/profile 或 ~/.bash_profile
示例
[root@centos ~]#cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "
[root@centos ~]#
[root@centos /]#history 5
123 2021-03-25 15:52:15 cd ~
124 2021-03-25 15:52:16 pwd
125 2021-03-25 15:52:18 cd /
126 2021-03-25 15:52:19 pwd
127 2021-03-25 15:52:30 history 5
[root@centos /]#
5. 调用命令行历史
# 重复前一个命令方法
重复前一个命令使用上方向键,并回车执行
1. 按 !! 并回车执行
2. 输入!-1 并回车执行
3. 按 Ctrl+p 并回车执行
使用up(向上)和down(向下)键来上下浏览从前输入的命令
ctrl-r来在命令历史中搜索命令
(reverse-i-search)`’:
Ctrl+g:从历史搜索模式退出
header 1 |
header 2 |
!:0 |
执行前一条命令(去除参数) |
!n |
执行history命令输出对应序号n的命令 |
!-n |
执行history历史中倒数第n个命令 |
!string |
重复前一个以“string”开头的命令 |
!?string |
重复前一个包含string的命令 |
!string:p |
仅打印命令历史,而不执行 |
!$:p |
打印输出 !$ (上一条命令的最后一个参数)的内容 |
!*:p |
打印输出 !*(上一条命令的所有参数)的内容 |
^string |
删除上一条命令中的第一个string |
^string1^string2 |
将上一条命令中的第一个string1替换为string2 |
!:gs/string1/string2 |
将上一条命令中所有的string1都替换为string2 |
# 要重新调用前一个命令中最后一个参数,三种方式
1. !$ # 表示前一个命令中最后一个参数
2. Esc, . # 点击Esc键后松开,然后点击 . 键
3. Alt+ . # 按住Alt键的同时点击 . 键
header 1 |
header 2 |
command !^ |
用上一个命令的第一个参数做command的参数 |
command !$ |
利用上一个命令的最后一个参数做command的参数 |
command !* |
利用上一个命令的全部参数做command的参数,如 ls !* |
command !:n |
利用上一个命令的第n个参数做command的参数 |
command !n:^ |
调用第n条命令的第一个参数 |
command !n:$ |
调用第n条命令的最后一个参数 |
command !n:m |
调用第n条命令的第m个参数 |
command !n:* |
调用第n条命令的所有参数 |
command !string:^ |
从命令历史中搜索以 string 开头的命令,并获取它的第一个参数 |
command !string:$ |
从命令历史中搜索以 string 开头的命令 ,并获取它的最后一个参数 |
command !string:n |
从命令历史中搜索以 string 开头的命令,并获取它的第n个参数 |
command !string:* |
从命令历史中搜索以 string 开头的命令 ,并获取它的所有参数 |