Linux基础:history命令

一、为什么要学习 history 命令 ?

history命令是bash shell 内置命令,history命令有助于我们缩短输入命令的时间,达到节省命令快捷操作的要求。我们也可以通过查询history命令,从而审计操作日志。同时,我们可以隐藏一些含有敏感信息的命令输入,使系统更加安全。

二、history 命令常见用法 ?

语法:

history [n | -c | -rnaw histfile]

参数:

n:数字,列出最近的 n 条历史命令

-c:将当前shell 缓存中的 history 内容全部清除

-a:将当前shell缓存中的history 内容append附加到 histfile 中,如果没有指定 histfile,则默认写入 ~/.bash_histroy

-r:将 histfile 中的内容读取到当前shell的缓存中

-w:将当前shell缓存的history历史列表写入到指定的文件

-a: 追加本次会话新执行的命令历史列表至历史文件,因为多终端所以如果想看当前都发生了什么操作就可以执行-a进行查看
-n: 读历史文件(本地数据)中未读过的行到历史列表(内存数据)
-r: 读历史文件(本地数据)附加到历史列表(内存数据)
-w: 保存历史列表(内存数据)到指定的历史文件(本地数据)
-s: 展开历史参数成一行,附加在历史列表后。用于伪造命令历史

n:数字,列出【最近】的 n 条历史命令,默认为10

[[email protected] ~]# history 5
  997  ls
  998  exit
  999  history
 1000  exit
 1001  history

-c : 清空命令历史(使用该命令之后,仅对当前shell进程生效, exit 退出后重新进入,原来 .bash_history的内容会重新入读内存中)

要想彻底清空历史命令,需要先将 .bash_history的内容删除,接着使用 history -c, 这样才会彻底清空命令历史。

[[email protected] ~]# history
  ...
  996  pstree
  997  exit
  998  tail -f /var/log/ldap.log 
  999  ls
 1000  exit
 1001  history
[[email protected] ~]# history -c
[[email protected] ~]# history
    3  history
[[email protected] ~]# > .bash_history
[[email protected] ~]# exit
logout

-d:删除历史命令中指定的的记录; 比如我们想删除命令历史中的999行命令记录,直接使用 history -d 999 即可,然后用 history 查看命令的最后几行,发现原来999行的历史命令被下一行的命令所取代

[[email protected] ~]# history 10
  997  ls
  998  exit
  999  history
 1000  exit
 1001  history
 1002  vi .bash_history

 [[email protected] ~]# history -d 999
[[email protected] ~]# history 10
  998  exit
  999  exit
 1000  history
 1001  vi .bash_history 
 1002  ls
 1003  history
 1004  history 5
 1005  history 10
 1006  history -d 999
 1007  history 10

-r:读取历史文件到历史列表(将 .bash_history重新读取一遍,写入到当前bash进程的内存中)

(如果当前两个终端同时登录Linux系统, root(tty1)输入 n 条命令, root(tty2)也输入 m 条命令并且将内存中的命令历史通过 histroy -a 刷新到 .bash_history文件中, 那么 root(tty1)可以直接执行 history -r ,将root(tty2)写入到 .bashr_history文件中记录直接读取到 当前bash进程的histoty命令历史内存中)

-a:将bash 内存中历史命令追加到 .bash_history 历史命令文件中, 默认只有退出 shell 是才会保存

-w:保存历史列表到指定的历史文件(history -w /PATH/TO/SOMEFILE 将内存中命令执行的历史列表保存到指定的 /PATH/TO/SOMEFILE中)

[[email protected] ~]# history -w /tmp/history.log
[[email protected] ~]# cat /tmp/history.log
ps -ef
ls
ls -l
cat /etc/issue
history -w /tmp/history.log

三、history 工作机制

