指点成金-最美分享吧

登录

Linux系统理论操作学习25History 历史指令回溯 查找之前的指令,history命令参数设置

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了Linux系统理论操作学习25History 历史指令回溯 查找之前的指令,history命令参数设置相关的知识,希望对你有一定的参考价值。

linux history历史记录命令详解

1、Linux中history的介绍

在bash功能中,系统会记录使用过的命令,也就是说使用者可以查询曾经做过的举动,从而可以知道运行步骤,那么就可以追踪曾下达过的命令。

主要有两个方面的作用

  • 排除运行指令上的错误
  • 很快的查询到较早之前比较复杂的指令,再次执行或者稍作修改后执行

2、History的保存

命令记录位置

~/.bash_history

注意以及解释说明

文件中记录的是前一次登陆以前所运行过的命令,而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到文件当中。

举例如下

首先我们运行几个指令(通过history是可以看到我们已经运行了)

这个时候我们去查看记录文件~/.bash_history这里面记录的是上次登录,也就是到上次用户退出为节点的使用指令情况

我们再退出一次,然后在登录进来看这个文件~/.bash_history就可以看到我们刚才的指令了

3、history命令的使用

查看当前用户所有历史记录命令

history

查看当前用户最近n条历史记录命令

history n

清除linux历史记录命令

清除所有的历史命令

history -c 

但是如果想要彻底清除,可能还需要清除下~/.bash_history文件

清除命令号为5的记录

history -d 5 

保存历史记录

将目前新增的 history 命令新增入histfiles 中,也就相当于说不需要退出就可以手动把现在在缓存中的历史记录保存下来,若没有加histfiles, 则默认写入 ~/.bash_history

history -a [histfiles(这部分可选)]

好像这个指令也没啥区别

history -w [histfiles(这部分可选)]

也可以将目前的 history 记忆内容写入 histfiles 中!

从文件中读取保存的历史记录

-r 将histfiles 的内容读到目前这个 shell 的 history 记忆中;若没有加histfiles, 则默认从 ~/.bash_history读取

history -r [histfiles(这部分可选)]

使用 grep 命令列出匹配字符串

使用 grep 和 docker 命令可以很容易地显示匹配的命令列表。

查看其他用户的历史记录

more /home/$USER/.bash_history

4、关于历史指令的便捷操作(快速查找历史指令)

快速调出上一条指令执行上一个命令

!!

快速调出第N条指令并执行

这里的N代表的是在history中的编号可以通过history查询

!+数字

快速调出最近一次以此字母开头的命令并执行

!+字母

5、使用Ctrl+R快捷键快速搜索历史命令

在Linux系统下一直用上下键查找以前输入的命令,这个找刚输入不久的命令还是很方便的,但是比较久远的命令,用上下键效率就不高了。其实很多时候history命令也是个花架子,虽然功能多,但不好用,网上找了下,发现了用ctrl + r这个快捷键查找历史命令。

按下这个快捷键后,进入了反向搜索状态,这时你输入一个字符,系统会找到最近一个包含这个字符的命令,如果不是你想要的命令,你可以继续输入,系统继续查找最近一个包含你所输入的字符串的命令,直到找到你要的命令。

找到你想要的命令后,你可以按回车执行这条命令,还可以按上下键查找该命令前后的命令,按左右键移动光标并修改这条命令。

为了提高查找效率,你应该输入该条命令中最特别的字符(别的命令不包含的字符)

6、关于history的一些其他配置操作

限制linux记录历史命令的数量

HISTSIZE=10HISTFILESIZE=10

提示:以上命令行设置仅会临时生效,要设备永久生效需要配置到/etc/profile~/.bash_profile

强制linux不记录敏感历史命令,强制忽略某条特定命令

只需要在想要隐藏执行的命令前面加空格。

在执行一条命令时,你可以将HISTCONTROL设置为ignorespace并在该命令前加上一个空格来指示history忽略这条命令。可以预见的是,很多初级系统管理员将为他们能从history中成功隐藏某条命令而振奋。

