开发者

linux history命令使用解读

开发者 https://www.devze.com 2024-08-19 09:56 出处:网络 作者: 临江仙我亦是行人
目录命令行历史1. 命令:history2. 常用选项3. 命令历史相关环境变量4. 持久保存变量5. 调用命令行历史总结命令行历史
目录
  • 命令行历史
    • 1. 命令:history
    • 2. 常用选项
    • 3. 命令历史相关环境变量
    • 4. 持久保存变量
    • 5. 调用命令行历史
  • 总结

    命令行历史

    当执行命令后,系统默认会在内存记录执行过的命令

    当用户正常退出时,会将内存的命令历史存放对应历史文件中,默认是 ~/.bash_history

    登录shell时,会读取命令历史文件中记录下的命令加载到内存中 登录进shell后新执行的命令只会记录在内存的缓存区中;这些命令会用户正常退出时“追加”至命令历史文件中利用命令历史。

    可以用它来重复执行命令,提高输入效率

    1. 命令:history

    history [-c] [-d offset] [n]
    history -anrw [filename]
    history -ps arg [arg...]

    2. 常用选项

    选项说明
    -c清空命令历史
    -d offset删除历史中指定的编程客栈第 offset 个命令
    n显示最近的 n 条历史
    -a追加本次会话新执行的命令历史列表至历史文件
    -r读历史文件附加到历史列表
    -w保存历史列表到指定的历史文件
    -n读历史文件中未读过的行到历史列表
    -p展开历史参数成多行,但不存在历史列表中
    -s展开历史参数成一行,附加在历史列javascript表后

    3. 命令历史相关环境变量

    变量说明
    HISTSIZE命令历史记录的条数
    HISTFILE指定历史文件,默认为~/.bash_history
    HISTFILESIZE命令历史文件记录历史的条数
    HISTTIMEFORMAT="%F %T $(whpythonoami) "显示时间和用户
    HISTIGNORE="str1:str2*:..."忽略str1命令,str2开头的历史
    HISTCONTROL控制命令历史的记录方式

    ignoredups 是默认值,可忽略重复的命令,连续且相同为“重复”

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

    ignoreboth 相当于ignoredups, ignorespace的组合

    erasedups 删除重复命令

    4. 持久保存变量

    以上变量可以 export 变量名=“值” 形式存放在 /etc/profile 或 ~/.bash_profile

    示例

    [root@cencxwpxSjtos ~]#cat .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
    
    export PATH
    export HISTCONTROL=ignoreboth
    export HISTTIMEFORMAT="%F %T "
    [root@Centos ~]#
    
    [root@centos /]#history 5
      123  2021-03-25 15:52:15 cd ~
      124  2021-03-25 15:52:16 pwd
      125  2021-03-25 15:52:18 cd /
      126  2021-03-25 15:52:19 pwd
      127  2021-03-25 15:52:30 history 5
    [root@centos /]#

    5. 调用命令行历史

    # 重复前一个命令方法 
    重复前一个命令使用上方向键,并回车执行 
    1. 按 !! 并回车执行
    2. 输入!-1 并回车执行
    3. 按 Ctrl+p 并回车执行
    
    使用up(向上)和down(向下)键来上下浏览从前输入的命令
    ctrl-r来在命令历史中搜索命令
    (reverse-i-search)`':
    Ctrl+g:从历史搜索模式退出
    header 1header 2
    !:0执行前一条命令(去除参数)
    !n执行history命令输出对应序号n的命令
    !-n执行history历史中倒数第n个命令
    !string重复前一个以“string”开头的命令
    !?string重复前一个包含string的命令
    !string:p仅打印命令历史,而不执行
    !$:p打印输出 !$ (上一条命令的最后一个参数)的内容
    !*:p打印输出 !*(上一条命令的所有参数)的内容
    ^string删除上一条命令中的第一个string
    ^string1^string2将上一条命令中的第一个string1替换为string2
    !:gs/string1/string2将上一条命令中所有的string1都替换为string2
    # 要重新调用前一个命令中最后一个参数,三种方式
    1. !$           # 表示前一个命令中最后一个参数
    2. Esc, .       # 点击Esc键后松开,然后点击 . 键
    3. Alt+ .       # 按住Alt键的同时点击 . 键
    header 1header 2
    command !^用上一个命令的第一个参数做copythonmmand的参数
    command !$利用上一个命令的最后一个参数做command的参数
    command !*利用上一个命令的全部参数做command的参数,如 ls !*
    command !:n利用上一个命令的第n个参数做command的参数
    command !n:^调用第n条命令的第一个参数
    command !n:$调用第n条命令的最后一个参数
    command !n:m调用第n条命令的第m个参数
    command !n:*调用第n条命令的所有参数
    command !string:^从命令历史中搜索以 string 开头的命令,并获取它的第一个参数
    command !string:$从命令历史中搜索以 string 开头的命令 ,并获取它的最后一个参数
    command !string:n从命令历史中搜索以 string 开头的命令,并获取它的第n个参数
    command !string:*从命令历史中搜索以 string 开头的命令 ,并获取它的所有参数

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号