Linux基础:history命令

1、为何要学习 history 命令 ?

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


2、history 命令常见用法 ?

语法:web

history [n | -c | -rnaw histfile]

参数:shell

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

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

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

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

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


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


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

[root@web ~]# history 5
  997  ls
  998  exit
  999  history
 1000  exit
 1001  history

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

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

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

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

[root@web ~]# history 10
  997  ls
  998  exit
  999  history
 1000  exit
 1001  history
 1002  vi .bash_history

 [root@web ~]# history -d 999
[root@web ~]# 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中)

[root@web ~]# history -w /tmp/history.log
[root@web ~]# cat /tmp/history.log
ps -ef
ls
ls -l
cat /etc/issue
history -w /tmp/history.log


3、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 + .
咱们在建立文件后,一般会对其进行修改或其余的读操做,这时候键入命令后利用上述快捷键便可快速补全所需命令。


4、history 工做机制

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


因此会出现这种状况:

我和同事用不一样的机器登陆到同一台linux服务器上, 我用history命令只能查看本身终端所操做的命令,若是我也想看到全部链接到此服务器的终端所操做的命令,应该如何操做呢?

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

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


5、history 相关环境变量

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

HISTSIZE:命令历史记录的条数

[root@web ~]# echo $HISTSIZE
1000

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

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

[root@web ~]# HISTTIMEFORMAT="%F %T "
[root@web ~]# 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 ":显示更加详细的主机名和命令执行时间

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

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

[root@web ~]# HISTTIMEFORMAT="$(tty) %F %T "
[root@web ~]# 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

相关文章
相关标签/搜索