了解ignorespace的工作方式是很好。不过,实践中最好不要从history中去掩盖任何命令。

HISTCONTROL=ignorespace

用HISTIGNORE让history在存储时忽略某些指令

有时你不想在记录里看到诸如“pwd”,“ls”之类的基本指令,可以用HISTIGNORE忽略这些指令。

注意在HISTIGNORE中添加“ls”,只忽略“ls”不忽略“ls –l”。一定要准确的写出要忽略的的指令。

linux 不记录历史命令,(转)linux如何让历史记录不记录敏感命令

显示时间

使用HISTTIMEFORMAT在历史中显示TIMESTAMP,运行代码设置好显示时间的格式

export HISTTIMEFORMAT="%F %T "

使用命令history就可以显示时间了

查看更多的内部指令

这个方式可以查看到所有的内部运行指令包括密码登录等等

history |more

ctrl+c或者q退出

用HISTSIZE控制历史命令的总数

把下面的两行添加到~/.bash_profile然后重新登录bash,或者用source ~/.bash_profile,查看有什么变化,在这个例子中,bash命令历史记录中只能储存450条命令。

vim ~/.bash_profile 添加进去HISTSIZE=450HISTFLESIZE=450

使用HISTFILE改变历史文件名

默认情况下,命令历史被储存在~/.bash_history文件中,把下面的一行添加到~/.bash_profile文件中,重新登录shell

vim ~/.bash_profile 添加进去HISTFILE=/root/.commandline_warrior

.commandline_warrior文件将取代.bash_history文件用来储存历史命令。

你可以使用这个命令来追踪不同终端中执行的命令,届时只需要将不同终端中所执行的命令保存在不同的历史文件中即可。

使用HISTCONTROL来消除命令历史中的连续重复条目

当你使用history的时候,你会看到这很多命令连续出现。设置HISTCONTROLignoredups,来消除重复命令:

export HISTCONTROL=ignoredups 

使用HISTCONTROL在整个历史中去除重复命令

上面的ignoredups去除连续重复的命令,要消除整个命令历史中的重复命令,把HISTCONTROL设置成erasedups

export HISTCONTROL=erasedups 

替换命令历史中的内容(获取历史命令的一些参数)

当你搜索历史命令时,你可能希望执行一个与刚刚查找到的历史命令具有相同的参数的命令。

在本例中,vi之后的!!:$可以将前一个命令的参数做为当前命令的参数。

# ls anaconda-ks.cfg anaconda-ks.cfg # vi !!:$ vi anaconda-ks.cfg

在下面的例子中,紧跟在vi后的参数!^把上一个命令的第一个参数传递给当前命令。

# cp anaconda-ks.cfg anaconda-ks.cfg.bak anaconda-ks.cfg # vi !^ vi anaconda-ks.cfg

替换特定命令的特定参数

在下例中,!cp:2在命令历史中查找以cp开头的命令,并将其第二个参数做为当前命令(ls -l)的参数。

# cp ~/longname.txt /really/a/very/long/path/long-filename.txt # ls -l !cp:2 ls -l /really/a/very/long/path/long-filename.txt

在下面的例子中!cp:$寻找先前以cp为开头的命令,并把该条指令的最后一个参数(在这个例子中依旧是第二个参数)替换到ls –l中。

#ls -l !cp:$ ls -l /really/a/very/long/path/long-filename.txt

用HISTSIZE禁用history

如果你想禁用history,又不让bashshell记录你的命令,像下面那样把HISTSIZE设为0即可。

export HISTSIZE=0 

Last、参考文献

linux history历史记录命令详解 - 华为云

linux 不记录历史命令,(转)linux如何让历史记录不记录敏感命令_宇较瘦的博客-CSDN博客

如何在 Linux 中有效地使用 history 命令 | Linux Story

Linux下的history命令其实很强大 - 知乎

以上是关于Linux系统理论操作学习25History 历史指令回溯 查找之前的指令,history命令参数设置的主要内容,如果未能解决你的问题,请参考以下文章