一天一命令-history
系统软硬件环境平台:
VMware Workstation Pro 12.5.5 build-5234757
CentOS Linux release 7.3.1611
软件版本:bash --version
GNU bash,version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
测试时间:2017年5月29日
history-Display or manipulate the history list.(显示或者处理命令历史)
helphistory infohistory manbash
history命令格式和选项3种:
history[-c][-doffset][n] history-anrw[filename] history-psarg[arg...] n:显示最近的n条命令 -c:清空当前的命令历史记录 -doffset:删除历史中指定的第几条命令 -a:追加本次会话中新执行的命令列表到历史文件.bash_history中 -n:读历史文件中未读过的行到历史列表 -r:读取历史文件附加到当前会话的历史列表(与-a相对) -w:保存历史列表到指定的历史文件中 -p:展开历史参数成多行,但不保存在历史列表中 -s:展开历史参数成一行,附加在历史列表后
快捷键搜索匹配
执行上一个命令:向上方向键;按!!;输入!-1;多次按Ctrl+p重复显示之前的命令(同向上方向键)
执行下一个命令:向下方向键;或多次按Ctrl+n
执行历史中的某条命令:!n !22
执行倒数第n个命令:!-n !-4
执行最近的以字符串开头的命令:!keyword !service
执行最近的包含关键字的命令:!?keyword !?share
执行上一条命令的第n列命令或参数,常用于写脚本:!:n(!:0执行第0列命令,!:1执行第1列命令或参数)
重新调用前一个命令中的最后一个参数:!$ ; Esc,.(按Esc松开再按.键);Alt+.(按住Alt同时按.键)
!string:p 仅打印出最近的以字符串开头的命令历史而不执行
^string 删除上一条命令中的第一个string
^string1^string2 将上一条命令中的string1替换为string2
!:gs/string1/string2 将上一条命令中的所有的string1都替换为string2
调用历史参数
cmd !^ 利用上一条命令的第一个参数作为当前cmd的参数
cmd !$ 利用上一条命令的最后一个参数作为当前cmd的参数
cmd !* 利用上一条命令的全部参数作为当前cmd的参数
cmd !:n 利用上一条命令的第n个(列)参数作为当前cmd的参数
cmd !n:^ 调用第n条命令的第一个参数
cmd !n:$ 调用第n条命令的最后一个参数
cmd !n:m 调用第n条命令的第m个参数
cmd !n:* 调用第n条命令的所有参数
cmd !string:^ 从命令历史中搜索以string开头的命令,并获取它的第一个参数
cmd !string:$ 从...最后一个参数
cmd !string:n 从...第n个参数
cmd !string:* 从...所有参数
命令历史相关环境变量
HISTSIZE:命令历史记录的条数,定义大小的文件为/etc/profile
HISTFILE:指定命令历史文件,默认为~/.bash_history,注销后系统自动将history命令列表写入此文件中
HISTFILESIZE:上面指定的命令历史文件所记录的条数
HISTTIMEFORMAT='%F %T ':显示命令执行的时间
HISTIGNORE="str1:str2:...":忽略str1:str2:..的命令历史,也可以加*号模糊匹配,如hostname*:pwd
HISTCONTROL:命令历史控制变量,ignoredups默认,ignorespace忽略空白开头,ignoreboth前两个,erasedups删除重复命令
案例:
#history #wc-l.bash_history #history-c//清除命令历史,但不清除.bash_history文件内容 #history-d4//删除第4条命令,后续命令会自动往前补充 #history4//显示最近的4条命令 #history-p`pwd``ls`//执行命令但不保存在历史列表中 #history-s"rm-rfaaa"//不执行命令,只是将命令追加到历史列表中 #!ls//执行以ls开头的命令 ls/home/ abc/usera/ #!?init//执行包含init的命令 ls/etc/init.d/ functionsnetconsolenetworkREADME #!l:p//仅打印出以l开头的命令而不执行 ls/etc/init.d:p #id-uusera 1000 #^usera^root//参数替换 id-uroot 0 #ll/etc/issue #cat!$ file(按键Esc,.)//命令显示为file/etc/issue,即调用上一条命令的参数 #ls-l/home/usera #!:0//显示第0列的命令 ls #!:2//显示第2列的参数 /home/usera 临时生效 echo$HISTTIMEFORMAT HISTTIMEFORMAT='%F%T' 永久生效 将定义的环境变量写入/etc/profile或~/.bash_profile中 vi~/.bash_profile exportHISTTIMEFORMAT='%F%T' 彻底清空命令历史 rm-rf.bash_history history-c exit