一天一命令-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.(显示或者处理命令历史)
help history info history man bash
history命令格式和选项3种:
history [-c] [-d offset] [n] history -anrw [filename] history -ps arg [arg...] n:显示最近的n条命令 -c:清空当前的命令历史记录 -d offset:删除历史中指定的第几条命令 -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列命令或参数)
搜索历史命令:Ctrl+r,退出Ctrl+g
重新调用前一个命令中的最后一个参数:!$ ; Esc,.(按Esc松开再按.键);Alt+.(按住Alt同时按.键)
!string:p 仅打印出最近的以字符串开头的命令历史而不执行
!$:p 打印输出!$(即上一条命令的最后一个参数)的内容
!*: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 -d 4 //删除第4条命令,后续命令会自动往前补充 #history 4 //显示最近的4条命令 #history -p `pwd` `ls` //执行命令但不保存在历史列表中 #history -s "rm -rf aaa" //不执行命令,只是将命令追加到历史列表中 #!ls //执行以ls开头的命令 ls /home/ abc/ usera/ #!?init //执行包含init的命令 ls /etc/init.d/ functions netconsole network README #!l:p //仅打印出以l开头的命令而不执行 ls /etc/init.d :p #id -u usera 1000 #^usera^root //参数替换 id -u root 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 export HISTTIMEFORMAT=‘%F %T ‘ 彻底清空命令历史 rm -rf .bash_history history -c exit
此文章为个人学习总结,如有任何问题,可发送邮件至[email protected],互相交流。