Linux杂谈之history_bashhistory文件-程序员宅基地

技术标签: HIST变量  history  Linux基础  

一   history 历史命令

历史命令是被保存在'内存和~/.bash_history'中;当'退出'或者登录shell时,会'自动'保存或读取

(1)环境变量

①  HISTFILE

HISTFILE: 记录history 历史命令'记录文件'的位置,要有'读写'权限,默认是~/.bash_history

chattr +a ~/.bash_history 即'append',设定该参数后,只能'向文件中添加'数据,而'不能删除'

②  HISTSIZE

变量HISTSIZE: 命令'缓冲区'的大小

原理: 执行的命令,'先记录在命令缓冲区',在'缓冲区满'或'退出shell时'才将命令写入$HISTFILE

禁用 history:  'export HISTSIZE=0' --> 此时history'无输出',并且ctrl+r'不生效'

  

③  HISTTIMEFORMAT

应用场景: 要对 Linux 系统'做审计',那'为历史记录'添加时间戳

history命令'配置时间戳': export HISTTIMEFORMAT='%F %T'  <-- 常见

细节点: 

   1) 如果是"双引号"包括,可以使用"$USER"

   2) 或者'自定义变量'或'脚本'获取信息'存取到'变量中,然后在HISTTIMEFORMAT中'引用'

   案例 --> export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S-$USER]"

④  HISTCMD

变量HISTCMD:记录'下一个命令'在history命令中的'编号'

⑤  HISTCONTROL

1) HISTCONTROL变量: 可以'控制'历史的记录方式

2) HISTCONTROL有以下的'选项':

   [1]、ignoredups        '默认',忽略重复命令

   [2]、ignorespace        忽略所有以'空格开头'的命令

   [3]、ignoreboth         ignoredups 和 ignorespace 的'组合'

   [4]、erasedups          删除历史记录中重复命令,相同的指令仅'保留最近'的一个

3) 如果同时'设定多个'选项,中间使用'冒号'

 HISTCONTROL=ignorespace:erasedups

​++++++++++++++++++++ "忽略某种格式的命令" ​++++++++++++++++++++

1) 强制 history 不记住'以空格'开头的命令: export HISTCONTROL=ignorespace 

   具体: 在不想被记住的'命令前'面输入一个'空格'

2) 禁止 shell 将命令记录到其命令历史记录中 --> "了解即可"

   思路: 运行后从历史记录中删除 linux 命令,

   方法: 是将命令附加到该history -d $(history 1)命令

   解读: 

     [1]、该$(history 1)子命令检索当前终端会话中历史记录中的最新条目

     [2]、其中1是'偏移量',该-d选项有助于'删除'它

⑥  HISTFILESIZE

变量HISTFILESIZE: 设置'HISTFILE文件'记录命令的行数,'限制'历史命令记录的行数

含义: 定义了在文件 '~/.bash_history' 中保存命令的'记录总数'

⑦  HISTIGNORE

HISTIGNORE: 忽略历史中的'特定'命令

⑧  汇总

1) 场景1: 需要对用户操作'进行审计',需要管理好 'linux 命令历史记录'

2)场景2: 为了'系统安全',系统被破解,hack可以通过'history'获取信息,需要'禁用'历史记录

  echo "export HISTSIZE=0" >> ~/.bash_profile

  echo "export HISTFILESIZE=0" >> ~/.bash_profile

  source ~/.bash_profile

(2)history命令

①  查看当前系统历史命令方式

1) 可以按一下'上|下'方向键,命令行就会显示相对于当前命令的上一条或下一条历史记录

2) 和方向键相同功能的就是组合键'Ctrl+p(前面执行过的命令)','Ctrl+n(后面执行过的命令)'

小结: 上面两个都是'相对于当前命令'查询上一条或者下一条命令的历史记录

3) 如果'搜索命令历史记录',就用Ctrl+r组合键进入历史记录搜寻状态,通过'关键字'搜索最近相关命令

4) history命令

