Linux 上运行shell命令,系统会记录一定数量的命令,使用history命令可以快速查找到之前使用过的某个历史命令,并快速运行这条命令。
常用的history功能
1)列出历史命令
输入history即可,默认最多1000条,后面介绍如果修改条数。
[root@localhost ~]# history
78 vi server.xml
79 pwd
80 vi server.xml
81 cd ../
82 ls
83 cat database-init-sql-list.txt
84 ls
85 cd webapps/
86 ls
87 cd website-webapp/
88 ls
89 cd ../../
90 ls
91 cd database
只显示最近运行的10条命令
[root@localhost ~]# history 10
1069 find / name=template
1070 cd /root/hbk/
1071 ps -ef|grep java
1072 kill -9 2523
1073 cd tomcat-8061-publishweb/webapps/
1074 ../bin/startup.sh
1075 tailf ../logs/catalina.out
1076 cd
1077 history
1078 history 10
2)运行某条历史命令
从上面可以看到每一条历史命令都有一个编号,运行某条历史命令,只需要执行!编号
即可。最后一条可以使用!!
运行。
[root@localhost ~]# !1071
ps -ef|grep java
root 5175 1 1 09:44 pts/2 00:01:19 java -Djava.util.logging.config.file=/root/hbk/tomcat6-8079-manageweb/conf/logging.properties -server -Xms512m -Xmx1024m -XX:PermSize=512M -XX:MaxPermSize=1024m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/root/hbk/tomcat6-8079-manageweb/endorsed -classpath /root/hbk/tomcat6-8079-manageweb/bin/bootstrap.jar -Dcatalina.base=/root/hbk/tomcat6-8079-manageweb -Dcatalina.home=/root/hbk/tomcat6-8079-manageweb -Djava.io.tmpdir=/root/hbk/tomcat6-8079-manageweb/temp org.apache.catalina.startup.Bootstrap start
root 5502 1 1 09:48 pts/1 00:01:24 java -Djava.util.logging.config.file=/root/hbk/tomcat-8061-publishweb/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms512m -Xmx1024m -XX:PermSize=512M -XX:MaxPermSize=1024m -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/root/hbk/tomcat-8061-publishweb/endorsed -classpath /root/hbk/tomcat-8061-publishweb/bin/bootstrap.jar:/root/hbk/tomcat-8061-publishweb/bin/tomcat-juli.jar -Dcatalina.base=/root/hbk/tomcat-8061-publishweb -Dcatalina.home=/root/hbk/tomcat-8061-publishweb -Djava.io.tmpdir=/root/hbk/tomcat-8061-publishweb/temp org.apache.catalina.startup.Bootstrap start
root 15464 1949 0 11:56 pts/1 00:00:00 grep --color=auto java
3)显示历史命令执行时间戳
加上时间和用户
export HISTTIMEFORMAT="%F %T `whoami` "
显示如下:
[root@localhost ~]# history 10
1085 2019-01-03 12:01:23 root cd hbk/
1086 2019-01-03 12:01:24 root ls
1087 2019-01-03 12:01:43 root vi .bashrc
1088 2019-01-03 13:38:15 root export HISTTIMEFORMAT="%F %T `whoami`"
1089 2019-01-03 13:38:18 root history
1090 2019-01-03 13:38:34 root export HISTTIMEFORMAT="%F %T `whoami` "
1091 2019-01-03 13:38:36 root history
1092 2019-01-03 13:39:51 root export HISTTIMEFORMAT="%F %T `whoami` "
1093 2019-01-03 13:39:52 root cd
1094 2019-01-03 13:39:57 root history 10
也可以进一步添加ip
[root@localhost ~]# who -u am i
root pts/1 2019-01-03 09:06 . 1949 (192.168.8.133)
想办法拿到192.168.8.133地址
[root@localhost ~]# who -u am i 2>/dev/null
root pts/1 2019-01-03 09:06 . 1949 (192.168.8.133)
使用awk进行提取
[root@localhost ~]# who -u am i 2>/dev/null|awk '{print $NF}'
(192.168.8.133)
NF其实是number of field, 即整行域的总数,print就是打印最后一个域
NF是指awk正在处理的记录包含几个域(字段),这于域分隔符有关,默认为空
%F 完整日期格式,等价于 %Y-%m-%d
%T 时间,等于%H:%M:%S
写在配置文件中,使之永久生效
编辑 /etc/profile
USER_IP=`who -u am i 2>/dev/null|awk '{print $NF}'`
export HISTTIMEFORMAT="[%F %T `whoami` $USER_IP]"
[root@localhost ~]# source /etc/profile
效果:
[root@localhost ~]# history 5
1097 [2019-01-03 13:43:11 root (192.168.8.133)]who -u am i 2>/dev/null
1098 [2019-01-03 13:44:26 root (192.168.8.133)]who -u am i 2>/dev/null|awk '{print $NF}'
1099 [2019-01-03 13:47:17 root (192.168.8.133)]vi /etc/profile
1100 [2019-01-03 13:50:21 root (192.168.8.133)]source /etc/profile
1101 [2019-01-03 13:50:40 root (192.168.8.133)]history 5
4)修改历史记录保留的条目
默认显示1000条记录,如果想增大,可以修改HISTSIZE环境变量,同理,要永久生效的话,需要写入配置文件中。
默认是1000,如下所示
[root@localhost ~]# echo $HISTSIZE
1000
也可以直接使用vi,如下通过sed替换s参数,技巧嘿嘿
[root@localhost ~]# sed -i 's/^HISTSIZE=1000/HISTSIZE=2000/' /etc/profile
[root@localhost ~]source /etc/profile //使其立即生效
5)清空历史命令记录
执行history -c将清空历史命令记录
[root@localhost ~]# history -c
[root@localhost ~]# history
108 [2019-01-03 14:04:23 root (192.168.8.133)]history