一天一命令-history

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一天一命令-history相关的知识,希望对你有一定的参考价值。

一天一命令-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],互相交流。


本文出自 “rackie” 博客,请务必保留此出处http://rackie386.blog.51cto.com/11279229/1930590

以上是关于一天一命令-history的主要内容,如果未能解决你的问题,请参考以下文章

一天一命令-ls

一天一命令-xargs

一天一命令-crontab

一天一命令-screen

一天一命令-sed

一天一点MySQL复习——存储过程