② history命令

​用法:history [选项] [历史命令保存文件]

1) -c:清空历史命令'包括缓存和文件'

2) -w:把缓存中的历史命令立即'写入历史命令保存文件'~/.bash_history 

    history n        //显示'最近n条'历史命令记录

    history -d n     //删除'第n条'命令记录

注意:

1) ~/.bash_history中保存文件为上次登录正常退出后,缓存写入数据不包含本次登录后命令历史记录

2) history -c命令执行,清除了本地缓存,但'并不立即同步'至~/.bash_history文件中

3) 若想同步,bash_history,则history '-w'或者'正确退出'

③   其他隐藏操作命令历史记录

④   history流程图

(3) !命令

事件引用符!详细解读

①  基础

1) 使用"!number"重复执行第 n 条历史命令

   快速'重复执行'上一条命令 --> "四种方法": 上方向键、!!、!-1、crtl+p
   
2) 使用"!!" --> '执行最近的一条命令'

3) 使用'!字符串'重复执行最后一条'以该字串为开头'的命令

4) 当前命令获取'上一条命令参数' --> '!!:$'与'!$'都可以为当前命令获得'上一条命令的参数'

5) !^获得上一条命令的'第一项'参数

②  !string:p

1) !string

 这个用法'很高效',但存在'不安全'因素

 因为有可能执行的命令'不是你想要'执行的,那就坏事了。可以通过 ':p' 来'安全'地执行

2) !string:p

加上 :p 后,只是'打印出了搜索到的命令',如果'要执行',按 'Up 键',然后'回车'即可

③  注意特殊 

1)把感叹号"!"放在"双引号"里执行命令会'出错'

 eg:echo "hello!", 因为感叹号被解释成了一个历史命令

2) 然而在一个'脚本文件'里,这么写则是'正确'的,因为在'脚本文件'里bash的历史机制'被禁用'了

④  使用上一条命令最后一个参数

1) 这里的"!$"代表了上一条命令的"最后"一个参数

2) Esc快捷键 + .

3) alt + .

⑤  重复执行上条命令

1)!!

2)!-1

+++++++++ "快捷键" +++++++++

3)Ctrl+p

4)Up

⑥  其他杂谈

相关参考

1) !^           --> 使用'上条'命令的'第一个'参数

2) !$           --> 代表了上一条命令的'最后一个'参数

3) !:-          --> '去掉'最后一个参数'并执行上一个'命令

4) !*           --> 使用'上条命令'的'所有'参数  '等价' --> ':1-$'

5) !string:n    --> 使用'上条命令'指定的'参数'

  规则: 按照"![命令名]:[参数号]"的规则

6) !?string[?]  --> 执行'上一条'包含'关键字'的命令

7) 替换上条命令的参数 --> 将这条命令中的'old'更换为'new'

  find ./ -name "old*" -a -name "*.zip"

  !!:gs/old/new

8) 删除'除了cfg结尾以外'的所有文件 --> '逻辑非'的作用

  rm !(*.cfg)

9)  !!:$:r --> 获取'最后'一个参数,然后删除该参数的'后缀'

10) !!:$:h --> 获取'最后'一个参数,然后删除该参数的'文件名'

11) !!:$:e  --> 获取'suffix后缀'

重点: 

  1) 多数人会首先'选择按上箭头'提出上道命令,再'移动光标'去修改某'参数',这样'更直观'

  2) 但'效率上'就不够'使用引用符高',而且在'脚本中'用这个方法可以'简化'很多

  

(3)fc命令详解

1)fc 'Fix Commands 的缩写'是个 shell 内置命令 -->'了解即可'

2)用于在交互式 shell 里'列出、编辑和执行'最近输入的命令

3)可以用自己喜欢的'编辑器'编辑最近的命令并再次执行,而不用把它们整个重新输入一遍

4)除了可以'避免重复输入又长又复杂'的命令,它对'修正拼写错误'来说也很有用

