2017-7-18-每日博客-关于Linux下的history的常用命令.doc

Posted Suway

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-7-18-每日博客-关于Linux下的history的常用命令.doc相关的知识,希望对你有一定的参考价值。

History

 

history命令可以用来显示曾执行过的命令。执行过的命令默认存储在HOME目录中的.bash_history文件中,可以通过查看该文件来获取执行命令的历史记录。需要注意的是.bash_history不包含当前会话所执行的命令,执行过的命令在关机时才会写入文件,除非执行命令history -w

常用参数:
1.n 显示n个最近的记录

History 3

 


2.-w <文件> 覆盖原有文件或者将记录写入一个新文件
用法示例:
将所有执行过的命令写入history.txt文件中
$ history -w history.txt 或者
$ history -w & cp ~/.bash_history history.txt

3.-c 参数:将目前的shell中的所有 history 内容全部消除,下图是执行效果,执行history -c命令后,之前的所有的记录都清除啦。

 

4.在每个用户目录都有一个.bash_history文件,里面记录了该用户的所有命令操作,无论这个用户是直接登录的还是通过xshell ssh方式过来的。

那么,首先必然有一个root用户,所有在/root/.bash_history里面记录了root用户的命令操作,你可以用catvim等工具来查看。
另外,假设你还有一个用户叫做XXX,那么在/home/XXX/.bash_history里面就记录了XXX用户的命令操作。

 

LinuxHistory命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 。

>History命令语法:
[[email protected]]# history [n]
[[email protected]]# history [-c]
[[email protected]]# history [-raw] histfiles

参数:
:数字,要列出最近的 n 笔命令列表
-c :将目前的shell中的所有 history 内容全部消除
-a :将目前新增的history 指令新增入 histfiles 中,若没有加 histfiles,则预设写入 ~/.bash_history
-r :将 histfiles 的内容读到目前这个 shell history 记忆中
-w :将目前的 history 记忆内容写入 histfilesLinux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,你也可以更改这个值。如果你键入 history, history会向你显示你所使用的前1000个历史命令,并且给它们编了号,你会看到一个用数字编号的列表快速从屏幕上卷过。你可能不需要查看1000个命令中的所有项目, 当然你也可以加入数字来列出最近的 n 笔命令列表。linuxhistory命令不仅仅让我们可以查询历史命令而已. 我们还可以利用相关的功能来帮我们执行命令。运行特定的历史命令history会列出bash保存的所有历史命令,并且给它们编了号,我们可以使用“叹号接编号”的方式运行特定的历史命令.

语法说明:
[[email protected]]# [!number] [!command] [!!]
参数说明:
number :第几个指令的意思; 
command  :指令的开头几个字母 
! :上一个指令的意思!

History命令实战
1.出所有的历史记录:
[[email protected]] # history

2.只列出最近10条记录:
[[email protected]] # history 10 (,history10中间有空格)

3.使用命令记录号码执行命令,执行历史清单中的第99条命令
[[email protected]] #!99 (!99中间没有空格)

4.重复执行上一个命令
[[email protected]] #!!

5.执行最后一次以rpm开头的命令(!代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)
[www.linuxi[email protected]] #!rpm

6.逐屏列出所有的历史记录:
[[email protected]]# history | more

7.立即清空history当前所有历史命令的记录
[[email protected]] #history -c

除了使用history命令,shell GUI 终端提示下,你也可以使用上下方向键来翻阅命令历史(向下箭头会向前翻阅),直到你找到所需命令为止。这可以让我们很方便地编辑前面的某一条命令,而不用重复输入类似的命令。History命令的用途确实很大!但需要小心安全的问题!尤其是 root 的历史纪录档案,这是黑客们的最爱!因为不小心的 root 会将很多的重要资料在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个档案被解析的话,后果不堪设想!

