命令行历史详解

     bash在用用户登录时,会加载命令历史文件~/.bash_history ,将其加载至内存,退出时会将    内存中的命令“追加”到历史文件中。

命令历史查看:history

    格式: history [-c] [-d offset] [n]

    history -anrw [filename]

    history -ps arg [arg...]

    -c: 清空命令历史

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

    #: 显示最近的#条历史

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

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

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

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

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

    -s: 展开历史参数成一行,附加在历史列表后(伪造记录,未执行但直接写入记录中)

命令历史操作:

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

    键入ctrl-r来在命令历史中搜索命令( reverse-i-search) `’:

命令参数调用:      

    要重新调用前一个命令中最后一个参数: !$ 表示 ($ 在linux中表示结尾)

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

    或者:

    Alt  + .(按住Alt键的同时点击 . 键)  (本机时有效,ssh时可能会失效,快捷键被占           用)

    

     新命令command 调用历史命令参数

    command :

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

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

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

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

    eg: touch 1 2 3 4 5

    ls !^    ---> ls 1

    调用第N条历史命令参数:

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

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

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

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

    搜索并调用命令参数:

    !string:^ 从命令历史中搜索以 string 开头的命令,并获取

    它的第一个参数

    !string:$ 从命令历史中搜索以 string 开头的命令,并获取它

    的最后一个参数

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

    它的第n个参数

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

    它的所有参数

history配置:

                即使且临时生效: 直接在bash中改变变量的值即可

    永久生效:

      写入/etc/profile 或 ~/.bash_profile(注意参照文件内格式改写)

    HISTSIZE:命令历史记录的条数;(默认是1000)

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

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

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

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

    控制命令历史的记录方式:

    环境变量: HISTCONTROL

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

     ignorespace:忽略所有以空白开头的命令 (部分不希望被记录的命令,可用这个方法,在执              行的命令前加空格以隐藏)

    ignoreboth: ignoredups, ignorespace

    erasedups:删除重复命令