在使用linux的时候,经常使用命令行控制操作系统,linux shell具有history功能,即会记录已经执行过的命令,那么有效的使用命令历史机制将会使工作效率得到极大的提升。

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录在缓存中,可以用它来重复执行命令,这些命令会在用户退出时追加至历史文件中,一般保存在用户家目录下.bash_history文件中。默认保存1000条,也可以更改这个值。当用户再次登录shell时,会自动读取历史文件中记录下来的命令


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

语法:  history [-c] [-d offset] [n]

    history -anrw [filename]

    history -ps arg [arg...]

选项:  -c: 清空命令历史

    -d: 删除历史中指定的命令;

    #: 显示最近的#条历史

    -a: 追加本次会话新执行的命令历史列表至历史文件

    -n: 读历史文件中未读过的行到历史列表

    -r: 读历史文件附加到历史列表

    -w: 保存历史列表到指定的历史文件

    -p: 展开历史参数成多个行,但不存在历史列表中

    -s: 展开历史参数成一行,附加在历史列表后


命令行的历史记录有许多快捷使用的方法,熟练使用这些方法将极大提高工作效率:

重复使用命令

重复前一个命令,有4种方法:

  1. 重复前一个命令使用上方向键,并回车执行。

  2. 按 !! 并回车执行。

  3. 输入 !-1 并回车执行。

  4. 按 Ctrl+p 并回车执行。


!字符串 :重复前一个以“字符串”开头的命令

!num   :按照history命令输出中的序号重复对应命令

!?字符串 :重复前一个包含"字符串"的命令

!-n   :重复n个命令之前的那个命令


使用up(向上)和down(向下)键来上下浏览从前输入 的命令

键入ctrl-r来在命令历史中搜索命令

(reverse-i-search)`’:


重复使用参数:


要重新调用前一个命令中最后一个参数:

  •     !$  ($表示最后)

  •     Esc, .(点击Esc键后松开,然后点击 . 键)

  •     Alt+ .(按住Alt键的同时点击 . 键)


调用历史参数:

#cmd !^ : 利用上一个命令的第一个参数做cmd的参数

#cmd !$ : 利用上一个命令的最后一个参数做cmd的参数

#cmd !* : 利用上一个命令的全部参数做cmd的参数

#cmd !:n  : 利用上一个命令的第n个参数做cmd的参数


调用历史命令中的历史参数

!n:^ 调用第n条命令的第一个参数

!n:$ 调用第n条命令的最后一个参数

!m:n 调用第m条命令的第n个参数

!n:* 调用第n条命令的所有参数


!string:^ 从命令历史中搜索以 string 开头的命令,并获取 它的第一个参数

!string:$ 从命令历史中搜索以 string 开头的命令,并获取它 的最后一个参数

!string:n 从命令历史中搜索以 string 开头的命令,并获取 它的第n个参数

!string:* 从命令历史中搜索以 string 开头的命令,并获取 它的所有参数


历史命令也有很多环境变量,这些变量一般都存放在/etc/profile文件或用户家目录下的.bash_profile文件中。这些变量分别为:

HISTSIZE:命令历史记录的条数;

HISTFILE:指定历史文件,默认为~/.bash_history;

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

HISTTIMEFORMAT="%F %T"   显示时间

HISTIGNORE="str1:str2:… " 忽略string1,string2历史

控制命令历史的记录方式:环境变量:HISTCONTROL

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

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

    ignoreboth:ignoredups, ignorespace

    erasedups:删除重复命令

如/etc/profile文件中定义了一些变量

    wKiom1eYbDGypOObAAAeAU-En7A358.png

可以修改这些变量以达到自己想要的结果

如:想要历史命令记录时间,就可以在定义HISTTIMEFORMAT="%F %T"wKioL1eYbuvT_a1FAAARiKKIuxc156.png

若要变量永久生效就要写入配置文件中,如,我们可以写在自己家目录下的.bash_profile中。这样就永久生效。当然写入/etc/profile中也是永久生效,但是是对服务器上所有用户都生效。


    能够熟练的使用历史命令,可以让我们很方便地编辑前面的某一条命令,而不用重复输入类似的命令。History命令的用途确实很大!但需要小心安全的问题!尤其是 root 的历史纪录档案,这是***们的最爱!因为不小心的 root 会将很多的重要资料在执行的过程中会被纪录在 ~/.bash_history 当中,如果这个档案被解析的话,后果不堪设想!