history附上时间戳,history命令_Linux history命令:查看和执行历史命令
起因是这样的,一台机器客户反馈连接不上,说没有任何操作。好吧,排查吧。
1.第一步先看网络是否通:
从图中可以看到一开始是一直不通的。然后就通了,问了客户有没操作重启什么的结果说没有任何操作,还让给个解释!心酸
2.跟客户拿了账号密码进去检查下吧。
进去肯定先看日志啊什么的。结果没发现有啥有用的。再看历史执行命令吧:
重大发现,发现我执行的查看日志命令之前有一个reboot的执行命令。但是没有时间不好判断,咋办呢
3.给history历史记录附上时间戳
[root@localhost ~]# export HISTTIMEFORMAT='%F %T '
4.再次查看:
看看是不是已经给命令打上了时间的烙印了。
虽然时间戳出现了,但还有两个问题困扰着我们:
- 系统是怎么知道我们在什么时间执行了哪些命令呢?
- 有没有发现,输出内容中的前 10多 条命令的时间戳竟然是完全一样的,都是“2019-07-06 00:46:53”,这又是为什么呢?
我们先来重新登录一下系统,然后输入下面的命令,一起来寻找问题的答案:
[root@localhost ~]# cat .bash_history
vi /etc/sysconfig/selinux
df -h
free
cat /etc/redhat-release
w
pkill -kill -t tty1
w
exit
passwd
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
Bt-Panel: http://58.229.206.112:8888/08ded132
username: gza1tbn2
password: ab2399e5
reboot
ls
#1562345281
tail -20 /var/log/messages
#1562345322
date
#1562345342
tail -250 /var/log/messages
#1562345346
tail -50 /var/log/messages
#1562345616
cat /etc/redhat-release
#1562345857
w
#1562346343
tail /var/log/messages
#1562346350
tail 100 /var/log/messages
#1562346363
tail 50 /var/log/messages
#1562346378
date
#1562346398
cat /var/log/messages
看到文件中的“#1562345281”这种格式的字符串了吗?这些就是命令执行的时间戳,通过这些标记,history 就能正确显示命令的执行时间了。
为什么前 10多条命令的时间戳是一样的呢?这是因为这些命令执行时没有开启“时间戳记录功能”,在后面需要显示时间戳时,它们只能取距离它们最近的有时间记录的那个时间点作为它们的时间戳。这也就是前 10来 条命令所显示的时间戳都是同一个时间点的原因。
重复上一次的执行
平时大家最常遇到的一个场景应该是“想重复执行上一条命令”,对于这种情况,我们首先想到的方法就是按“上方向键”,但其实我们有四种方法可以实现这一效果:
- 使用向上方向键,并回车执行。
- 输入 !!,并回车执行。
- 输入 !-1,并回车执行。
- 输入 Ctrl+P 组合键并回车执行。
叹号定位法
如果想执行以前执行过的某条命令,该怎么办呢?这也是一种经常会遇到的情况,下面我们就一起来看看:
[roc@roclinux ~]$ history
7 ls
8 vi test.go
9 ls
10 history
11 export HISTTIMEFORMAT='%F %T'
12 histroy
13 export HISTTIMEFORMAT='%F %T'
14 history
15 export HISTTIMEFORMAT=
16 man grep
17 ls
18 ll
19 history
看到 man grep了吗?假设这条命令就是你想执行的命令,你可以先记下它前面的标号 16,然后这样来执行:
[roc@roclinux ~]$ !16
Ctrl+R 搜索曾经的命令
上面的叹号定位法虽然好用,但有个缺点,就是不太方便,这个方法需要我们先找出命令的编号,然后才能执行。下面,我们再为大家介绍一种更方便的方法,那就是“搜索定位法”。
搜索定位法,就是通过 Ctrl+R 来实现历史命令关键字的搜索功能,快速查找到要执行的命令并执行。
下面,同学们可以尝试一下,在你们的 Shell 中按一下 Ctrl+R 组合键,是不是会出现下面的提示:
(reverse-i-search)`':
然后输入一些关键字,比如“man”:
(reverse-i-search)`man': man grep
系统是不是就找到 man grep 这条历史命令了,如果这条命令正是你想要执行的,那么就直接回车,命令就会立即执行了。
注意:如果找到的命令和想执行的命令稍微有点不同的话,你可以按一下向左或向右方向键来对命令进行微调,等调整成你想要执行的命令后,再按回车执行。
清除所有的命令
安全是计算机世界里的头等大事,出于安全的考虑,我们常常需要清除曾经输入的命令,避免被其他别有用心的人看到。这种情况下,我们就要用 -c 选项来帮忙了。
[roc@roclinux ~]$ history -c
-c
表示 clear,只要一执行,那么我们的历史命令列表瞬间就变得一干二净了,曾经的历史命令统统不见了,这样我们就再也不用担心信息泄露了。
其实,你想删除历史记录可没那么容易,上面的方法其实只是个障眼法,它只是让系统暂时不显示历史命令。当你再次重新登录系统后,以前的历史就又会重新出现。
我们试了一下,确实是这样子的,这到底是怎么一回事呢?
事情的真相是这样的:history-c 命令删除的只是 Linux 系统内存中的历史命令,当 Shell 退出时,就不会有历史命令追加到文件 .bash_history 中。但当重新登录到 Shell 时,Shell 便会加载文件 .bash_history,该文件中存储着曾经输入的历史命令,因此,系统的历史命令就又出现了。
那么如何真正彻彻底底地删除所有的历史命令呢?我们可以采用以下方法。
[roc@roclinux ~]$ history -c
[roc@roclinux ~]$ history -w
history-w 的作用就是用内存中的历史命令覆盖 .bash_histroy 文件的内容,这样,即使 Shell 重新加载也加载不到任何命令了,因为此时 .bash_history 文件中已经空空如也了。
history的配置
工欲善其事,必先利其器,科学地配置 history 命令,可以大大提高我们的工作效率,下面我们就来看看 history 都有哪些配置项。
(1) 设置历史记录的时间:
export HISTTIMEFORMAT='%F %T ' # 注意有个空格, 这样在显示时日期与命令之间会有空格分隔
(2) 控制历史命令记录的总个数:
export HISTSIZE=1000 # 设置内存中的history命令的个数
export HISTFILESIZE=1000 # 设置文件中的history命令的个数
(3) 更换历史命令的存储位置:
一般情况下,历史命令会被存储在 ~/.bash_history 文件中。如果不想存储在这个文件中,而想存储在其他文件中,那么可以通过下面的方式来更改:
export HISTFILE=~/history.log
(4) 还有很多更加个性化的配置供大家选择:
export HISTCONTROL=erasedups # 清除整个命令历史中的重复条目
export HISTCONTROL=ignoredups # 忽略记录命令历史中连续重复的命令
export HISTCONTROL=ignorespace # 忽略记录空格开始的命令
export HISTCONTROL=ignoreboth # 等价于ignoredups和ignorespace
尊重重要命令的隐私
试想一下,我们操作 Linux 系统,如果把所有的命令都记录到 .bash_history 中,会不会有风险呢?
当然有风险啦,如果哪一天我们不幸中招,黑客攻入了我们的系统,他只要查看一下 history 就能知道我们的很多秘密,比如一些登录密码。为了避免该类事情的发生,我们希望 history 不要显示含有隐私信息的历史命令,只显示不含有隐私信息的命令。这个需求太个性化,但 history 仍然能够实现,下面我们就为大家介绍两种行之有效的解决方案。
第一种靠谱的解决方案:
- 第1步:设置 HISTCONTROL 环境变量:export HISTCONTROL=ignorespace。
- 第2步:输入重要命令时,记得在输入命令前加上空格。
- 第3步:执行 history,可以看到刚输入的重要命令没有出现在 history 中。
通过设置 HISTCONTROL=ignorespace,可以让 history 不记录你的特殊输入(命令前加空格),这样可以在一定程度上有效地保护我们的系统。
第二种靠谱的解决方案:
- 第1步:设置 HISTIGNORE 环境变量 export HISTIGNORE=*。
- 第2步:输入重要命令,比如 mysql-uroot-p123。
- 第3步:查看你的 history,可以看到刚输入的 mysql 命令没有记录在 history 中。
- 第4步:恢复命令的记录 export HISTIGNORE=。
- 第4步后,系统又恢复正常,输入的命令又能被正常记录了。
这个方法虽然略显烦琐,需要你每次在输入重要命令时都要先设置 HISTIGNORE=*,执行完命令后再设置 HISTIGNORE=,但是,这种方法能规避由于你的粗心大意(忘记命令前加空格)带来的巨大安全隐患,确保机密信息不会被泄露出去。
参考链接:http://c.biancheng.net/linux/history.html
history附上时间戳,history命令_Linux history命令:查看和执行历史命令的更多相关文章
- Linux 快速执行历史命令,用 !编号
例如: history | grep mysql 使用 !914 可以快速执行上述命令:
- ssh伪登陆执行远程主机脚本命令 C程序基于ssh passwordless执行远程主机命令及基于配置文件的验证伪登陆执行命令
1,基于有密码及免秘钥在远程主机上执行命令及脚本 ssh -T ip "CLI or shell.sh"; 2,C程序实现上述功能--基于password-less
- 【转】Linux中history历史命令使用方法详解
原文网址:http://os.51cto.com/art/201205/335040.htm 当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效 ...
- Linux中history历史命令使用方法详解
当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升.事实上,一旦你掌 握了我在下面给出的15个有关Linux history历史命 ...
- Linux中的历史命令
Linux中的历史命令一般保存在用户 /root/.bash_history history 选项 历史命令保存文件夹 选项 -c:清空历史命令 -w :把缓存中的历史命令写入历 ...
- linux 历史命令用法(转)
许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...
- [Shell]Bash基本功能:历史命令 & 别名 & Bash快捷键
/*----------------------------------------------------------------------------------------------- @黑 ...
- 教你一些Linux中隐藏bash历史命令的小技巧
导读 如果你登录过 Linux 系统,并敲过一些命令,那你应该知道,bash history 会记录你输入的所有命令.这个操作其实是有一定风险的. 我个人经常使用 Linux,所以我想着研究一番,看看 ...
- shell基础之脚本执行,命令别名以及快捷键等
脚本执行方式 比如我们在/root/下编写了一个脚本,名字为hello.sh.那么怎么调用执行它呢?有两种办法: (1)直接通过bash,如下: bash hello.sh 注:采用bash执行脚本 ...
随机推荐
- Kafka Eagle 管理平台
Kafka-Eagle简介 源代码地址:https://github.com/smartloli/kafka-eagle Kafka Eagle是什么 Kafka Eagle是一款用于监控和管理Apa ...
- 2.自定义view-QQ运动步数
1.效果 2.实现 2.1自定义属性 在res/values 文件夹中新建xx.xml,内容如下 <?xml version="1.0" encoding="utf ...
- Java源码研究001:关于List的并发修改异常
这个就是实现一个简单的 ArrayList 的遍历,如果存在一个为"aaa"的值,就添加一个"ccc" package Array; import java.u ...
- 《改善python程序的91个建议》读书笔记
推荐 <改善Pthon程序的91个建议>是从基本原则.惯用方法.语法.库.设计模式.内部机制.开发工具和性能优化8个方面深入探讨编写高质量python代码的技巧.禁忌和最佳实践. 读书就如 ...
- MM-采购模块相关业务
采购模块主要业务流程: 1.收集采购需求(采购申请单),系统采购申请单单据可以由需求部门手工产生,也可以由系统的MRP(物料需求计划)来产生. 2,货源确定,用来确定所申请的物料,通过何种方式向供应商 ...
- 01 . Go之从零实现Web框架(类似Gin)
设计一个框架 大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架.不同的框架设计理念和提供的功能有很大的差别.比如 Python 语言的 django和flask,前者大而全,后者 ...
- 漫画 | 小公司卧薪尝胆三年,意外拿到美团offer
今天给大家分享一篇,非科班出生的野生前端从业者的励志成长故事,故事的主人公王大拿(化名),在小公司打杂三年后,意外拿到了美团的offer,成功进阶大厂,跳槽到了美团的核心外卖事业部. 事故主人公:王大 ...
- TurtleBot3 Waffle (tx2版华夫)(10)自主导航(A2激光雷达)
1)[Remote PC] 启动roscore $ roscore 2)[TurBot3] 启动turbot3 $ roslaunch turbot3_bringup minimal.launch 3 ...
- java数组基础知识
数组的定义:int[] array=new array[n];int array[]={, , , ,};定义了数组,JVM就会给其一个空间,数组是应用类型的数据类型,其存储方式是随机存储. 数组的遍 ...
- vue调起微信扫一扫
vue调起微信扫一扫,两个注意的点 1.url必须是不带参的地址栏,如果传了带参数的地址url有可能会出现安卓机能调,苹果机报错或者安卓和苹果都报错 2.this指代问题在vx.ready等等方法里面 ...