起因是这样的,一台机器客户反馈连接不上,说没有任何操作。好吧,排查吧。

1.第一步先看网络是否通:

从图中可以看到一开始是一直不通的。然后就通了,问了客户有没操作重启什么的结果说没有任何操作,还让给个解释!心酸

2.跟客户拿了账号密码进去检查下吧。

进去肯定先看日志啊什么的。结果没发现有啥有用的。再看历史执行命令吧:

重大发现,发现我执行的查看日志命令之前有一个reboot的执行命令。但是没有时间不好判断,咋办呢

3.给history历史记录附上时间戳

[root@localhost ~]# export HISTTIMEFORMAT='%F %T '

4.再次查看:

看看是不是已经给命令打上了时间的烙印了。

虽然时间戳出现了,但还有两个问题困扰着我们:

    1. 系统是怎么知道我们在什么时间执行了哪些命令呢?
    2. 有没有发现,输出内容中的前 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. 使用向上方向键,并回车执行。
  2. 输入 !!,并回车执行。
  3. 输入 !-1,并回车执行。
  4. 输入 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命令:查看和执行历史命令的更多相关文章

  1. Linux 快速执行历史命令,用 !编号

    例如: history | grep mysql 使用 !914 可以快速执行上述命令:

  2. ssh伪登陆执行远程主机脚本命令 C程序基于ssh passwordless执行远程主机命令及基于配置文件的验证伪登陆执行命令

    1,基于有密码及免秘钥在远程主机上执行命令及脚本 ssh -T ip "CLI or shell.sh"; 2,C程序实现上述功能--基于password-less

  3. 【转】Linux中history历史命令使用方法详解

    原文网址:http://os.51cto.com/art/201205/335040.htm 当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效 ...

  4. Linux中history历史命令使用方法详解

    当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升.事实上,一旦你掌 握了我在下面给出的15个有关Linux history历史命 ...

  5. Linux中的历史命令

    Linux中的历史命令一般保存在用户    /root/.bash_history history 选项 历史命令保存文件夹 选项     -c:清空历史命令     -w :把缓存中的历史命令写入历 ...

  6. linux 历史命令用法(转)

    许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...

  7. [Shell]Bash基本功能:历史命令 & 别名 & Bash快捷键

    /*----------------------------------------------------------------------------------------------- @黑 ...

  8. 教你一些Linux中隐藏bash历史命令的小技巧

    导读 如果你登录过 Linux 系统,并敲过一些命令,那你应该知道,bash history 会记录你输入的所有命令.这个操作其实是有一定风险的. 我个人经常使用 Linux,所以我想着研究一番,看看 ...

  9. shell基础之脚本执行,命令别名以及快捷键等

    脚本执行方式 比如我们在/root/下编写了一个脚本,名字为hello.sh.那么怎么调用执行它呢?有两种办法: (1)直接通过bash,如下: bash  hello.sh 注:采用bash执行脚本 ...

随机推荐

  1. JavaScript实现自定义右键菜单

    JavaScript实现自定义右键菜单,思路如下: 1. 屏蔽默认右键事件: 2. 隐藏自定义的菜单模块(如div.ul等): 3. 右键点击特定或非特定区域,显示菜单模块: 4. 再次点击,隐藏菜单 ...

  2. Tensorflow Windows安装

    操作系统: Windows 7 安装步骤 Step 1: 安装Tensorflow支持的Python版本,配置环境变量 目前,Tensorflow支持: Python 3.5.x 64-bit fro ...

  3. 测试常用sql语句

    一.查询数值型数据:SELECT * FROM tb_name WHERE sum > 100;查询谓词:>,=,<,<>,!=,!>,!<,=>,=& ...

  4. Presto安装完成之后需要做的

    Presto因其优秀的查询速度被我们所熟知,它本身基于MPP架构,可以快速的对Hive数据进行查询,同时支持扩展Connector,目前对Mysql.MongoDB.Cassandra.Hive等等一 ...

  5. 开发规范(一) 如何记录日志 By 阿里

  6. 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)

    package leetcode;import edu.princeton.cs.algs4.Cycle;import java.util.ArrayList;import java.util.Arr ...

  7. 如何优雅的将Object转换成List

    Main主函数中的 Object obj模拟了List对象.后续的代码首先判断obj是否是List类型,然后使用Class.cast做类型转换. 如果你想使用更方便的方法,可以直接调用下面的函数. p ...

  8. intellij IDEA Mybatis入门案例

    最近打算学习ssm框架  Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub ...

  9. java零基础之---eclipse的使用

    想写一篇关于初学者如何使用工具的博客,作为初学者使用IDE的第一个工具,深受大家喜欢,先写一篇eclipse的,然后再逐步推出idea, vscode 等 1. eclipse的下载及安装 1)百度搜 ...

  10. jQuery EasyUI学习一

    1.   jQuery EasyUI介绍 1.  创建组件的方式和原理(掌握) 2.  组件三要素(掌握) 3.  Panel.LinkButton.上下文菜单;(掌握) 简介 2.1.  jQuer ...