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执行脚本 ...
随机推荐
- 【入门必看】不理解「对象」?很可能有致命bug:简单的Python例子告诉你
简介:越来越多的人要在学习工作中用到『编程』这个工具了,其中很大一部分人用的是Python.大部分人只是做做简单的科研计算.绘图.办公自动化或者爬虫,但-- 这就不需要理解「指针与面向对象」了吗? 在 ...
- 对路径binroslyn..的访问被拒绝
一开始的解决办法就是把bin下的文件都删除了,但是roslyn文件夹下的部分文件一直被占用,必须进程中把vbcscompiler进程干掉,才能删除,再重新编译,就没问题了.
- 利用MD5进行加密
package com.cn.peitest; import java.io.UnsupportedEncodingException; import java.security.MessageDig ...
- Thread.join详解
/** * 如果某个线程在另一个线程t上调用t.join:那么此线程将被挂起,直到目标t线程的结束才恢复即t.isAlive返回为假 * * @date:2018年6月27日 * @author:zh ...
- java线程调度
JAVA线程调度分抢占式和协调式 协调式的线程切换由线程本身自己控制,好处是实现简单,当前线程只有当事情做完才会通知系统进行切换并没有同步开销,坏处是容易引发事故,假如阻塞的线程由于代码BUG没有通知 ...
- Net/NetCore/.NET5 ORM 六大查询体系 - SqlSugar 高级篇
框架介绍 SqlSugar ORM是一款老牌国产ORM框架,生命力也比较顽强,从早期ORM不成熟阶段,一直存活到现在,我为什么要一直坚持,那是因为还有很多用户在使用,本来我能够较早推出新开源框架 ,可 ...
- Eclipse 使用svn时出现 “Previous operation has not finished; run 'cleanup' if it was interrupted“问题
在执行svn操作的时候出现了下面的问题 commit -m "" E:/eclipse/workplace/BRobotAPP/blockly/googleDemo/blockly ...
- mysql 连接url中需要添加useUnicode=true&characterEncoding=UTF-8
下面是示例: 数据库中Username是张三 在数据库配置时没有配置编码 useUnicode=true&characterEncoding=UTF-8 导致期望与实际不同 配置useUni ...
- Docker一秒进阶
tar包: 从tar包导入:docker load < xxxx.tar docker run -d -p 8080:80 --name [名字] -v `pwd`:/usr/share/ngi ...
- Deep Learn I'm back.
Intorduction: 时隔好几个月,我准备重新进入Deep Learning 的领域.昨天和老师聊了很多,之前觉得我做的工作就是排列组合,在水论文,灌水.但老师却说:这也是为将来的研究打基础. ...