5.history相关的环境变量
HISTFILE          指定存放历史文件位置,默认位置在~/.bash_profile(针对用户)、 
      /etc/profile(针对全局,如果~/.bash_profile内没有相关环境变量内容则使用全局变量设置
HISTFILESIZE      命令历史文件记录历史的条数 
HISTSIZE          命令历史记录的条数,默认为1000 
HISTTIMEFORMAT="%F %T"  显示命令发生的时间 
HISTIGNORE="str1:str2:..." 忽略string1,string2历史 
HISTCONTROL      包含一下4项,让哪一项生效只需要让其=下面一项即可 
ignoredups:  忽略重复的命令;连续且相同方为“重复” 
ignorespace:  忽略所有以空白开头的命令 
ignoreboth:ignoredups,ignorespace 
erasedups:    删除重复命令

让上述环境变量生效方式:
1、直接在当前shell内输入相关变量,比如我们不想留存命令历史,我们把HISTSIZE设置为0
[[email protected] ~]# HISTSIZE=0 
[[email protected] ~]# history

经测试,成功。不过这种设置的局限性是其作用范围仅仅针对当前shell及其子shell,如果切换用户或登出再登入其设置失效。不过其特点是设置完立刻生效。
下面通过实验说明这个问题
[[email protected] ~]# bash 
[[email protected] ~]# history 
[[email protected] ~]# history

以上结果说明在当前shell内设置history的环境变量后,其作用范围为当前shell及子shell
Last login: Fri Jul 29 17:26:41 2016 from 10.1.250.62 
[[email protected] ~]# history 
    1  history

重新登陆后原有的history环境变量失效
2、另一种让history环境变量生效的方式是修改~/.bash_profile文件
[[email protected] ~]# vi ~/.bash_profile  
# .bash_profile 
  
# Get the aliases and functions 
if [ -f ~/.bashrc ]; then
        . ~/.bashrc 
fi
  
# User specific environment and startup programs 
  
PATH=$PATH:$HOME/bin
HISTTIMEFORMAT="%F %T "        此为新添加的history环境变量,我添加了发生命令操作的时间 
export PATH

wq保存退出。
[[email protected] ~]# history            
    1  history
    2  ll 
    3  cd
    4  hostory 
    5  history
    6  vi ~/.bash_profile  
    7  history

由结果可知变量并没有生效,我们重新登录再尝试下。

 

 

6.通过上面的两个结果,我们可以发现第二种修改配置文件虽然也可以成功修改history环境变量但是其生效需要重新登陆,并不是改完就生效。但是它的特点是此修改始终有效,时效性为永久。

  history命令的使用
-c: 清空命令历史
-d n: 删除历史中指定的命令,n表示命令号
#: 显示最近的#条历史
-a: 追加本次会话新执行的命令历史列表至历史文件,因为多终端所以如果想看当前都发生了什么操作就可以执行-a进行查看
-n: 读历史文件(本地数据)中未读过的行到历史列表(内存数据)
-r: 读历史文件(本地数据)附加到历史列表(内存数据)
-w: 保存历史列表(内存数据)到指定的历史文件(本地数据)
-s: 展开历史参数成一行,附加在历史列表后。用于伪造命令历史
下面来演示上面几种命令的使用
[[email protected] ~]# history 

清空历史
[[email protected] ~]# history -c 
[[email protected] ~]# history 
2016-07-29 20:29:26 history

从历史文件读取之前的命令历史
[[email protected] ~]# history -r  
[[email protected] ~]# history 
   

删除指定命令历史
[[email protected] ~]# history -d 4 
[[email protected] ~]# history 
    

伪造历史命令
[[email protected] ~]# history -s rm -rf /*  做下恶作剧 
[[email protected] ~]# history 
 

我相信任谁输入history看到这个命令都会吓一身汗。


  调用历史参数详解

#cmd !^ : 利用上一个命令的第一个参数做cmd的参数 
#cmd !$ : 利用上一个命令的最后一个参数做cmd的参数 
#cmd !* : 利用上一个命令的全部参数做cmd的参数 
#cmd !:n : 利用上一个命令的第n个参数做cmd的参数 
#!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 开头的命令,并获取它的所有参数

下面通过实验来实践上面的历史参数的具体用法
[[email protected] ~]# history 

我们先使用!!来调用上一条命令

[[email protected] ~]# !! 
history
   

[[email protected] ~]# !h 
history


  常用的快捷键
  重新调用前一个命令中最后一个参数:
  !$ 


  Esc, .(点击Esc键后松开,然后点击. 键)
 这两个很常用,特别是Esc,.

 




























































































































以上是关于2017-7-18-每日博客-关于Linux下的history的常用命令.doc的主要内容,如果未能解决你的问题,请参考以下文章

2017-7-18-每日博客-关于Linux下的软链接和硬链接.doc

2017-7-19-每日博客-关于Linux下的CentOS中文件夹基本操作命令.doc

第二组项目冲刺(Beta版本)第一次每日例会 2017/7/18

第二组项目冲刺(Beta版本)第九次每日例会 2017/7/18

关于 Linux 下的线程函数未定义问题

Linux 环境下的C语言, 关于 kill 发送信号和 signal() 函数, 具体问题在以下代码的注释处