跳到主要内容

TMOUT 禁用 Shell 会话的空闲自动超时登出

最后更新于:

TMOUT-禁用 Shell 会话的空闲自动超时登出

问题:linux命令中 TMOUT=0 ?

TMOUT=0 是 Linux Bash 环境变量,核心作用是禁用 Shell 会话的空闲自动超时登出

一、基本含义

  • TMOUT:Bash 内置环境变量,单位为,定义 Shell 会话空闲多久后自动退出。
  • TMOUT=0:表示无超时限制,会话永远不会因闲置自动关闭。
  • 默认状态:未设置 TMOUT 或值为 0,均不触发超时。

二、设置方式

1. 临时生效(当前终端)

1# 仅当前会话有效,关闭终端即失效
2export TMOUT=0

2. 永久生效(用户/全局)

  • 当前用户~/.bashrc~/.bash_profile):
    1echo 'export TMOUT=0' >> ~/.bashrc
    2source ~/.bashrc  # 立即生效
  • 全局所有用户(需 root):
    1echo 'export TMOUT=0' >> /etc/profile
    2source /etc/profile

三、常见场景与影响

  • 适用场景
    • 长期运行监控、日志 tail、后台任务,避免被自动踢掉。
    • 远程 SSH 连接需要保持长时间在线。📌(本次涉及。)
  • 安全风险
    • 共享服务器/公共终端忘记登出,易被他人操作。
    • 合规场景(如等保)通常要求设置合理超时(如 300 秒 = 5 分钟)。

四、验证与排查

1# 查看当前 TMOUT 值
2echo $TMOUT
3
4# 若提示“readonly variable”,说明被设为只读,需先取消
5unset TMOUT
6export TMOUT=0

五、与 SSH 超时的区别

  • TMOUT 控制 Shell 层面 超时。
  • SSH 连接超时由 sshd_configClientAliveInterval/ClientAliveCountMax 控制。

export TMOUT=0

问题:

1export TMOUT=0
2
34
5TMOUT=0
6
7这2个方式都可以吗?

简短结论

两个命令都能设置 TMOUT,但作用范围完全不同!

  • TMOUT=0仅当前 Shell 生效,子进程/子 Shell 看不到这个值
  • export TMOUT=0全局生效,当前 Shell + 所有子进程都能识别

最直观的区别

 1# 方式1:不 export
 2TMOUT=0
 3bash   # 进入子Shell
 4echo $TMOUT  # 输出空 → 失效了!
 5exit
 6
 7# 方式2:export
 8export TMOUT=0
 9bash   # 进入子Shell
10echo $TMOUT  # 输出0 → 依然有效!

详细解释

1. TMOUT=0(本地变量)

  • 只在当前终端会话生效
  • 不会传递给:子shell、脚本、su、sudo 等子进程
  • 关闭终端就消失

2. export TMOUT=0(环境变量)

  • export = 导出到环境
  • 当前shell + 所有子进程都能读取到
  • 这是Linux标准用法,能确保超时设置全局生效

你应该用哪个?

99%的场景推荐用:

1export TMOUT=0

❌ 只用 TMOUT=0 可能出现:

  • SSH 连接依然超时
  • 脚本里不生效
  • 切换用户后配置丢失

永久配置必须加 export

不管是写在 ~/.bashrc 还是 /etc/profile必须加 export

1# 正确
2export TMOUT=0
3
4# 错误(不生效)
5TMOUT=0

总结

  1. TMOUT=0 = 局部临时生效
  2. export TMOUT=0 = 全局完整生效
  3. 日常使用永远选 export 版本

临时使用(推荐如下方式)

远程 SSH 连接需要保持长时间在线。📌(本次涉及。)

1export TMOUT=0

结束。

最新文章

文档导航