命令行历史详解
bash在用用户登录时,会加载命令历史文件~/.bash_history ,将其加载至内存,退出时会将 内存中的命令“追加”到历史文件中。
命令历史查看:history
格式: history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
-c: 清空命令历史
-d: 删除历史中指定的命令;
#: 显示最近的#条历史
-a: 追加本次会话新执行的命令历史列表至历史文件
-n: 读历史文件中未读过的行到历史列表
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-p: 展开历史参数成多个行,但不存在历史列表中
-s: 展开历史参数成一行,附加在历史列表后(伪造记录,未执行但直接写入记录中)
命令历史操作:
使用up(向上)和down(向下)键来上下浏览从前输入的命令
键入ctrl-r来在命令历史中搜索命令( reverse-i-search) `’:
命令参数调用:
要重新调用前一个命令中最后一个参数: !$ 表示 ($ 在linux中表示结尾)
Esc +.(点击Esc键后松开,然后点击 . 键)
或者:
Alt + .(按住Alt键的同时点击 . 键) (本机时有效,ssh时可能会失效,快捷键被占 用)
新命令command 调用历史命令参数
command :
!^ : 利用上一个命令的第一个参数做cmd的参数
!$ : 利用上一个命令的最后一个参数做cmd的参数
!* : 利用上一个命令的全部参数做cmd的参数
!:n : 利用上一个命令的第n个参数做cmd的参数
eg: touch 1 2 3 4 5
ls !^ ---> ls 1
调用第N条历史命令参数:
!n:^ 调用第n条命令的第一个参数
!n:$ 调用第n条命令的最后一个参数
!m:n 调用第m条命令的第n个参数
!n:* 调用第n条命令的所有参数
搜索并调用命令参数:
!string:^ 从命令历史中搜索以 string 开头的命令,并获取
它的第一个参数
!string:$ 从命令历史中搜索以 string 开头的命令,并获取它
的最后一个参数
!string:n 从命令历史中搜索以 string 开头的命令,并获取
它的第n个参数
!string:* 从命令历史中搜索以 string 开头的命令,并获取
它的所有参数
history配置:
即使且临时生效: 直接在bash中改变变量的值即可
永久生效:
写入/etc/profile 或 ~/.bash_profile(注意参照文件内格式改写)
HISTSIZE:命令历史记录的条数;(默认是1000)
HISTFILE:指定历史文件,默认为~/.bash_history;
HISTFILESIZE:命令历史文件记录历史的条数;
HISTTIMEFORMAT=“%F %T“ 显示时间
HISTIGNORE=“str1:str2:… “ 忽略string1,string2历史
控制命令历史的记录方式:
环境变量: HISTCONTROL
ignoredups:忽略重复的命令;连续且相同方为“重复”
ignorespace:忽略所有以空白开头的命令 (部分不希望被记录的命令,可用这个方法,在执 行的命令前加空格以隐藏)
ignoreboth: ignoredups, ignorespace
erasedups:删除重复命令