# !n :调用第n条命令 
# !-n:调用倒数第n条命令 
# !!:执行上一条命令 
# !$:引用前一个命令的最后一个参数同组合键Esc,. 
# !n:^ 调用第n条命令的第一个参数 
# !n:$ 调用第n条命令的最后一个参数 
# !m:n 调用第m条命令的第n个参数 
# !n:* 调用第n条命令的所有参数 
# !string:执行命令历史中最近一个以指定string开头的命令 
# !string:^ 从命令历史中搜索以string 开头的命令,并获取它的第一个参数 
# !string:$ 从命令历史中搜索以string 开头的命令,并获取它的最后一个参数 
# !string:n 从命令历史中搜索以string 开头的命令,并获取它的第n个参数 
# !string:* 从命令历史中搜索以string 开头的命令,并获取它的所有参数

常用的快捷键

执行上一次命令

!!

搜索历史命令:

Ctrl + R

重新调用前一个命令中最后一个参数:
  !$ 
  Esc + .(点击Esc键后松开,然后点击. 键)
这两个很常用,特别是Esc + .
我们在创建文件后,通常会对其进行修改或其他的读操作,这时候键入命令后利用上述快捷键即可快速补全所需命令。

四、history 工作机制

history工作机制:当用户登录系统并启动bash时,会读取 histfile 变量指定文件中的历史记录到当前shell进程的内存中,我们在此bash中的所有操作,也会缓存在内存里面, 只有在bash退出后,才会把内存中的历史记录 flush 到  histfile 变量指定的文件中。

所以会出现这种情况:

我和同事用不同的机器登录到同一台linux服务器上, 我用history命令只能查看自己终端所操作的命令,如果我也想看到所有连接到此服务器的终端所操作的命令,应该如何操作呢?

回答是: 看不到, 在用户退出登录之前,命令历史记录全部在内存中,没有写入到文件。

通常 .bash_history 在每个用户的 $HOME 目录下,但这是查看上次用户所操作的历史记录。

五、history 相关环境变量

HISTFILESIZE:命令历史文件记录的条数

HISTSIZE:命令历史记录的条数

[[email protected] ~]# echo $HISTSIZE
1000

HISTFILE:指定历史文件,默认为每个用户家目录下:  ~/.bash_history

HISTTIMEFORMAT="%F %T ":显示时间,可以记录命令执行的时间

[[email protected] ~]# HISTTIMEFORMAT="%F %T "
[[email protected] ~]# history 
   10  2017-06-23 07:05:15 ps -ef
   11  2017-06-23 07:05:16 ls
   12  2017-06-23 07:05:18 ls -l
   13  2017-06-23 07:05:29 cat /etc/issue

HISTTIMEFORMAT="$(hostname) %F %T ":显示更加详细的主机名和命令执行时间

[[email protected] ~]# HISTTIMEFORMAT="$(hostname) %F %T "
[[email protected] ~]# history 
   10  web 2017-06-23 07:05:15 ps -ef
   11  web 2017-06-23 07:05:16 ls

HISTTIMEFORMAT="$(tty) %F %T ":显示用户登录终端和命令执行时间

[[email protected] ~]# HISTTIMEFORMAT="$(tty) %F %T "
[[email protected] ~]# history 
   10  /dev/pts/2 2017-06-23 07:05:15 ps -ef
   11  /dev/pts/2 2017-06-23 07:05:16 ls

HISTIGNORE="str1:str2:...": 忽略以冒号分隔的 str1, str2 历史记录

会忽略接下来输入凡是有 str1:str2 的命令

控制命令历史的记录方式

HISTCONTROL=

ignoredups:忽略重复的命令, “连续且相同”方为【重复】

ignorespace:忽略所有以空白开头的命令

ignoreboth:ignoredups && ignorespace

erasedups:删除重复命令,减小 history 的大小

注意:命令直接在命令行进行环境变量的设置,执行时间段仅限于该脚本,设置完变量会立即生效,但是exit退出当前脚本之后,环境变量就会失效;将环境变量写入配置文件中,/etc/profile(全局变量,对所有用户有效)或 ~/.bash_profile(单用户模式,仅对该用户有效),写入配置文件中不会立即生效,但是需要重新登录之后生效。

参考:

http://www.tuicool.com/articles/B7FFVrm

时间: 2024-10-29 19:11:08

Linux基础:history命令的相关文章

【系统知识点】linux基础&优化命令