补充: 可以通过sudo fc -e vim  --> ':!/bin/bash'提权

fc -l 10 --> 显示从'第10条到最近'的历史命令

fc案例

 (4)script命令

①  背景引出

1) 有些工具xsell、secureCRT 和 mobaXterm 都有将'终端操作和输出'保存到本地的功能

2) 但是'putty'工具就没有,这时'终端里的记录器'script 就派上用场了

②  man script

③  应用场景

1) 调试会产生'大量操作记录',需要'保存'到本地进行进一步分析

2) 与同事'协同工作',自己将工作完成了'一半',可以将操作过程记录下来,同事可以根据记录接着工作

3) 让人'远程协助'你,担心对方使坏,同时也可以'留下案底',将其'操作'记录下来

④  案例讲解

scriptreplay

script -c "bash -x ceshi.sh"  --> "命令回放"

script -t 2>time.log -qaf  command.log --> "分离"

需求: 记录'服务器用户会话'操作,以root身份编辑文件/etc/profile,在文件末尾'追加'以下内容

if [ $UID -ge 0 ]
then
    exec /usr/bin/script -t \
     2>/var/log/script-records/$USER-$UID-`date +%Y%m%d`.time \
     -a -f -q /var/log/script-records/$USER-$UID-`date +%Y%m%d`.log
fi

细节点: command.log是'用户输入和输出',cat查看可以解析'乱码'

录制回放  录制和回放

抓取Linux桌面的视频

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzj_110/article/details/128523058

智能推荐

IOT的项目实践【序言】_iot 实践学习-程序员宅基地

文章浏览阅读107次。因为项目需求的更新,最近一直在做将裸机项目移植成RTOS,准备记录这个过程,慢慢尝试,慢慢总结。_iot 实践学习

京东旗舰店店铺商品详情数据分析接口对接代码教程_京东商品详情页接口分析-程序员宅基地

文章浏览阅读334次。京东旗舰店商品数据分析接口,京东旗舰店商品详情接口,京东旗舰店商品销量接口,京东旗舰店商品列表接口,京东旗舰店商品sku接口,京东旗舰店商品详情采集接口,京东旗舰店商品销量采集,京东旗舰店商品评论采集接口,京东商品详情接口,京东关键词搜索商品接口,京东商品列表接口,京东旗舰店总销量接口,京东旗舰店商品总销量接口,京东旗舰店商品列表接口,京东旗舰店店铺分析商品接口,京东旗舰店商品采集接口,京东商品详情API接口,京东旗舰店商品详情API接口_京东商品详情页接口分析

C++ 编译 Lua 从而使 Lua 利用 C++ 异常-程序员宅基地

文章浏览阅读7次。Lua 在内部发生异常时,VM 会在 C 的 stack frame 上直接跳至之前设置的恢复点,然后 unwind lua vm 层次上的 lua stack。上面这段话的意义在于在 Lua 中使用 C++ 异常,如果 Lua 抛出异常,此时走 C++ 异常机制,可确保对象被正确销毁,即析构函数被调用,也就保证了 RAII 机制。总之,要小心处理 Lua 中的异常,特别是在 C++ 中。在 C++ 中,即使 Lua 中的异常使用了 C++ 异常,要捕获 Lua 中抛出的异常,也只能通过。

第二章、命名空间和输入输出_任务描述 相关知识 什么是名称空间 引入名称空间 编程要求 任务描述 本关任务:填-程序员宅基地

文章浏览阅读196次。对命名空间和输入输出的详解笔记_任务描述 相关知识 什么是名称空间 引入名称空间 编程要求 任务描述 本关任务:填

高斯混合模型的电磁优化算法 (matlab代码实现)_电磁场优化算法efo matlab-程序员宅基地

文章浏览阅读183次。应用了几种技术来提高数值稳定性,例如在对数域中计算概率,以避免在计算高维数据概率时经常发生的浮点数下溢。Matlab代码还经过精心调整,通过利用 vertization 和矩阵分解来提高效率。本文通过期望最大化 (EM) 算法拟合高斯混合模型 (GMM)。它适用于任意维度的数据集。博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。部分理论来源于网络,如有侵权请联系删除。行百里者,半于九十。_电磁场优化算法efo matlab

