history历史命令添加时间戳!!
[root@nanjing1 jiaoben]# cat hist.sh
#!/bin/bash
grep -i -q "HISTTIMEFORMAT" /etc/profile
if [ $? -ne 0 ];then
echo "###############添加历史命令的时间及执行用户####################"
echo -e 'HISTTIMEFORMAT="%F %T `whoami` "' >>/etc/profile
source /etc/profile
sleep 5
echo "###############添加历史命令的时间用户完成!!##################"
echo "需要再执行source /etc/profile一下"
else
echo "HISTTIMEFORMAT变量已存在,exit!!"
exit 1
fi
Linux 中的 history 命令中如何启用时间戳
我们大家应该都比较熟悉 history 命令,其用于查看先前都运行过哪些命令。不过有一个问题,默认情况下,history 命令是不显示命令的执行时间(带日期和时间)的,那么我们就不知道某个命令是具体什么时候执行的。
今天这篇文章,我们介绍一下如何在 history 命令中启用时间戳。
在 history 命令中启用时间戳
要在 history 命令中启用时间戳,需要修改 HISTTIMEFORMAT 环境变量。可使用 export 命令,如下所示:
export HISTTIMEFORMAT="%F %T "
这里:
-
%F 将以 YYYY-MM-DD 格式显示日期;
-
%T 以 HH:MM:SS 格式显示时间。
以上修改,只是在当前会话有效,系统重启后,上述设置就会失效。
永久启用时间戳
要在 history 命令中永久启用时间戳,需要在 .bashrc 文件中进行更改。
如同其他设置一样,如果想要永久的修改一个环境变量,需要在 bashrc 中进行修改。
使用文本编辑器打开文件 .bashrc,这里我们使用 nano:
nano ~/.bashrc
按键 Alt + / 跳转到文件末尾(vim 使用快捷键 G),添加如下内容:
export HISTTIMEFORMAT="%F %T "
然后保存,并退出编辑器。
使用 source 命令使修改生效:
source ~/.bashrc
此时,无论什么时候使用 history 命令,都会显示每个命令执行时的时间戳。
以上就是本次分享全部内容,欢迎讨论。
#########################
#######################
linux history命令介绍
一,命令帮助信息
history命令用于显示历史记录和执行过的指令命令。history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。history命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量 HISTSIZE进行控制。默认是不显示命令的执行时间,命令的执行时间,history 已经记录,只是没有显示。
二,参数介绍
[root@localhost ~]# help history #或者 man history
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
显示或操作历史列表
显示带有行号的历史记录列表,并在每个修改前加上前缀带有“*”的条目。
参数N只列出最后N个条目。
选项:
-c 通过删除所有条目来清除历史记录列表
-d 删除指定序号的命令记录
-a 将此会话的历史记录行附加到历史记录文件
-n 读取尚未从历史文件中读取的所有历史行
-r 读取历史文件并将内容附加到历史列表
-w 将当前历史记录写入历史记录文件,并将其附加到历史记录列表中
-p 对每个ARG执行历史扩展并显示结果,而不将其存储在历史列表中
-s 将ARG作为单个条目附加到历史列表中
如果给定FILENAME,则将其用作历史文件。否则,如果$HISTFILE具有值,则使用else~/.bash_history。
如果$HISTIMEFORMAT变量已设置且不为空,则其值将用作strftime(3)的格式字符串,以打印与每个显示的历史条目关联的时间戳。否则不打印时间戳。
退出状态:返回成功,除非给出无效选项或发生错误。
三,例子
1,使用 HISTTIMEFORMAT 显示时间戳
[root@localhost ~]# export HISTTIMEFORMAT='%F %T '
[root@localhost ~]# history
1 2023-03-04 15:17:46 export HISTTIMEFORMAT='%F %T '
2 2023-03-04 15:17:47 history
#注意:这个功能只能用在当 HISTTIMEFORMAT 这个环境变量被设置之后,
#之后的那些新执行的 bash 命令才会被打上正确的时间戳。
#在此之前的所有命令,都将会显示成设置 HISTTIMEFORMAT 变量的时间。
2,使用 Ctrl+R 搜索历史
Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令历史进行搜索,对于想要重复执行某个命令的时候非常有用。当找到命令后,通常再按回车键就可以执行该命令。如果想对找到的命令进行调整后再执行,则可以按一下左或右方向键。
[root@localhost ~]# #输入Ctrl+R会切换到如下命令行,输入字母会显示相关历史命令
(reverse-i-search)`': man history
补充还有 4 种方法可以重复执行上一条命令:
1,使用上方向键,并回车执行。 --可以滚动查找之前的命令
2,按 !! 并回车执行。 --直接使用上一条历史命令
3,输入 !-1 并回车执行。 --同2
4,按 Ctrl+P 并回车执行。 --会直接显示上一条命令
3,从命令历史中执行一个指定的命令
在下面的例子中,重复执行第 4 条命令,可以执行 !4
[root@localhost ~]# history | more
.......
57 2023-03-04 14:05:41 ls
58 2023-03-04 14:05:41 cd ../
[root@localhost ~]# !57
4,通过指定关键字来执行以前的命令,如输入 !ls 并回车,将执行以 ls打头的命令
[
5,使用 HISTSIZE 控制历史命令记录的总行数,将下面两行内容追加到 .bash_profile 文件并重新登录 bash shell,命令历史的记录数将变成 450 条
使用 HISTFILE 更改历史文件名称,命令历史存储在 ~/.bash_history 文件中。添加下列内容到 .bash_profile 文件并重新登录 bash shell,将使用 .commandline_warrior 来存储命令历史[root@localhost ~]# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450
HISTFILE=/root/.commandline_warrior #指定历史命令路径
6,使用 HISTCONTROL 从命令历史中剔除连续重复的条目,在下面的例子中,ls 命令被连续执行了多次,要剔除这些重复的条目,你可以将 HISTCONTROL 设置为 ignoredups:
[root@localhost ~]# ls --输入三次
27 2023-03-04 14:05:41 ls
28 2023-03-04 14:05:41 ls
30 history | tail -4
1041 2023-03-04 16:46:07 pwd
1042 2023-03-04 16:46:10 ls
1043 2023-03-04 16:46:15 history | tail -3
7,使用 HISTCONTROL 清除整个命令历史中的重复条目,清除整个命令历史中的重复条目,可以将 HISTCONTROL 设置成 erasedups
export HISTCONTROL=erasedups --这里我不尝试
8,使用 HISTCONTROL 强制 history 不记住特定的命令,将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格,
[root@localhost ~]#export HISTCONTROL=ignorespace
[root@localhost ~]# systemctl status httpd --#和systemctl之间有空格
9,使用 -c 选项清除所有的命令历史
10,使用 HISTSIZE 禁用 history
[root@localhost ~]# export HISTSIZE=0 --设置为0就是不存
[root@localhost ~]# history
[root@localhost ~]# [Note that history did not display anything]
11,使用 HISTIGNORE 忽略历史中的特定命令,例如忽略 pwd、ls、ls -ltr 等命令
export HISTIGNORE="pwd:ls:ls -ltr:"
四,补充
# 命令替换
#1, !!:$ 将为当前的命令获得上一条命令的参数:使用 !$ 可以达到同样的效果
[root@localhost ~]# ls anaconda-ks.cfg
anaconda-ks.cfg
vi anaconda-ks.cfg
vi anaconda-ks.cfg
#2,!^ 从上一条命令获得第一项参数:
anaconda-ks.cfg
vi anaconda-ks.cfg
#3,为特定的命令替换指定的参数
# !cp:2 从命令历史中搜索以 cp 开头的命令,并获取它的第二项参数:
# cp ~/anaconda-ks.cfg /opt/test/anaconda_test.txt
ls -l /opt/test/anaconda_test.txt
ls -l /opt/test/anaconda_test.txt
五,总结
history 是一个常用命令,对工作的帮助也很大,本文列出的用法有限,如果还有同僚知道其它用法,欢迎留言交流
最后的最后(Last but not least),欢迎交流:
关注公众号留言,或者在下方直接留言: