每个用户的家目录中都有一个文件来保存会话中的命令行历史(默认为~/.bash_history,但由HISTFILE控制),当一个会话结束之后,就会根据命令行history的Size把该会话中的命令保存在命令行历史文件中。

那么如何控制它的大小?

有两个变量在控制命令行历史的大小:

  • HISTFILESIZE

HISTFILESIZE The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by removing the oldest entries. The history file is also truncated to this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets the default value to the value of HISTSIZE after reading any startup files.
HISTFILESIZE 历史文件中包含的最大行数。 当这个变量被赋值时,如果需要,历史文件被截断,通过删除最旧的条目来包含不超过该数量的行。 当 shell 退出时,历史文件在写入后也会被截断为这个大小。 如果值为 0,则历史文件被截断为零大小。 非数值和小于零的数值禁止截断。 shell 在读取任何启动文件后将默认值设置为 HISTSIZE 的值。

  • HISTSIZE

HISTSIZE The number of commands to remember in the command history (see HISTORY below). If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.
HISTSIZE 命令历史记录中要记住的命令数量(请参阅下面的历史记录)。 如果值为 0,则命令不保存在历史列表中。 小于零的数值会导致每个命令都保存在历史列表中(没有限制)。 读取任何启动文件后,shell 将默认值设置为 500。

这两个变量允许您控制历史记录的行为。 基本上,HISTSIZE 是当前会话期间保存的命令数,HISTFILESIZE 是跨会话记住的命令数。 因此,例如:

$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc10      29     173

在上面的示例中,因为 HISTSIZE 设置为 10,所以 history 返回一个包含 10 个命令的列表。 然而,如果你注销然后重新登录,history 将只返回 5 个命令,因为 HISTFILESIZE 设置为 5。这是因为,一旦你退出会话,你的历史记录的 HISTFILESIZE 行将保存到 你的历史文件(默认为~/.bash_history,但由HISTFILE控制)。 换句话说,命令被添加到 HISTFILE 直到达到 $HISTFILESIZE 行,在该点,每个后续行添加意味着文件的第一个命令将被删除。

你可以在你的~/.profile(或者~/.bash_profile,如果该文件存在的话)中设置这些变量的值。 首先不要将它们设置在你的~/.bashrc 中,因为它们没有设置在那里,其次因为这会导致你有不同的 登录与非登录 shell 中的行为可能导致 其他问题。

允许您微调历史行为的其他有用变量是:

  • HISTIGNORE : 这允许您忽略某些很少感兴趣的常见命令。 例如,您可以设置:

    export HISTIGNORE="pwd:df:du"
    

    这将导致任何以 pwddfdu 开头的命令被忽略并且不会保存在您的历史记录中。

  • HISTCONTROL : 这个让你选择历史的运作方式。 就我个人而言,我将其设置为“HISTCONTROL=ignoredups”,这会导致它只保存一次重复的命令。 其他选项是 ignorespace 忽略以空格开头的命令,以及 erasedups 导致在保存该行之前从历史列表中删除与当前行匹配的所有先前行。 ignoreboth 是 ignorespace 和 ignoreups 的简写。

  • HISTTIMEFORMAT : 这允许您设置历史文件的时间格式(这个还是挺有用的)。


为了进一步微调,您有:

  • histappend bash 选项。 这可以通过运行 shopt -s histappend 或将该命令添加到您的 ~/.bashrc 来设置。 如果设置了此选项

    当 shell 退出时,历史列表会附加到由 HISTFILE 变量的值命名的文件中,而不是覆盖该文件。

    这非常有用,因为它允许您组合不同会话的历史记录(例如考虑不同的终端)。

  • history 命令有两个有用的选项:

    • history -a : 使最后一条命令自动写入历史文件
    • history -r : 将历史文件导入当前会话

例如,您可以将这两个命令添加到您的 PROMPT_COMMAND 中(每次您的 shell 显示提示时都会执行此命令,因此每当您启动一个新的 shell 并在您在其中运行的每个命令之后):

export PROMPT_COMMAND='history -a;history -r;'