深入浅出HTML5新特性及其应用场景-程序员宅基地

文章浏览阅读222次,点赞2次,收藏5次。HTML5是HTML标准的最新版本,它引入了许多新的特性和功能,使得Web应用程序的开发更加强大和灵活。下面将深入浅出地介绍HTML5的新特性以及它们的应用场景。这些特性在不同的应用场景下可以发挥重要作用,从而提升用户体验和开发效率。等,使得我们可以更加清晰地描述网页的结构。应用场景:离线应用、用户配置保存、表单数据自动填充等。应用场景:图表绘制、游戏开发、数据可视化等。应用场景:位置导航、周边服务、天气预报等。应用场景:拖拽排序、图片上传、文件管理等。应用场景:网站的视频教程、音频播放器等。

随便推点

如何准备BAT技术面试答案(上)——Java研发方向_java研发方向如何准备bat技术面试关注微信公众号:猿blog关注微信公众号:猿blog关-程序员宅基地

文章浏览阅读810次。相关阅读:1. Java研发方向如何准备BAT技术面试(超级干货)2. 超实用的——BAT面试技巧这篇文章是针对文章《 Java研发方向如何准备BAT技术面试(超级干货)》里面的Java基础问题的一些答案。如有错误,还请各位网友指正。多谢!!!文章首发地址为微信公众号:猿blog 文章首发地址为微信公众号:猿blog 文章首发地址为微信公众号:猿blog重要的事情说三遍!!! 更多干货文章,_java研发方向如何准备bat技术面试关注微信公众号:猿blog关注微信公众号:猿blog关

TSP(Python):Qlearning求解旅行商问题TSP(提供Python代码)_qlearning求解旅行商问题tsp python-程序员宅基地

文章浏览阅读501次,点赞8次,收藏8次。Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获得的累积奖励。Q-learning的训练过程如下:1. 初始化Q值函数,将所有状态-动作对的Q值初始化为0。2. 在每个时间步,根据当前状态选择一个动作。可以使用ε-greedy策略来平衡探索和利用。3. 执行选择的动作,并观察环境返回的奖励和下一个状态。_qlearning求解旅行商问题tsp python

Subtrative Clustering 减法聚类-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏8次。算法流程:优缺点其他改进算法_减法聚类

Vim下快速删除字符串_vim删除字符-程序员宅基地

文章浏览阅读4k次,点赞3次,收藏9次。巧妙学会用命令删除字符串,将大大提高vim开发效率。首先用vim打开一个文件,假设文件内容为:name = 'cxk'hobby = "Sing, Dance"如果想把第一行中的’cxk’用命令删掉,只需把光标移动到第一行,输入:da'命令的意思是,删除所有单引号中的内容,包括引号。删除后:name = hobby = "Sing, Dance"你会发现,连引号都没了。如果你想保留引号,你可以输入:di'如果你想删除以后,直接变成插入模式,可以输入:ci'这样你可以直接_vim删除字符

app,H5与安卓对接数据_js 与 ios通讯 postmessage-程序员宅基地

文章浏览阅读148次。JavaScript与iOS通信用window.webkit.messageHandlers和postMessage方法进行通信;JavaScript与Android通信用androidNative对象进行通信,并使用JSON来传递数据;前端与app部门对接协调数据。_js 与 ios通讯 postmessage

牛客算法题入门_牛客算法基础-程序员宅基地

文章浏览阅读188次。语法知识以下内容是我在做牛客算法题时遇到的语法,是一些比较基础且常见的。函数1.map()map(function, iterable, ...)根据提供的函数做映射第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。>>> def square(x) : # 计算平方数... return x ** 2...>>> map(square, [_牛客算法基础

推荐文章

热门文章

相关标签