Xshell上传下载服务器的文件: yum -y install lrzsz sysstat//安装对应软件 sz XXXX//下载 rz XXXX//上传 创建用户: Useradd vrfxie //创建用户 -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录. -g 用户组 指定用户所属的主用户组. -G 用户组,用户组 指定用户所属的附加组. -s Shell文件 指定用户的登录Shell. #可以设置为/sbin

Linux基础文件管理命令之ls,cd

Linux中提供了大量的命令,使用他们可以简化我们的工作,也许在图形化界面中要点击鼠标十几下操作,而在linux系统中一条命令就可以轻松解决.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统,就必须从Linux命令学起. linux系统中的命令格式一般如下: 命令格式:   命令  选项  参数     选项:       短选项: -       多个选项可以组合:-a -b = -ab       长选项: -- 参数:命令的作用对象 下面主要介绍ls和cd命

Linux系统history命令显示日期和时间,增加history命令保留个数

编辑 /etc/profile文件 # vi /etc/profile 在文件末尾添加 export HISTTIMEFORMAT='%F %T '     #注意有个空格,为了显示时日期与命令之间有空格分割. export HISTSIZE="10000"    #默认保留1000条. 保存 重新login即可生效. Linux系统history命令显示日期和时间,增加history命令保留个数

Linux基础文件管理命令之rm,mv,cp,touch

在linux系统下,一切皆文件,就连光盘也看作文件,要使用光盘首先要先建立一个目录,然后通过挂载来操作这个光盘,就连鼠标,键盘都是被看作文件.所以学习文件的相关操作命令是很重要的. rm命令 rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件保持不变. 注:rm是一个危险的命令,使用的时候要特别小心,尤其对于新手,否则整个系统就会毁在这个命令,比如以root身份在根目录下执行rm * rf

Linux下history命令详解---转载

Linux下History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 . >History命令语法:[[email protected]]# history [n][[email protected]]# history [-c][[email protected]]# history [-raw] histfiles 参数:n  :数字,要列出最近的 n 笔命令列表-c :将目前的shell中的所有 history 内容全部消除-a :将目前新增的history 指令新增入 hi

Linux下history命令用法

如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT 显示时间戳 当你从命令行执行 history 命令后,通常只会显示已执行命令的序号和命令本身.如果你想要查看命令历史的时间戳,那么可以执行:# export HISTTIMEFORMAT='%F %T '# history | more1 2008-08-05 19:02:39 service n

Linux基础tree命令

tree命令以树状图列出文件目录结构.不过某些Linux上(Centos 6.4)没有tree命令,本文将介绍安装方法. 常用参数: tree -d 只显示目录. tree -L 1 只显示第一层目录. [[email protected] tree-1.7.0]# tree -bash: tree: command not found 安装tree命令: [[email protected] 下载]# tree -bash: tree: command not found 到ftp://mam

linux下history命令显示历史指令记录的使用方法

linux下history命令显示历史指令记录的使用方法 History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 .1>History命令语法: [[email protected]]# history [n][[email protected]]# history [-c][[email protected]]# history [-raw] histfiles参数:n   :数字,要列出最近的 n 笔命令列表-c  :将目前的shell中的所有 history 内容全部消除-

Linux下history命令说明

Linux中history命令的作用是可以显示曾经执行过的命令历史,history是一个内部命令.当执行history命令时,会显示之前使用过的历史命令,这些命令会存放在内存中,当用户退出或关机时,会将内存中的命令写入家目录下的.bash_history文件中.当用户登录时,又会从文件中将history历史读入内存.在history中,记录限制的数量由变量HISTSIZE来表示,默认为1000条可以有多种方式来利用history中的历史命令.如果想重复执行之前执行过的命令,可以通过以下方式: 重

Linux基础入门级命令文档

Linux系统上命令的使用格式,及常用命令示例 1.命令提示符 登录系统后,第一眼看到的内容是: [[email protected] ~]# 上图就是 Linux 系统的命令提示符.那么,这个提示符的含义是什么呢? []:这是提示符的分隔符号,没有特殊含义. root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录. @:分隔符号,没有特殊含义. node1:当前系统的简写主机名node1. ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录. ]#:命令提示符,Lin