结合起来,它们确保您打开的任何新终端将立即导入任何其他 shell 会话的历史记录。 结果是所有终端/shell会话的共同历史。

利用HISTFILESIZE和HISTSIZE在ubunutu中调整命令行History的Size相关推荐

  1. mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法

    在命令行中输入命令并不是一个好主意,会造成安全问题.但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?, ...

  2. JavaJDK中的命令行工具

    JavaJDK中的命令行工具 本文内容主要学习自<深入理解Java虚拟机>,超赞的一本书强烈推荐! 一,常用JDK监控和故障处理工具 命令名称 全称 用途 jstat JVM Statis ...

  3. nodejs命令行执行程序_在NodeJS中编写命令行应用程序

    nodejs命令行执行程序 by Peter Benjamin 彼得·本杰明(Peter Benjamin) 在NodeJS中编写命令行应用程序 (Writing Command-Line Appli ...

  4. 如何在Java中解析命令行参数?

    在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...

  5. linux安装virtualbox命令,在Linux中从命令行查找Virtualbox Version的方法

    在我的Ubuntu无头服务器上使用Virtualbox时,我需要找到Virtualbox的版本,如果是GUI,我可以通过导航到Virtualbox->About->Help轻松找到它,但我 ...

  6. Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

  7. VS中添加命令行参数的方法

    在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击:添加参数的工程-->属性-->配置属性-->调试,在右侧"命令参数"栏输入要添加的参数, ...

  8. 使用 CliWrap 让C#中的命令行交互举重若轻

    在代码中进行命令行交互是一个很常见的场景, 特别是在一些CI CD 自动化流程中, 在这之前我们会使用 System.Diagnostics.Process API, 现在有一个更灵活的工具 CliW ...

  9. php 开启命令模式,如何启用PhpStorm中的命令行工具

    本篇文章主要给大家介绍如何使用phpstorm中的命令行工具. PhpStorm下载地址: PhpStorm使用命令行工具,我们可以直接从IDE调用命令!在我们使用任何命令行工具之前,我们必须在设置中 ...

  10. node作为php中转带参数,Nodejs中使用命令行如何进行传参(代码)

    本篇文章给大家带来的内容是关于Nodejs中使用命令行如何进行传参(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 使用commander.js.npm install com ...

最新文章

  1. expect--自动批量分发公钥脚本
  2. Helm包管理工具(简介、安装、方法)
  3. 技术盘点:云原生中间件的技术演进与未来趋势展望
  4. 用SQL Server Compact Edition创建移动应用程序 【转载】
  5. cam350 不能打开光绘文件_如何在CAM350中导入Allegro光绘
  6. 【转】CMMI环境下,该如何实施Agile?
  7. 实验楼python3中挑战一_实验楼python3学习挑战项目
  8. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制
  9. C++的冒泡排序法的原理是什么?
  10. 网易邮箱服务器怎么注册,免费网易域名邮箱申请教程
  11. 机器学习的环境搭建流程
  12. C语言数据结构理解语句L = (LNode * )malloc(sizeof(LNode));
  13. 百词斩不复习_不背单词,墨墨背单词和百词斩哪个好啊?
  14. 扩展期权定价模型到二元期权定价
  15. js获取当前时间(标准时间)
  16. This is probably not a problem with npm. There is likely additional logging output above.
  17. BI大数据分析是什么,大数据bi工具有哪些
  18. 引用RFM模型进行会员分析
  19. vue汉字转拼音-pinyin.js
  20. Java方法详解(基础)

热门文章

  1. 光耦w314的各引脚图_P621 光耦
  2. UVALive - 5713
  3. android 系统重装,手机系统重装教程[多图]
  4. ABC Amber CHM Converter:CHM转换PDF
  5. 读书笔记(十二)--穷爸爸,富爸爸
  6. centos7安裝搜狗輸入法_centos7安装搜狗输入法
  7. matlab 遥感图像分类,彩色遥感图像分类算法及Matlab实现
  8. linux 查看开机启动项
  9. WPF使用GMap.net框架开发地图应用
  10. 梦幻西游修炼金钱计算器