必须同时设置histsize和histfilesize为相同值(如2000),写入~/.bashrc并执行source ~/.bashrc,否则仅改一个或配置位置错误将导致按↑键或history命令仍只显示默认500条。

改 HISTSIZE 却发现按 ↑ 还是只能翻 500 条,或者 history 命令输出没变——根本不是变量没写对,而是只调了一个、配错了文件、或没重载生效。
为什么只改 HISTSIZE 不生效
HISTSIZE 和 HISTFILESIZE 是两个独立变量,必须同时设置且值一致才真正起效:
-
HISTSIZE控制当前终端里按 ↑ 能翻多少条(内存中缓存数) -
HISTFILESIZE控制下次登录时从~/.bash_history文件里读多少条进来(磁盘上限) - 如果
HISTFILESIZE=500,哪怕HISTSIZE=10000,新终端一打开也只加载前 500 条,其余全丢 - 默认两者常为 1000 或 500,但很多发行版(如 Ubuntu)的
~/.bashrc里自带注释行,解注释后若没删旧值,后写的会被前面的覆盖
必须写进 ~/.bashrc,且要 source
别碰 /etc/profile 或 ~/.bash_profile(除非你确认自己用的是 login shell):
- GUI 终端(GNOME Terminal、Konsole、VS Code 内置终端)通常开的是非 login shell,只读
~/.bashrc - 检查是否加载了它:运行
sh -c 'echo $BASH_VERSION',有输出才说明~/.bashrc被执行 - 加到
~/.bashrc末尾即可,例如:
export HISTSIZE=2000 export HISTFILESIZE=2000
然后立刻执行:source ~/.bashrc。只改文件不 source,等于没动。
避免多终端历史互相覆盖
默认行为是每次退出才覆盖写入 ~/.bash_history,多个终端同时操作会丢命令:
- 启用追加模式:
shopt -s histappend(加到~/.bashrc) - 让每条命令执行完立刻写入:
export PROMPT_COMMAND="history -a" - 注意:
history -a不会自动读其他终端新写的记录;强行加history -n同步容易冲突,一般不建议
zsh 用户别套用 bash 的配置
如果你用的是 zsh(macOS Catalina+ 默认、或装了 oh-my-zsh),HISTSIZE 和 HISTFILESIZE 行为不同:
-
HISTSIZE在 zsh 中同时管内存和文件,默认忽略HISTFILESIZE - 真正控制文件保存量的是
SAVEHIST,必须显式设置:export SAVEHIST=2000 - 配置文件是
~/.zshrc,不是~/.bashrc - 确认当前 shell:
echo $SHELL,别凭感觉猜
最常被忽略的点:生效时机。变量值写对了,不代表 shell 加载了它;source 执行了,不代表新开终端继承了它;两个变量设成一样了,不代表并发写入不出问题——这些都不是“改个数字”就能绕过的细节。











